ansilove.js (283096B)
1 /* 2 * AnsiLove.js 3 * Copyright (c) 2019-2020, Frederic Cambus 4 * Copyright (c) 2013-2017, Andrew Herbert and Frederic Cambus 5 * https://www.ansilove.org 6 * 7 * AnsiLove.js is released under the BSD 2-Clause license. 8 * See LICENSE file for details. 9 * 10 * SPDX-License-Identifier: BSD-2-Clause 11 */ 12 13 var AnsiLove = (function () { 14 "use strict"; 15 var Palette, Font, Parser, Popup; 16 // Fetches a file located at <url>, returned as a Uint8Array. <callback> is called upon success, returning the array, <callbackFail> is called, if specified, if the operation was unsucessful with the http code. 17 function httpGet(url, callback, callbackFail) { 18 var http = new XMLHttpRequest(); 19 20 http.open("GET", url, true); 21 22 http.onreadystatechange = function () { 23 if (http.readyState === 4) { 24 switch (http.status) { 25 case 0: 26 case 200: 27 callback(new Uint8Array(http.response)); 28 break; 29 default: 30 if (callbackFail) { 31 callbackFail(http.status); 32 } 33 } 34 } 35 }; 36 37 http.responseType = "arraybuffer"; 38 http.send(); 39 } 40 41 // This function returns an object that emulates basic file-handling when fed an array of bytes. 42 function File(bytes) { 43 // pos points to the current position in the 'file'. SAUCE_ID, COMNT_ID, and commentCount are used later when parsing the SAUCE record. 44 var pos, SAUCE_ID, COMNT_ID, commentCount; 45 46 // Raw Bytes for "SAUCE" and "COMNT", used when parsing SAUCE records. 47 SAUCE_ID = new Uint8Array([0x53, 0x41, 0x55, 0x43, 0x45]); 48 COMNT_ID = new Uint8Array([0x43, 0x4F, 0x4D, 0x4E, 0x54]); 49 50 // Returns an 8-bit byte at the current byte position, <pos>. Also advances <pos> by a single byte. Throws an error if we advance beyond the length of the array. 51 this.get = function () { 52 if (pos >= bytes.length) { 53 throw "Unexpected end of file reached."; 54 } 55 return bytes[pos++]; 56 }; 57 58 // Same as get(), but returns a 16-bit byte. Also advances <pos> by two (8-bit) bytes. 59 this.get16 = function () { 60 var v; 61 v = this.get(); 62 return v + (this.get() << 8); 63 }; 64 65 // Same as get(), but returns a 32-bit byte. Also advances <pos> by four (8-bit) bytes. 66 this.get32 = function () { 67 var v; 68 v = this.get(); 69 v += this.get() << 8; 70 v += this.get() << 16; 71 return v + (this.get() << 24); 72 }; 73 74 // Exactly the same as get(), but returns a character symbol, instead of the value. e.g. 65 = "A". 75 this.getC = function () { 76 return String.fromCharCode(this.get()); 77 }; 78 79 // Returns a string of <num> characters at the current file position, and strips the trailing whitespace characters. Advances <pos> by <num> by calling getC(). 80 this.getS = function (num) { 81 var string; 82 string = ""; 83 while (num-- > 0) { 84 string += this.getC(); 85 } 86 return string.replace(/\s+$/, ''); 87 }; 88 89 // Returns a string of <num> characters at the current file position which is terminated by a null character. 90 this.getSZ = function (num) { 91 var string, value; 92 string = ""; 93 while (num-- > 0) { 94 value = this.get(); 95 if (value === 0) { 96 break; 97 } 98 string += String.fromCharCode(value); 99 } 100 return string; 101 }; 102 103 // Returns "true" if, at the current <pos>, a string of characters matches <match>. Does not increment <pos>. 104 this.lookahead = function (match) { 105 var i; 106 for (i = 0; i < match.length; ++i) { 107 if ((pos + i === bytes.length) || (bytes[pos + i] !== match[i])) { 108 break; 109 } 110 } 111 return i === match.length; 112 }; 113 114 // Returns an array of <num> bytes found at the current <pos>. Also increments <pos>. 115 this.read = function (num) { 116 var t; 117 t = pos; 118 // If num is undefined, return all the bytes until the end of file. 119 num = num || this.size - pos; 120 while (++pos < this.size) { 121 if (--num === 0) { 122 break; 123 } 124 } 125 return bytes.subarray(t, pos); 126 }; 127 128 // Sets a new value for <pos>. Equivalent to seeking a file to a new position. 129 this.seek = function (newPos) { 130 pos = newPos; 131 }; 132 133 // Returns the value found at <pos>, without incrementing <pos>. 134 this.peek = function (num) { 135 num = num || 0; 136 return bytes[pos + num]; 137 }; 138 139 // Returns the the current position being read in the file, in amount of bytes. i.e. <pos>. 140 this.getPos = function () { 141 return pos; 142 }; 143 144 // Returns true if the end of file has been reached. <this.size> is set later by the SAUCE parsing section, as it is not always the same value as the length of <bytes>. (In case there is a SAUCE record, and optional comments). 145 this.eof = function () { 146 return pos === this.size; 147 }; 148 149 // Seek to the position we would expect to find a SAUCE record. 150 pos = bytes.length - 128; 151 // If we find "SAUCE". 152 if (this.lookahead(SAUCE_ID)) { 153 this.sauce = {}; 154 // Read "SAUCE". 155 this.getS(5); 156 // Read and store the various SAUCE values. 157 this.sauce.version = this.getS(2); // String, maximum of 2 characters 158 this.sauce.title = this.getS(35); // String, maximum of 35 characters 159 this.sauce.author = this.getS(20); // String, maximum of 20 characters 160 this.sauce.group = this.getS(20); // String, maximum of 20 characters 161 this.sauce.date = this.getS(8); // String, maximum of 8 characters 162 this.sauce.fileSize = this.get32(); // unsigned 32-bit 163 this.sauce.dataType = this.get(); // unsigned 8-bit 164 this.sauce.fileType = this.get(); // unsigned 8-bit 165 this.sauce.tInfo1 = this.get16(); // unsigned 16-bit 166 this.sauce.tInfo2 = this.get16(); // unsigned 16-bit 167 this.sauce.tInfo3 = this.get16(); // unsigned 16-bit 168 this.sauce.tInfo4 = this.get16(); // unsigned 16-bit 169 // Initialize the comments array. 170 this.sauce.comments = []; 171 commentCount = this.get(); // unsigned 8-bit 172 this.sauce.flags = this.get(); // unsigned 8-bit 173 this.sauce.blinkMode = (this.sauce.flags & 1) === 1; 174 this.sauce.letterSpacing = (this.sauce.flags >> 1) & 3; 175 this.sauce.aspectRatio = (this.sauce.flags >> 3) & 3; 176 this.sauce.tInfoS = this.getSZ(22); // Null-terminated string, maximum of 22 characters 177 if (commentCount > 0) { 178 // If we have a value for the comments amount, seek to the position we'd expect to find them... 179 pos = bytes.length - 128 - (commentCount * 64) - 5; 180 // ... and check that we find a COMNT header. 181 if (this.lookahead(COMNT_ID)) { 182 // Read COMNT ... 183 this.getS(5); 184 // ... and push everything we find after that into our <this.sauce.comments> array, in 64-byte chunks, stripping the trailing whitespace in the getS() function. 185 while (commentCount-- > 0) { 186 this.sauce.comments.push(this.getS(64)); 187 } 188 } 189 } 190 } 191 // Seek back to the start of the file, ready for reading. 192 pos = 0; 193 194 if (this.sauce) { 195 // If we have found a SAUCE record, and the fileSize field passes some basic sanity checks... 196 if (this.sauce.fileSize > 0 && this.sauce.fileSize < bytes.length) { 197 // Set <this.size> to the value set in SAUCE. 198 this.size = this.sauce.fileSize; 199 } else { 200 // If it fails the sanity checks, just assume that SAUCE record can't be trusted, and set <this.size> to the position where the SAUCE record begins. 201 this.size = bytes.length - 128; 202 } 203 } else { 204 // If there is no SAUCE record, assume that everything in <bytes> relates to an image. 205 this.size = bytes.length; 206 } 207 } 208 209 // Returns a sauce record i.e. File.sauce to <callback> asynchronously, for an array of <bytes>. 210 function sauceBytes(bytes) { 211 return new File(bytes).sauce; 212 } 213 214 // Returns a sauce record i.e. File.sauce to <callback> asynchronously, for the file found at <url>. <callbackFail> is called if unsuccesful. 215 function sauce(url, callback, callbackFail) { 216 httpGet(url, function (bytes) { 217 callback(sauceBytes(bytes)); 218 }, callbackFail); 219 } 220 221 // Font collects together the functions for reading, rendering, and drawing the glyphs used on a canvas element. 222 Font = (function () { 223 // FONT_PRESETS stores all the predefined font characters, BASE64_CHARS is used when decoding the predefined data (in base64 format), and fontBitsBuffer is a buffer which is leveraged whenever a font is re-used to save a few cpu cycles. 224 var FONT_PRESETS, BASE64_CHARS, fontBitsBuffer; 225 226 // This object describes all the predefined font data, <width> and <height> are in pixels, <data> is a base64-encoded byte array, containing a 1-bit image for all 256 characters in sequence. <amigaFont> is referenced when rendering to make sure the font is one pixel wider. 227 FONT_PRESETS = { 228 "b-strict": { 229 "width": 8, 230 "height": 8, 231 "data": "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", 232 "amigaFont": true 233 }, 234 "b-struct": { 235 "width": 8, 236 "height": 8, 237 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYGBgAGABsbAAAAAAAAGxs/mz+bGwAGD5gPAZ8GAAAdpx4PGrMADxmZD9sxn8AGBgwAAAAAAAMGDAwMBgMADAYDAwMGDAAAMd+PH7/GBAAGBj/GBgAAAAAAAAAGBgwAAAA/gAAAAAAAAAAABgYAAMGDBgwYMCAAnzO1tbmfIAAfAwMDAwMAHzGxgZ8wP4A/AZ8BsbGfADAwMbGxn8GAP7AfAbGxnwAfMD8xsbGfAD+xgwYMDAwAHzGxsZ8xnwAfMbGxn4GfAAAGBgAABgYAAAYGAAAGBgwAAYYYBgGAAAAAH4AfgAAAABgGAYYYAAAfMbGBnwwADB+w9/z38B9AHwGfsbGxn4A/MbGxvzG/AB8xsbAwMZ8APjMxsbGxvwAfMbGxv7AfAA8ZmZmYP5gAHbOxsZ+BnwAxsbGxv7GxgAYGBgYGBgYAH4GBsbGxnwAxsbGzPjGxgDAwMDAxsZ8AMbu/tbGxsYA/MbGxsbGxgB8xsbGxsZ8APzGxsbG/MAAfMbGxsbMfgP8xsbM+MbGAHzGxsB8BnwAYPxgZmZmPADGxsbGxsZ8AMbGxsZsbDgAxsbG1v7uxgDGxsbGfMbGAMbGxsZ+BnwA/sbGBnzA/gA8MDAwMDA8AMBgMBgMBgMBPAwMDAwMPAAYPGbDAAAAAAAAAAAAAAD/GBgOAAAAAAB8BnbOxsZ+APzGzPjGxvwAfMbAxsbGfAAGfsbGxsZ+AHzG/sDGxnwAPGZmZmD8YAB+xsbOdgZ8AMbG/sbGxsYAGAAYGBgYGAAGAB7GxsZ8AMbGxsz8xsYAYGBgYGZmPAD81tbWxsbGAMbm9t7OxsYAfMbGxsbGfAD8xsbG/MDAAHzGxsbOdgYA/MbG+MzGxgB8xsbAfAZ8AP5gZmZmZjwABsbGxsbOdgAGxsbGbHw4AAbGxtbW1nwABsbGxnzGxgAGxsbGfgZ8AP4GfMDGxv4ADhgYcBgYDgAYGBgYGBgYGHAYGA4YGHAAdtwAAAAAAAAGPOCGDjjAAAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAf3d3d3d/AAB/d3d3d38AAH93d3d3fwAAAAAAAAAAABgAGBgYGBgA//////////8cMDB8MDB+AGM+dz5jAAAAw2Y8GD4YGAAYGBgAGBgYAAAzZsxmMwAAZmYAAAAAAAB+gZ2xnYF+AB42Zj4AfwAAADNmzGYzAAD/DgAAAAAAAAAAAP4AAAAA6U9JAAAAAAD/AAAAAAAAADxmPAAAAAAAAAAYfhgAfgB4DBgwfAAAAHgMGAx4AAAAGDBgAAAAAAAAAGZmZmZ/YD56ejoKCgoAAAAAGBgAAAAAAAAAAAAcOHgYGBgAAAAAPGZmPAB+AAAAzGYzZswAAEDGTFgyZs4CQMNGTB4yZA7gM2Y8+TNnAQwADD5gY2M+YDB8xsb+xgAMGHzGxv7GADjGfMbG/sYAdtx8xsb+xgBsAHzGxv7GABhmfMbG/sYAAH/MzP/MzwB8xsDAwMZ8GHA+ZsD4wP4ADD5mwPjA/gAwzP7A+MD+AP9/Pw8ff///MBgAGBgYGAAMGAAYGBgYABhmGBgYGBgA//788Pj+//94bGb2ZmZ8ADtuAOb23s4AYDB8xsbGfAAMGHzGxsZ8ADDMfMbGxnwAbNh8xsbGfADGAHzGxsZ8AADDZhhmwwAAfM7O1ubmfAAwGMbGxsZ8ABgwxsbGxnwAEGyCxsbGfABsAMbGxsZ8ABgwxsbGfgZ8YGB8ZnxgYAB8xsbG3MbcwGAwPAZ+xn4ADBg8Bn7GfgAYZjwGfsZ+AHbcPAZ+xn4AbAA8Bn7GfgAYZjwGfsZ+AAAAPht/2G4AAHzGwMDGfBhgMHzG/sB8AAwYfMb+wHwAMMx8xv7AfAADHz9/f////zAYABgYGAwADBgAGBgYDAAYZgAYGBgMAMD4/P7+////Dz9///9/Pw9m2PzGxsbGADAYfMbGxnwAGDB8xsbGfADw/P7///788HbcfMbGxnwAbAB8xsbGfAAAGAB+ABgAAAB8ztbW5nwAYDDGxsbGfgAYMMbGxsZ+ABhmAMbGxn4A////f38/HwMYMMbGxn4GfGBgfGZmfGBg/////v78+MA=", 238 "amigaFont": true 239 }, 240 "microknight": { 241 "width": 8, 242 "height": 16, 243 "data": "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", 244 "amigaFont": true 245 }, 246 "microknight+": { 247 "width": 8, 248 "height": 16, 249 "data": "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", 250 "amigaFont": true 251 }, 252 "mosoul": { 253 "width": 8, 254 "height": 16, 255 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYGBgYGBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAAAZmasrNjYNjZqaszMAAA4OGxsaGh2dtzczs57ewAAGBgYGDAwAAAAAAAAAAAAAAwMGBgwMDAwMDAYGAwMAAAwMBgYDAwMDAwMGBgwMAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwICAPDxmZm5ufn52dmZmPDwAADg4GBgYGBgYGBgYGBgYAAA8PAYGPDxgYGBgYGB+fgAAfHwGBhwcBgYGBgYGfHwAAAwMzMzMzMzM/v4MDAwMAAB8fGBgfHwGBgYGBgZ8fAAAPDxgYHx8ZmZmZmZmPDwAAH5+BgYGBgwMGBgYGBgYAAA8PGZmPDxmZmZmZmY8PAAAPDxmZmZmZmY+PgYGPDwAAAAAGBgYGAAAAAAYGBgYAAAAABgYGBgAAAAAGBgYGDAwAAAGBhgYYGAYGAYGAAAAAAAAAAD//wAA//8AAAAAAAAAAGBgGBgGBhgYYGAAAAAAPDxmZgYGHBwYGAAAGBgAAHx8xsbe3tbW3t7AwHh4AAA8PGZmZmZmZn5+ZmZmZgAAfHxmZnx8ZmZmZmZmfHwAAB4eMDBgYGBgYGAwMB4eAAB8fGZmZmZmZmZmZmZ8fAAAfn5gYGBgYGB4eGBgfn4AAH5+YGBgYGBgeHhgYGBgAAA8PGBgbm5mZmZmZmY+PgAAZmZmZmZmZmZ+fmZmZmYAADw8GBgYGBgYGBgYGDw8AAAODgYGBgYGBgYGBgY8PAAAxsbMzNjY8PDY2MzMxsYAAGBgYGBgYGBgYGBgYH5+AADGxu7u/v7W1sbGxsbGxgAAxsbm5vb23t7OzsbGxsYAADw8ZmZmZmZmZmZmZjw8AAB8fGZmZmZmZnx8YGBgYAAAeHjMzMzMzMzMzNzcfn4AAHx8ZmZmZmZmfHxmZmZmAAA8PGBgPDwGBgYGBgZ8fAAAfn4YGBgYGBgYGBgYGBgAAGZmZmZmZmZmZmZmZjw8AABmZmZmZmZmZjw8PDwYGAAAxsbGxsbG1tb+/u7uxsYAAMPDZmY8PBgYPDxmZsPDAADDw2ZmPDwYGBgYGBgYGAAA/v4MDBgYMDBgYMDA/PwAADw8MDAwMDAwMDAwMDw8AADAwGBgMDAYGAwMBgYDAwEBPDwMDAwMDAwMDAwMPDwAABAQODhsbMbGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//GBgYGAwMAAAAAAAAAAAAAAAAAAA8PAYGPj5mZj4+AABgYGBgfHxmZmZmZmZ8fAAAAAAAADw8YGBgYGBgPDwAAAYGBgY+PmZmZmZmZj4+AAAAAAAAPDxmZn5+YGA8PAAAHBwwMDAwMDB8fDAwMDAAAAAAAAA+PmZmZmY+PgYGPDxgYGBgfHxmZmZmZmZmZgAAGBgAABgYGBgYGBgYDAwAAAwMAAAMDAwMDAwMDAwMeHhgYGBgZmZsbHh4bGxmZgAAGBgYGBgYGBgYGBgYDAwAAAAAAADs7P7+1tbGxsbGAAAAAAAAfHxmZmZmZmZmZgAAAAAAADw8ZmZmZmZmPDwAAAAAAAB8fGZmZmZ8fGBgYGAAAAAAPj5mZmZmPj4GBgYGAAAAAD4+YGBgYGBgYGAAAAAAAAA8PGBgPDwGBnx8AAAwMDAwfHwwMDAwMDAcHAAAAAAAAGZmZmZmZmZmPDwAAAAAAABmZmZmZmY8PBgYAAAAAAAAxsbGxtbW/v5sbAAAAAAAAMbGbGw4OGxsxsYAAAAAAABmZmZmZmY+PgYGPDwAAAAAfn4MDBgYMDB+fgAADg4YGBgYcHAYGBgYDg4AABgYGBgYGBgYGBgYGBgYGBhwcBgYGBgODhgYGBhwcAAAcnKcnAAAAAAAAAAAAAAAAA8PPDzw8MPDDw88PPDwAAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAfn5mZmZmZmZmZn5+AAAAAH5+ZmZmZmZmZmZ+fgAAAAB+fmZmZmZmZmZmfn4AAAAAAAAAAAAAAAAAAAAAAAAYGAAAGBgYGBgYGBgYGAAAAAAMDD4+bGw+PgwMAAAAABwcNjYwMHh4MDAwMH5+AABCQjw8ZmY8PEJCAAAAAAAAw8NmZjw8GBg8PBgYGBgAABgYGBgYGAAAGBgYGBgYAAA8PGBgPDxmZjw8BgY8PAAAZmZmZgAAAAAAAAAAAAAAADw8QkKdnaGhoaGdnUJCPDwcHCQkREQ8PAAAfn4AAAAAAAAzM2ZmzMxmZjMzAAAAAD4+BgYAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAPDxCQrm5paW5uaWlQkI8PP//AAAAAAAAAAAAAAAAAAA8PGZmPDwAAAAAAAAAAAAAGBgYGH5+GBgYGAAAfn4AAHh4DAwYGDAwfHwAAAAAAAB4eAwMGBgMDHh4AAAAAAAAGBgwMGBgAAAAAAAAAAAAAAAAAABmZmZmZmZmZn9/YGA+Pnp6eno6OgoKCgoKCgAAAAAAABgYGBgAAAAAAAAAAAAAAAAAAAAAAAAAABgYMDAwMHBwMDAwMDAwAAAAAAAAODhEREREODgAAHx8AAAAAAAAzMxmZjMzZmbMzAAAAABAQMbGTExYWDIyZmbPzwICQEDGxkxMWFg+PmJixMQODsDAIyNmZiws2dkzM2dnAQEYGAAAGBgwMGBgZmY8PAAAMDAYGDw8ZmZ+fmZmZmYAAAwMGBg8PGZmfn5mZmZmAAAYGGZmPDxmZn5+ZmZmZgAAcXGOjjw8ZmZ+fmZmZmYAAGZmAAA8PGZmfn5mZmZmAAAYGCQkPDxmZn5+ZmZmZgAAHx88PDw8b298fMzMz88AAB4eMDBgYGBgMDAeHgwMGBgwMBgYfn5gYHh4YGB+fgAADAwYGH5+YGB4eGBgfn4AABgYZmZ+fmBgeHhgYH5+AABmZgAAfn5gYHh4YGB+fgAAMDAYGDw8GBgYGBgYPDwAAAwMGBg8PBgYGBgYGDw8AAAYGGZmPDwYGBgYGBg8PAAAZmYAADw8GBgYGBgYPDwAAHh4bGxmZvb2ZmZsbHh4AABxcc7O5ub29t7ezs7GxgAAMDAYGDw8ZmZmZmZmPDwAAAwMGBg8PGZmZmZmZjw8AAAYGGZmPDxmZmZmZmY8PAAAcXGOjjw8ZmZmZmZmPDwAAMPDPDxmZmZmZmZmZjw8AAAAAMbGbGw4OGxsxsYAAAAAPz9mZm5ufn52dmZm/PwAADAwGBhmZmZmZmZmZjw8AAAMDBgYZmZmZmZmZmY8PAAAGBgkJGZmZmZmZmZmPDwAAGZmAABmZmZmZmZmZjw8AAAGBggIw8NmZjw8GBgYGAAAwMDAwPz8xsb8/MDAwMAAADw8ZmZmZmxsZmZmZmxsYGAwMBgYPDwGBj4+ZmY+PgAADAwYGDw8BgY+PmZmPj4AABgYZmY8PAYGPj5mZj4+AABxcY6OPDwGBj4+ZmY+PgAAZmYAADw8BgY+PmZmPj4AABgYJCQ8PAYGPj5mZj4+AAAAAAAAfn4bG39/2Nh3dwAAAAAAADw8YGBgYGBgPDwYGDAwGBg8PGZmfn5gYDw8AAAMDBgYPDxmZn5+YGA8PAAAGBhmZjw8ZmZ+fmBgPDwAAGZmAAA8PGZmfn5gYDw8AAAwMBgYAAAYGBgYGBgMDAAADAwYGAAAGBgYGBgYDAwAABgYZmYAABgYGBgYGAwMAAAAAGZmAAAYGBgYGBgMDAAAYGD8/BgYPDxmZmZmPDwAAHFxjo4AAHx8ZmZmZmZmAAAwMBgYAAA8PGZmZmY8PAAADAwYGAAAPDxmZmZmPDwAABgYZmYAADw8ZmZmZjw8AABxcY6OAAA8PGZmZmY8PAAAAABmZgAAPDxmZmZmPDwAAAAAGBgAAP//AAAYGAAAAAAAAAICfHzOztbW5uZ8fICAMDAYGAAAZmZmZmZmPj4AAAwMGBgAAGZmZmZmZj4+AAAYGGZmAABmZmZmZmY+PgAAAABmZgAAZmZmZmZmPj4AAAwMGBgAAGZmZmY8PBgYMDBgYGBgfHxmZmZmfHxgYGBgAABmZgAAZmZmZjw8GBgwMA==", 256 "amigaFont": true 257 }, 258 "pot-noodle": { 259 "width": 8, 260 "height": 16, 261 "data": "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GBgwMHx8BgZ2dsbGfn4AABgYZmZ8fAYGdnbGxn5+AAB2dtzcfHwGBnZ2xsZ+fgAAxsYAAHx8BgZ2dsbGfn4AAHx8xsZ8fAYGdnbGxn5+AAAAAAAAfn4bG35+yMh/fwAAAAAAAHx8xsbAwMbGfHwwMDAwGBh8fMbG3NzAwH5+AAAYGDAwfHzGxtzcwMB+fgAAGBhmZnx8xsbc3MDAfn4AAMbGAAB8fMbG3NzAwH5+AAAwMBgYAAAYGBgYGBgMDAAADAwYGAAAGBgYGBgYDAwAABgYZmYAABgYGBgYGAwMAAAAAGZmAAAYGBgYGBgMDAAAMDB+fhgYfHzGxsbGfHwAAHZ23NwAAPz8xsbGxsbGAgIwMBgYAAB8fMbGxsZ8fAAAGBgwMAAAfHzGxsbGfHwAABgYZmYAAHx8xsbGxnx8AAB2dtzcAAB8fMbGxsZ8fAAAAABsbAAAfHzGxsbGfHwAAAAAGBgAAH5+AAAYGAAAAAAAAAMDPj5ubn5+dnZ8fMDAdnbc3ICAxsbGxsbGfn4AAAwMGBiAgMbGxsbGxn5+AAAYGGZmgIDGxsbGxsZ+fgAAAADGxoCAxsbGxsbGfn4AAAwMGBiAgMbGxsZsbDg48PDw8GBgfHxmZmZmfHxgYPDwAADGxoCAxsbGxmxsODjw8A==", 262 "amigaFont": true 263 }, 264 "topaz": { 265 "width": 8, 266 "height": 16, 267 "data": "AAAAAAAAAAAAAAAAAAAAAIODOTkhISkpISE/P4eH///Dw5mZmZmBgZmZmZmZmf//g4OZmZmZg4OZmZmZg4P//+Hhz8+fn5+fn5/Pz+Hh//+Hh5OTmZmZmZmZk5OHh///gYGfn5+fh4efn5+fgYH//4GBn5+fn4eHn5+fn5+f///Dw5mZn5+RkZmZmZnBwf//mZmZmZmZgYGZmZmZmZn//8PD5+fn5+fn5+fn58PD///5+fn5+fn5+fn5mZnDw///nJyZmZOTh4eTk5mZnJz//5+fn5+fn5+fn5+fn4GB//+cnIiIgICUlJycnJycnP//nJyMjISEkJCYmJycnJz//8PDmZmZmZmZmZmZmcPD//+Dg5mZmZmDg5+fn5+fn///w8OZmZmZmZmZmZGRwMD//4ODmZmZmYODk5OZmZmZ///Dw5mZj4/Dw/HxmZnDw///gYHn5+fn5+fn5+fn5+f//5mZmZmZmZmZmZmZmcPD//+ZmZmZmZmZmZmBw8Pn5///nJycnJyclJSAgIiInJz//zw8mZnDw+fnw8OZmTw8//88PJmZw8Pn5+fn5+fn5///gID5+fPz5+fPz5+fgID//8PDz8/Pz8/Pz8/Pz8PD//8/P5+fz8/n5/Pz+fn8/P//w8Pz8/Pz8/Pz8/Pzw8P/////////////////////gIAAAAAAAAAAAAAAAAAAAAAAGBgYGBgYGBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAAAZmasrNjYNjZqaszMAAA4OGxsaGh2dtzczs57ewAAGBgYGDAwAAAAAAAAAAAAAAwMGBgwMDAwMDAYGAwMAAAwMBgYDAwMDAwMGBgwMAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAAfn4AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwAAAPDxmZm5ufn52dmZmPDwAABgYODh4eBgYGBgYGBgYAAA8PGZmBgYMDBgYMDB+fgAAPDxmZgYGHBwGBmZmPDwAABwcPDxsbMzM/v4MDAwMAAB+fmBgfHwGBgYGZmY8PAAAHBwwMGBgfHxmZmZmPDwAAH5+BgYGBgwMGBgYGBgYAAA8PGZmZmY8PGZmZmY8PAAAPDxmZmZmPj4GBgwMODgAAAAAGBgYGAAAAAAYGBgYAAAAABgYGBgAAAAAGBgYGDAwAAAGBhgYYGAYGAYGAAAAAAAAAAB+fgAAfn4AAAAAAAAAAGBgGBgGBhgYYGAAAAAAPDxmZgYGDAwYGAAAGBgAAHx8xsbe3tbW3t7AwHh4AAA8PGZmZmZ+fmZmZmZmZgAAfHxmZmZmfHxmZmZmfHwAAB4eMDBgYGBgYGAwMB4eAAB4eGxsZmZmZmZmbGx4eAAAfn5gYGBgeHhgYGBgfn4AAH5+YGBgYHh4YGBgYGBgAAA8PGZmYGBubmZmZmY+PgAAZmZmZmZmfn5mZmZmZmYAADw8GBgYGBgYGBgYGDw8AAAGBgYGBgYGBgYGZmY8PAAAxsbMzNjY8PDY2MzMxsYAAGBgYGBgYGBgYGBgYH5+AADGxu7u/v7W1sbGxsbGxgAAxsbm5vb23t7OzsbGxsYAADw8ZmZmZmZmZmZmZjw8AAB8fGZmZmZ8fGBgYGBgYAAAeHjMzMzMzMzMzNzcfn4AAHx8ZmZmZnx8bGxmZmZmAAA8PGZmcHA8PA4OZmY8PAAAfn4YGBgYGBgYGBgYGBgAAGZmZmZmZmZmZmZmZjw8AABmZmZmZmZmZjw8PDwYGAAAxsbGxsbG1tb+/u7uxsYAAMPDZmY8PBgYPDxmZsPDAADDw2ZmPDwYGBgYGBgYGAAA/v4MDBgYMDBgYMDA/v4AADw8MDAwMDAwMDAwMDw8AADAwGBgMDAYGAwMBgYDAwAAPDwMDAwMDAwMDAwMPDwAABAQODhsbMbGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+GBgYGAwMAAAAAAAAAAAAAAAAAAA8PAYGPj5mZj4+AABgYGBgfHxmZmZmZmZ8fAAAAAAAADw8YGBgYGBgPDwAAAYGBgY+PmZmZmZmZj4+AAAAAAAAPDxmZn5+YGA8PAAAHBwwMHx8MDAwMDAwMDAAAAAAAAA+PmZmZmY+PgYGPDxgYGBgfHxmZmZmZmZmZgAAGBgAABgYGBgYGBgYDAwAAAwMAAAMDAwMDAwMDAwMeHhgYGBgZmZsbHh4bGxmZgAAGBgYGBgYGBgYGBgYDAwAAAAAAADs7P7+1tbGxsbGAAAAAAAAfHxmZmZmZmZmZgAAAAAAADw8ZmZmZmZmPDwAAAAAAAB8fGZm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", 268 "amigaFont": true 269 }, 270 "topaz+": { 271 "width": 8, 272 "height": 16, 273 "data": "AAAAAAAAAAAAAAAAAAAAAIODOTkhISkpISE/P4eH///Dw5mZmZmBgZmZmZmZmf//g4OZmZmZg4OZmZmZg4P//+Hhz8+fn5+fn5/Pz+Hh//+Hh5OTmZmZmZmZk5OHh///gYGfn5+fh4efn5+fgYH//4GBn5+fn4eHn5+fn5+f///Dw5mZn5+RkZmZmZnBwf//mZmZmZmZgYGZmZmZmZn//8PD5+fn5+fn5+fn58PD///5+fn5+fn5+fn5mZnDw///nJyZmZOTh4eTk5mZnJz//5+fn5+fn5+fn5+fn4GB//+cnIiIgICUlJycnJycnP//nJyMjISEkJCYmJycnJz//8PDmZmZmZmZmZmZmcPD//+Dg5mZmZmDg5+fn5+fn///w8OZmZmZmZmZmZGRwMD//4ODmZmZmYODk5OZmZmZ///Dw5mZj4/Dw/HxmZnDw///gYHn5+fn5+fn5+fn5+f//5mZmZmZmZmZmZmZmcPD//+ZmZmZmZmZmZmBw8Pn5///nJycnJyclJSAgIiInJz//zw8mZnDw+fnw8OZmTw8//88PJmZw8Pn5+fn5+fn5///gID5+fPz5+fPz5+fgID//8PAz8/Pz8/Pz8/Pz8DD//8/P5+fz8/n5/Pz+fn8/P7+wwPz8/Pz8/Pz8/PzA8P/////////////////////AAAAAAAAAAAAAAAAAAAAAAAAGBgYGBgYGBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAMDZmasrNjYNjZqaszMAAA4OGxsaGh2dtzczs57ewAAGBgYGDAwAAAAAAAAAAAAAAMHDgwYGBgYGBgMDgcDAADA4HAwGBgYGBgYMHDgwAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwICAPDxmZm5ufn52dmZmPDwAABgYODh4eBgYGBgYGBgYAAA8PGZmBgYMDBgYMDB+fgAAPDxmZgYGHBwGBmZmPDwAABwcPDxsbMzM/v4MDAwMAAB+fmBgfHwGBgYGZmY8PAAAHBwwMGBgfHxmZmZmPDwAAH5+BgYGBgwMGBgYGBgYAAA8PGZmZmY8PGZmZmY8PAAAPDxmZmZmPj4GBgwMODgAAAAAGBgYGAAAAAAYGBgYAAAAABgYGBgAAAAAGBgYGDAwAwMGBgwMGBgMDAYGAwMAAAAAAAD//wAA//8AAAAAAADAwGBgMDAYGDAwYGDAwAAAPDxmZgYGDAwYGAAAGBgAAHx8xsbe3tbW3t7AwHh4AAA8PGZmZmZ+fmZmZmZmZgAAfHxmZmZmfHxmZmZmfHwAAB4eMDBgYGBgYGAwMB4eAAB4eGxsZmZmZmZmbGx4eAAAfn5gYGBgeHhgYGBgfn4AAH5+YGBgYHh4YGBgYGBgAAA8PGZmYGBubmZmZmY+PgAAZmZmZmZmfn5mZmZmZmYAADw8GBgYGBgYGBgYGDw8AAAGBgYGBgYGBgYGZmY8PAAAxsbMzNjY8PDY2MzMxsYAAGBgYGBgYGBgYGBgYH5+AADGxu7u/v7W1sbGxsbGxgAAxsbm5vb23t7OzsbGxsYAADw8ZmZmZmZmZmZmZjw8AAB8fGZmZmZ8fGBgYGBgYAAAeHjMzMzMzMzMzNzcfn4AAHx8ZmZmZnx8bGxmZmZmAAA8PGZmcHA8PA4OZmY8PAAAfn4YGBgYGBgYGBgYGBgAAGZmZmZmZmZmZmZmZjw8AABmZmZmZmZmZjw8PDwYGAAAxsbGxsbG1tb+/u7uxsYAAMPDZmY8PBgYPDxmZsPDAADDw2ZmPDwYGBgYGBgYGAAA/v4MDBgYMDBgYMDA/v4AADw/MDAwMDAwMDAwMD88AADAwGBgMDAYGAwMBgYDAwEBPPwMDAwMDAwMDAwM/DwAABAQODhsbMbGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//GBgYGAwMAAAAAAAAAAAAAAAAAAA8PAYGPj5mZj4+AABgYGBgfHxmZmZmZmZ8fAAAAAAAADw8YGBgYGBgPDwAAAYGBgY+PmZmZmZmZj4+AAAAAAAAPDxmZn5+YGA8PAAAHBwwMHx8MDAwMDAwMDAAAAAAAAA+PmZmZmY+PgYGPDxgYGBgfHxmZmZmZmZmZgAAGBgAABgYGBgYGBgYDAwAAAwMAAAMDAwMDAwMDAwMeHhgYGBgZmZsbHh4bGxmZgAAGBgYGBgYGBgYGBgYDAwAAAAAAADs7P7+1tbGxsbGAAAAAAAAfHxmZmZmZmZmZgAAAAAAADw8ZmZmZmZmPDwAAAAAAAB8fGZm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", 274 "amigaFont": true 275 }, 276 "topaz500": { 277 "width": 8, 278 "height": 16, 279 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBg8PDw8GBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAAAxsbMzBgYMDBmZsbGAAA4OGxsaGh2dtzczMx2dgAAGBgYGDAwAAAAAAAAAAAAAAwMGBgwMDAwMDAYGAwMAAAwMBgYDAwMDAwMGBgwMAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAAfn4AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwAAAPDxmZm5ufn52dmZmPDwAABgYODgYGBgYGBgYGH5+AAA8PGZmBgYcHDAwZmZ+fgAAPDxmZgYGHBwGBmZmPDwAABwcPDxsbMzM/v4MDB4eAAB+fmBgfHwGBgYGZmY8PAAAHBwwMGBgfHxmZmZmPDwAAH5+ZmYGBgwMGBgYGBgYAAA8PGZm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", 280 "amigaFont": true 281 }, 282 "topaz500+": { 283 "width": 8, 284 "height": 16, 285 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBg8PDw8GBgYGAAAGBgAAGxsbGwAAAAAAAAAAAAAAABsbGxs/v5sbP7+bGxsbAAAGBg+PmBgPDwGBnx8GBgAAAMDxsbMzBgYMDBmZsbGgIA4OGxsaGh2dtzczMx2dgAAGBgYGDAwAAAAAAAAAAAAAAMHDgwYGBgYGBgMDgcDAADA4HAwGBgYGBgYMHDgwAAAAABmZjw8//88PGZmAAAAAAAAGBgYGH5+GBgYGAAAAAAAAAAAAAAAAAAAGBgYGDAwAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAYGBgYAAADAwYGDAwYGDAwYGDAwICAPDxmZm5ufn52dmZmPDwAABgYODgYGBgYGBgYGH5+AAA8PGZmBgYcHDAwZmZ+fgAAPDxmZgYGHBwGBmZmPDwAABwcPDxsbMzM/v4MDB4eAAB+fmBgfHwGBgYGZmY8PAAAHBwwMGBgfHxmZmZmPDwAAH5+ZmYGBgwMGBgYGBgYAAA8PGZm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", 286 "amigaFont": true 287 }, 288 "80x25": { 289 "width": 9, 290 "height": 16, 291 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAADAMAwABwGAwGAwGB4AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxn8xmMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAAxgAAGMxmMxmMxj8BgYeAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAwGD4xmAwGAxj4GAwAAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAAZjMPAwfgwfgwGAwAAAAAAAHwzGY+GIzG8zGYzGMAAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAAAAAAA/mAwGAwAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 292 "amigaFont": false 293 }, 294 "80x25small": { 295 "width": 4, 296 "height": 8, 297 "data": "AAAAAACQD2Bvb/CfCu5EAATu5AAE6k4ABO5OAAAGYAD/+Z//AGmWAP+Waf8CSqQABKpEAAdESAAHVVoABEpEAAjOyAACbmIABOTkAAqqCgAHpiIwaGlhYAAA7gAE5OTgBOREQATkREAALyAAAE9AAAAI8AAAb2AAAE7gAADuQAAAAAAABEQEAAqgAAAE5OQARoQsQACSSQAE5JpQBIAAAAJERCAEIiJACk5KAABOQAAAAASAAA4AAAAABAAAJEgABKqkAAxETgAMJI4ADCQsAAiORAAOhCwABIykAA4kRAAEpKQABqYiAABAQAAAQEgAAkhCAADw8AAIQkgASiQEAATuhgAErqoADKysAASopAAMqqwADoyOAA6MiAAEqOQACq6qAA5ETgAOIqQACqyqAAiIjgAK7qoACu7qAASqpAAMrIgABKqmAAysqgAGhCwADkREAAqqpAAKqkQACq7kAAqkqgAKpEQADiSOAAZERgAAhEIABiImAEoAAAAAAADwCEAAAABqpgAIyqwAAGiGAAJqpgAAToYAAkZEAABKpiQIyqoABAREAAQERIAIrKoABEREAADuqgAAyqoAAEqkAADKyAAAamIAAMqIAABoLAAE5EQAAKqmAACqpAAAqu4AAKRKAACqRAAA4s4AAkxCAARERAAIRkgAbAAAAABKrgAEqKSACgqmACQk6OBKBuYACgbmAEIG5gAEBuYAAAaGSEoE6OAKBOjghATo4AoERABKBEQAhAREAKBK6gBASuoAJA6MjgBv5wAHr6sASgSqQKAEqkCEBKpASgqkAIQKpACgqkQAoEqqQKCqqkAARoZASoyOAKpORADKyrohJU5EgCQG5gAkBEQAJASqQCQKpABsDKoAbAru6gbmDgAEpA4AQEikAAAOiAAADiIARA4EjkQOCOQEBO5AAFhQAAChoAAUFBQUWlpaWtfX19dERERERExERETMRERVXVVVAA9VVQDMRERV3VVVVVVVVQD9VVVV3wAAVV8AAETMAAAADEREREcAAERPAAAAD0REREdERAAPAABET0RERHdERFVXVVVVdwAAAHdVVVX/AAAA/1VVVXdVVQD/AABV/1VVRP8AAFVfAAAA/0REAA9VVVVXAABEdwAAAHdERAAHVVVVX1VVRP9ERERMAAAAB0RE/////wAA///MzMzMMzMzM///AAAFqqUAaamSAA6oiAAA6qoA+EJI8AB6qkAAVVZIAKREQOSqpOBKrqpAaZZmkGQmmWAA+Z8AEmlkgAaOhgAGmZkADg4OAABOQOAAQkBgACQgYAJUREREREzABA4EAAWgWgBKQAAAAAZgAAAGAAADIqYgDKoAAEJGAAAAZmYAAAAAAA==", 298 "amigaFont": false 299 }, 300 "80x50": { 301 "width": 9, 302 "height": 8, 303 "data": "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NhsN5gP4AAAAAAAP5gN5sNhsNhs94A/4AAAAAAA/4A95sNhsNhsN5gN5sNhsAAA/4A/4AAAANhs94A95sNhsGAw/4A/4AAAANhsNhs/4AAAAAAA/4A/4wGAwAAAAAA/5sNhsNhsNhsP4AAAAGAwH4wH4AAAAAAAH4wH4wGAwAAAAAAP5sNhsNhsNhs/5sNhsGAw/4w/4wGAwGAwGAw+AAAAAAAAAAAH4wGAw////////////AAAAAA//////8Hg8Hg8Hg8HgD4fD4fD4fD4f//////AAAAAAAAAdm4yG4dgAeGYzGwzGMzAA/mMwGAwGAwAAAAA/jYbDYbAA/mMYBgYGM/gAAAAfmw2GwcAAAAAZjMZjMfGAADs3AwGAwGAAfgwPDMZh4GD8ODYxn8xjYOAAODYxmMbDY7gADgwDB8ZjMPAAAAAfm22z8AAABgYfm22z8YGAHhgYD8YBgHgAAD4xmMxmMxgAAH8AH8AH8AAAGAwfgwGAAfgAMAwDAwMAAfgADAwMAwDAAfgADg2GwwGAwGAwGAwGAwGGw2DgAAwAD8AAwAAAADs3AAdm4AAAODYbBwAAAAAAAAAAAwGAAAAAAAAAAwAAAAAADwYDAY7DYPA4bBsNhsNgAAAAeAYGBgfAAAAAAAAPB4PB4AAAAAAAAAAAAAAA", 304 "amigaFont": false 305 }, 306 "armenian": { 307 "width": 9, 308 "height": 16, 309 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABIZn+ZhIAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAPDMw2G222w2GZh4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAw3O/3+22Gw2Gw2GAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAA/22mQwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAw2Gw2Gw2GwzMPAwAAAAAAAAAw2Gw2Gw2223+ZjMAAAAAAAAAw2GZh4GAwPDMw2GAAAAAAAAAw2GwzMPAwGAwGB4AAAAAAAAA/2GhgYGBgYGCw3+AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAMBgGAAAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAODYZDA8DAYDAYHgAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHM/22222222AAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGGw2GwzMPAwAAAAAAAAAAAAAGGw2G222/zMAAAAAAAAAAAAAGGZh4GB4ZmGAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwAAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAAAAdm4AAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAzGYzGYzGY3G4zjsAAAAAAAAAAAAAG22222222zeAAAAAAAAAeGYzGYzGAwH8wGAAAAAAAAAAAAAAHwzGYzGAwH8wGAwAAAAAeGYzGYzGYfwYDAYAAAAAAAAAAAAAD4zGYzGYzD+DAYDAAAAAeGYzGYzGYzwYDAYAAAAAAAAAAAAAHwzGYzGYzGeDAYDAAAAAwGA/mAwGYzGYzDwAAAAAAAAAwGA/GAwGAzGYzD4AAAAAAAAAPDMZjMZh8BgY2H8wwAAAAAAAAAAAGYzGYzGYzD4DAYDwAAAAwGA/mAwGAwHwDAYeAAAAAAAAwGAwH4wGAwGA+AYeAAAAAAAAeGYzGYzGYwGAwH8AAAAAAAAAAAAAHwzGYzGYzGAwGA/gAAAAfGMz2s1ms1ms1mYAAAAAAAAAAAAAH4xme1ms1mYwGAwAAAAADAYf2YzGYzGYzDwAAAAAAAAADAYDD+zGYzGYzD4AAAAAAAAAwGA+GYzGYzGYwGAAAAAAAAAAwGAwHwzGYzGYzGYwGAwAAAAAwGAwGAwGAwGAwH4BgAAAAAAAAAAADAYDAYDAYDAYDAfAAAAAwGA+2222222222cAAAAAAAAAwGAwH222222222ewGAwAAAAAwD8+2YzGYzGYzDwAAAAAAAGAeAYDD+zGYzGYzD4AAAAAAAAAwGAzGYzGYzD4DAYAAAAAAAAAwGAwGYzGYzGYzD4DAYDAAAAAMAwDAwMDAwGAwH4DgAAAAAAAwGAwHwzGYzGYzGYAAAAAAAAAPDMZjMZgMBjY2DcAAAAAAAAAID8DAwMDg2GYzjsAAAAAAAAAeGYzGYzGYzAYDAeAAAAAAAAAAAAAHwzGYzGYzGYDAYDAeAAAzj2cGwzGYzGYzD4AAAAAAAAAGHgYDg2GYzGYzD4AAAAAAAAAz2YzGYzGYzGYzDwAAAAAAAAADwYDGYzGYzGYzD4AAAAAAAAAeGYDBwbAYDGYzDwAAAAAAAAAAAAAAYDAYDAYDAYbG4eAAAAA4DAYDMZjMZjMZh4AAAAAAAAA4DAYDMZjMZjMZh8AAAAAAAAA+AYfGYwGAzGYzDwAAAAAAAAAAAAADwzGYzAYGBgYGAfgAAAAeGYzGYzGYzGYzGYAAAAAAAAAAAAAHwzGYzGYzGYAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAeGYzGYDAYDGwcBgGAAAAAAAAAAAAAwMAwDAwMDAwGAfgAAAAfm2222222Gw2AwGAAAAAAAAAAAAAG22222222z+AwGAwAAAAYHg2GYZhsFg42H8wwAAAAAAAAAAADg2GYzDYOBgYGAfgAAAAeGYzGYzGezGYzGYAAAAAAAAAAAAAHwzGYzGYzGeAAAAAAAAAzGYzGYzGYzGYzDwAAAAAAAAAAAAAGYzGYzGYzD4AAAAAAAAADAYzGYzGYzD4DAeAAAAAAAAADAYDGYzGYzGYzD4DAYDwAAAAeGYzDAMAwDGYzDwAAAAAAAAAAAAAG82222222z2AAAAAAAAAeGYzGYzGYzGAwGAAAAAAAAAAAAAAHwzGYzGYzGYwGAwAAAAAeGYzDwzAYDAYzDwAAAAAAAAAAAAAGYzGYzGYzD4DAYeAAAAAwGA+GYzGYzGMwGAAAAAAAAAAAAAADAYDAYDAYD4AAAAAAAAAGAwfm22222z8GAwAAAAAAAAAGAwGG82222222z2GAwGAAAAAPDMZjMfDAYH8YDAAAAAAAAAAAAAAD4ZjMZjMZj4YH8YAAAAAeGYzGYzGYzGYzDwAAAAAAAAAAAAADwzGYzGYzDwAAAAAAAAAeGw2D8Gw22222z8AAAAAAAAAeGw2D8Gw22222z8GAwGAAAAAOCIlAQAAAAAAAAAAAAAAAAAYGBgYAAAAAAAAAAAAAAAAAAAAAAAfD4fD4fD4fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 310 "amigaFont": false 311 }, 312 "baltic": { 313 "width": 9, 314 "height": 16, 315 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAADAwAB4ZmEwGAwGEZh4AAAAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAAfgAADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAAAAHBgGDszGYzGIzD4DGYeAAABwbBwADwDD4zGYzDsAAAAAAAAYGBgAD4xmAwGAxj4AAAAAAAAAOA0Hg4GBweCwGB4AAAAAAAAAfgAAD4xn8wGAxj4AAAAAAAAA/DMZjMfDYZjMZnMDAMPAAAAAAAAAG4djMYDAYHgGAYeAAAAAfAAABwGAwGAwGB4AAAAAAGBgAH8hgYGBgYGExn8AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxmM/mMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAAfgAAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAAAAPDMwmAwG8xmMZh0DAMPAAAAAGAwfGMwGAxj4GAwAAAAAAGBgAD4xmMYBwDGMxj4AAAAAAAAADAwAD4xjAOAYxj4AAAAAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAAAAAAD4zm89nMxj4AAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAIfGczms1ms1nM5j4QAAAAAAAAAAAAGMbBwODYxgAAAAAAAAAAAAAxj4xmMxmMfGMAAAAAAfgAEBwbGMxn8xmMxmMAAAAAAfgAPAwGAwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAGAwAH8hgYGBgYGExn8AAAAAAAAAGAwAH8zAwMDAxn8AAAAAAAAYGBgAH8zAwMDAxn8AAAAAAABsbGwAAAAAAAAAAAAAAAAAAAAwGAwGAwAAAGAwGAwGAAAAAAAAfEEmlEolEmkEfAAAAAAAAAAAfEEslUslUqkEfAAAAAAAAAAAAAAAAAAD8AgEAAAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAA8DIbDwcHA4DEZn8AAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwAAAEBwbGMxn8xmMxmMGBgHgAZh4AB4ZmEwGAwGEZh4AAAAAAAAA/jMYjQeDQYDEZn8GBgHgAGAw/jMYjQeDQYDEZn8AAAAAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAAAAPAwGAwGAwGAwGB4GBgHgAbBwAD4xmAYBwDAMxj4AAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwAAAxmMxmMxmMxmMxj4MDAPAAfgAxmMxmMxmMxmMxj4AAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsbBwAH8xkYGBgYGExn8AAAAAAAAAAAAADwDD4zGYzDsGBgHgAAAAbBwAD4xmAwGAxj4AAAAAAAAAAAAAD4xn8wGAxj4MDAPAAAAAGAwAD4xn8wGAxj4AAAAAAAAAGAwABwGAwGAwGB4GBgHgAAAAbBwAD4xjAOAYxj4AAAAAAAAAAAAAGYzGYzGYzDsMDAPAAAAAfAAAGYzGYzGYzDsAAAAAAAAAbBwAH8zAwMDAxn8AAAAAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAGBgAD4xmMxmMxmMxj4AAAAAAAAAeGYzGY2GYxmMxmYAAAAAAfgAAD4xmMxmMxmMxj4AAAAAADAwAGM5ns/m8zmMxmMAAAAAAAAAdm4AD4xmMxmMxj4AAAAAAdm4AD4xmMxmMxmMxj4AAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAYGBgAG4ZjMZjMZjMAAAAAAAAA5jMZjYeDwbDMZnMGAYeAAAAA4DAYDMbDweDYZnMGAYeAAAAA8DAYDAYDAYDEZn8GAYeAAAAAOAwGAwGAwGAwGB4GAYeAAAAAAAAAG4ZjMZjMZjMDAMPAAfgA/jMYjQeDQYDEZn8AAAAAAAAAAGM5ns/m8zmMxmMGAYeAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAABsbGwAAAAAAAAAAAAAAAAAAAHAMDENnYGBgZmcmh+BgMAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAAAAAAAAAA2DYNgAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAwOAwGAwPAAAAAAAAAAAAAAAD4Bh4BgMfAAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 316 "amigaFont": false 317 }, 318 "cyrillic": { 319 "width": 9, 320 "height": 16, 321 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAfGMxmc1nMxmMxj4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAYDA+DAYD4ZjMZnMBgICAAAAA/DAYDAbDsZjMZnYAAAAAAAAADAwAH8YjAYDAYHgAAAAAADAwAH8ZjEYDAYDAYHgAAAAAAAAAADYAD4xmM/GAxj4AAAAAAbAA/jMYjQeDQYDEZn8AAAAAAAAAAAAAD4xmA+GAxj4AAAAAAAAAfGMwGQ+GQwGAxj4AAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAADYABwGAwGAwGB4AAAAAAZgAPAwGAwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAAHgYDAYDAYzGYzDwAAAAAAAAAAAAAH4WC4Wi0Wm4AAAAAAAAA/CwWCwXC0Wi0Wm4AAAAAAAAAAAAAGw2H42m02m4AAAAAAAAA2Gw2Gw/G02m02m4AAAAAAAAAYHwYDAfDMZjMZnMAAAAAAAAA/DAYDAfDMZjMZnMAAAAAAAAADAwAHMbDweDYZnMAAAAAADAwAHMZjYeDwbDYZnMAAAAAAAAAADYOGMxmMxmMfgMBmMfAAbBwxmMxmMxj8BgMxj4AAAAAAAAAAAAAHcbDYbDYbH8EAAAAAAAA7jYbDYbDYbDYbH8EAAAAAAAAAAAAGc222+2222cAAAAAAAAAzm2222+2222222cAAAAAAAAAAAAAHwsFgPhmMz8AAAAAAAAA+HgsBgPhmMxmMz8AAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAAHhsZmMxn8xmMxmMAAAAAAAAEBj4wGA/GMxmMxj4AAAAAAAAA/jEYjAfDMZjMZn4AAAAAAAAAAAAAGMxmMxmMxn+AwGAAAAAAxmMxmMxmMxmMxn+AwGAAAAAAAAAAA8NjMZjMZn+w2GAAAAAAHhsZjMZjMZjMZn+w0CAAAAAAAAAAD4xmM/mAxj4AAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAAAB4GD82222222z8GAwPAAAAAfm22222222z8GB4AAAAAAAAAAAAAH8YjEYDAYHgAAAAAAAAA/jMYjAYDAYDAYHgAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAARAiRAiRAiRAiRAiRAiRAiRAiqiqqiqqiqqiqqiqqiqqiqqiqd26d26d26d26d26d26d26d26GAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAw+AwGAwGAwGAwAAAAAAAGMbBwOBwbGMAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAAAAAGMxmc1nMxmMAAAAAAAAAxmMxmc3ns5mMxmMAAAAAANhsNhsNhs9gM9hsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAAA/gM9hsNhsNhsNhsNhsNhsNhs9gM/gAAAAAAAAAAAAAADYOGMxmc1nMxmMAAAAAAbBwxmMxmc3ns5mMxmMAAAAAAAAAAAAAAAAAA+AwGAwGAwGAwGAwGAwGAwGAwH4AAAAAAAAAAGAwGAwGAwGAw/4AAAAAAAAAAAAAAAAAAAAAA/4wGAwGAwGAwGAwGAwGAwGAwH4wGAwGAwGAwAAAAAAAAAAAA/4AAAAAAAAAAGAwGAwGAwGAw/4wGAwGAwGAwAAAAAAAHMbDweDYZnMAAAAAAAAA5jMbDYeDwbDYZnMAAAAAANhsNhsNhsN5gP4AAAAAAAAAAAAAAAAAAAP5gN5sNhsNhsNhsNhsNhsNhs94A/4AAAAAAAAAAAAAAAAAAA/4A95sNhsNhsNhsNhsNhsNhsN5gN5sNhsNhsNhsAAAAAAAAA/4A/4AAAAAAAAAANhsNhsNhs94A95sNhsNhsNhsAAAAGMfGMxmMxmMfGMAAAAAAAAAAAAAA8NjMZjMZnMAAAAAAAAAHhsZjMZjMZjMZmMAAAAAAAAAAAAAGM7n8/ms1mMAAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAAAAAGMxmM/mMxmMAAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAAAAAAH8xmMxmMxmMAAAAAAGAwGAwGAwGAw+AAAAAAAAAAAAAAAAAAAAAAAH4wGAwGAwGAw////////////////////////AAAAAAAAAAAA////////////AAA/mMxmMxmMxmMxmMAAAAAAAAAAAAAD8xmMfhsZmMAAAAAA////////////AAAAAAAAAAAAAAAPzMZjMPh8ZjMZnOAAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAA/DMZjMZj4YDAYHgAAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAfGMxmAwGAwGExj4AAAAAAAAAAAAAD8WgwGAwGB4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAAAAAGMxmMxmMfgMBmMfAAAAAxmMxmMxj8BgMxj4AAAAAAAAAAAAAGs1iofCo1msAAAAAAAAA222Wi0fj8Wm2222AAAAAAAAAAAAAH4ZjMfDMZn4AAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAAAAAHgYDAfDMZn4AAAAAAAAA8DAYDAfDMZjMZn4AAAAAAAAAz2a73Y/243GYzGYAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAGMxmM9m83nsAAAAAAAAAw2Gw2G82222223mAAAAAAAAAAAAAD4xgMPAMxj4AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAAAAAAGs1ms1ms1n8AAAAAAAAA1ms1ms1ms1ms1n8AAAAAAAAAAAAAD4xgMPgMxj4AAAAAAAAAfGMBhMPhMBgMxj4AAAAAAAAAAAAAGs1ms1ms1n8AwGAAAAAA1ms1ms1ms1ms1n8BgMAAAAAAAAAAGMxmMxj8BgMAAAAAAAAAxmMxmMxj8BgMBgMAAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAfD4fD4fD4fD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 322 "amigaFont": false 323 }, 324 "french_canadian": { 325 "width": 9, 326 "height": 16, 327 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAODYxggODYxmM/mMxmMAAAAAAADAMAwADwDD4zGYzDsAAAAAAAAAAD+2222z2Gw2Gw2AAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAAAAAAAAAAAAAAAAAAA/wA/wAGAYBggODYxmM/mMxmMAAAAAAAD4xjAODYxmMbBwDGMfAAAAADAwAH8ZjEaDwaDEZn8AAAAAAMAwAH8ZjEaDwaDEZn8AAAAAAODYAH8ZjEaDwaDEZn8AAAAAAAAgODYAD4xmMxmMxj4AAAAAAAGMAH8ZjEaDwaDEZn8AAAAAAADMAB4GAwGAwGAwGB4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAAAAAxj4xmMxmMfGMAAAAAAODYAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAwGD4xmAwGAxj4GAwAAAAAAABwbDIYHgYDAYDA5n4AAAAAAMAwAGMxmMxmMxmMxj4AAAAAAODYAGMxmMxmMxmMxj4AAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwGAwGAwAAAGAwGAwGAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwDDwAAAAD4Bh4BgMfAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAPDMAB4GAwGAwGAwGB4AAAAAAAAAAAAAAA/mAwGAwAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAHAMHENnYGBgZmcmh+BgMAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 328 "amigaFont": false 329 }, 330 "greek": { 331 "width": 9, 332 "height": 16, 333 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAA/jEYDAYDAYDAYHgAAAAAAAAAEBwbGMxmMxmMxn8AAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAfGMxmM/mMxmMxj4AAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAAEBwbGMxmMxmMxmMAAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAA/kEAAAfAAAAAgn8AAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/mMxmMxmMxmMxmMAAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAA/mAYBgGAwMDAwH8AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAAPAwfkymUyfgwGB4AAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAGG2222222fgwGB4AAAAAAAAAPDMw2Gw2GwzMJHOAAAAAAAAAAAAAD2zmYzGYzD2AAAAAAAAAfGMxmMxn4xmMxn4wGAwAAAAAAAAAGGZh4GB4ZiEZh4AAAAAAfDAMAweGYzGYzDwAAAAAAAAAAAAAD4xmAeGAxj4AAAAAAAAA/AYGBgYGAwGAwDwDAYeAAAAAAAAAG4ZjMZjMZjMBgMBgAAAAPjGYzGfzGYzGYx8AAAAAAAAAAAAAAwGAwGAwGgYAAAAAAAAAAAAAHMbDweDYZnMAAAAAAAAAPDMBgMBh8ZjMZjMAAAAAAAAAAAAADMZjMZjMZj+YDAYAAAAAAAAAHMZjMZjYeBgAAAAAAAAA/DAwDwMDAwGAwD4BgMPAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAH+ZjMZjMZjMAAAAAAAAAAAAAB4ZjMZjMZj4YDAYAAAAAAAAAD+zGYzGYzDwAAAAAAAAAAAAAD4xmAYB4BmMfAAAAAAAAAAAAH4MBgMBgNAwAAAAAAAAAAAAAHOZjMZjMZh4AAAAAAAAAAAAAC41ms1ms1j4EAgEAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGs1ms1ms1j4EAgEAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADMw2Gw22/zMAAAAAAAAAOAgAD2zmYzGYzD2AAAAAAAAAOAgAD4xmAeGAxj4AAAAAAAAAOAgAG4ZjMZjMZjMBgMBgAAAAZgAAAwGAwGAwGgYAAAAAAAAAOAgAAwGAwGAwGgYAAAAAAAAAOAgAD4xmMxmMxj4AAAAAAAAAOAgAHOZjMZjMZh4AAAAAAAAAZgAAHOZjMZjMZh4AAAAAAAAAOAgADMw2Gw22/zMAAAAAAQEAEBwbGMxn8xmMxmMAAAAAAQEA/jMYjQeDQYDEZn8AAAAAAQEAxmMxmM/mMxmMxmMAAAAAAQEAPAwGAwGAwGAwGB4AAAAAAQEAfGMxmMxmMxmMxj4AAAAAAQEAZjMZjMPAwGAwGB4AAAAAAQEAPDMw2Gw2GwzMJHOAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAZgAPAwGAwGAwGAwGB4AAAAAAZgAZjMZjMPAwGAwGB4AAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 334 "amigaFont": false 335 }, 336 "greek_869": { 337 "width": 9, 338 "height": 16, 339 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABASA4NjGYz+YzGYzGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAAAAAAAAAAH8BgMAAAAAAAAAAAwGAwGAwGAAAAwGAwGAwGAAAAAGAwEAQAAAAAAAAAAAAAAAAAAGAwCAgAAAAAAAAAAAAAAAACAvxgMBgPhgMBgMB+AAAAAAAAAAAAAAAAH+AAAAAAAAAAAAACAsxmMxmPxmMxmMxmAAAAAAABAXgYDAYDAYDAYDA8AAAAAAZgAfgwGAwGAwGAwGD8AAAAAAACAvjGYzGYzGYzGYx8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAsxmMxmHgYDAYDAYAAAAAAZgAZjMZjMPAwGAwGAwAAAAAAAAAPCEmVKoVKmSEPAAAAAAAAACAuDYxmMxmMxjYKHcAAAAAAABwbAYGBgfAAAAAAAAAAAAAAAD4DBgDAYeAAAAAAAAAAAAAAAAACAgADszGYzGYzDsAAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAACAgAD4xmAeGAxj4AAAAAAAAACAgAG4ZjMZjMZjMBgAAAAAAACAgABgMBgMBgMA4AAAAAAAAAAGYABgMBgMBgMA4AAAAAACAgAGYABgMBgMBgMA4AAAAAAAAACAgAD4xmMxmMxj4AAAAAAAAABAQAHMZjMZjMZh4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAA/mAwGAwGAwGAwGAAAAAAAAAAEBwbDYxmMxmMxn8AAAAAAAAA/mAwGA/GAwGAwH8AAAAAAAAA/gMBgYGBgYGAwH8AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAADA4DEZjYGBgYG4hgYGB8AAAAAAfGMxmMxn8xmMxj4AAAAAAAAAfgwGAwGAwGAwGD8AAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwAAAxmY2Hg4Hg2GYxmMAAAAAAAAAEBwbDYxmMxmMxmMAAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAAAA/mMAAAfD4AAAxn8AAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwAAA/7MZjMZjMZjMZjMAAAAAAAAA/GMxmM/GAwGAwGAAAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsAAA/mAYBgGAwMDAwH8AAAAAAAAAfgwGAwGAwGAwGAwAAAAAAAAAZjMZjMPAwGAwGAwAAAAAAAAAED41ms1msfAgEBwAAAAAAAAAxmMbDYOBwbDYxmMAAAAAAAAAEGs1ms1msfAgEBwAAAAAAAAAODYxmMxmMxjYKHcAAAAAAAAAAAAADszGYzGYzDsAAAAAAAAAeGYzGY2H4xmMxn4wEAAAAAAAAAAAEExjYOD4xmMxmMfAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////AAAfjAMAwfGMxmMxj4AAAAAAAAAAAAAD4xmAeGAxj4AAAAAA//////////4AAAAAAAAAAAAAAAAfgMDAwMDAYDAYB8Bh4AAAAAAAAAAG4ZjMZjMZjMBgAAAAAAAfGMxjMNh8hmMxj4AAAAAAAAAAAAABgMBgMBgMA4AAAAAAAAAAAAAGMzGw8GwzGMAAAAAAAAAfGMBgMPjMZmMxmMAAAAAAAAAAAAAGMxmMxmM5m6wGAwAAAAAAAAAEExmMxjYbBwAAAAAAAAAfgwMBgHBgYDAYB8Bh4AAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAH+ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmM5m4wGAwAAAAAAAAAD82GYzGYzDwAAAAAAAAAAAAAD4xmAwD4BgMPAAAAAAAAAAAAH4MBgMBgNg4AAAAAAAAYGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAAAAAHMZjMZjMZh4AAAAAAAAAAAAAA4Vms1ms1j4EAgEAAAAAAAAAGEbBwOBwbEMAAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAg1ms1ms1j4EAgEAABAQADMAAAAAAAAAAAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAACIxmM1ms1jYAAAAAAAAAADMAHMZjMZjMZh4AAAAAABAQADMAHMZjMZjMZh4AAAAAAAAACAgACIxmM1ms1jYAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 340 "amigaFont": false 341 }, 342 "hebrew": { 343 "width": 9, 344 "height": 16, 345 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZm4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAAAAxmMZjs3GYxmMAAAAAAAAAAAA+AYDAYDAYDH8AAAAAAAAAAAAOAYDAYDA4NnMAAAAAAAAAAAA/gYDAYDAYDAYAAAAAAAAAAAA/AMBgMxmMxmMAAAAAAAAAAAAcAwGAwGAwGAwAAAAAAAAAAAA/BgMBgGAwMDAAAAAAAAAAAAA/DMxmMxmMxmMAAAAAAAAAAAAzGs1mMxmMxj4AAAAAAAAAAAAcAwGAwMAAAAAAAAAAAAAAAAA/AMBgMDAYDAYDAYDgAAAAAAA/AMBgMBgMBn4AAAAAAAAAwGA/AMBgMBgYGAwAAAAAAAAAAAA/DMxmMxmMxn8AAAAAAAAAAAA3DsZmMxmMxm8AAAAAAAAAAAAOAYDAwGAwGAwGAwHAAAAAAAAOAYDAYDAYDD4AAAAAAAAAAAA/DMxmMxmMzDwAAAAAAAAAAAA7jMZjMZjMLHwAAAAAAAAAAAA+CYzGY7AYDAYDAYDgAAAAAAA/CMxmM5gMBn8AAAAAAAAAAAA7jMZjYeDAYDAYDAcAAAAAAAA7jMZhoGAYBn8AAAAAAAAAAAA/AMBjMZDYbjAYDAYAAAAAAAA/AMBgMBgMBgMAAAAAAAAAAAA1ms1ms1nsxj4AAAAAAAAAAAA/DMZjMZjM5nMAAAAAAAAwGD4xmAwGAxj4GAwAAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAAZjMPAwfgwfgwGAwAAAAAAAHwzGY+GIzG8zGYzGMAAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAAAAAAA/mAwGAwAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 346 "amigaFont": false 347 }, 348 "icelandic": { 349 "width": 9, 350 "height": 16, 351 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcHhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwGD8PAwAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAAAH8/n8AAAAAAAAAGB4fgwGAwGD8PAwfgAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAGAwGAwH8AAAAAAAAAAAAAAAABIZn+ZhIAAAAAAAAAAAAAAgEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAAAwGD4xmEwD4BkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAAAwGAwMAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGH+GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAABgMDAYGAwMBgYDAAAAAAAAAAfGMxms1ms1mMxj4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAAA/gAAH8AAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgMDAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAADwMBgMBgMBmMxj4AAAAAAAAA5jMbDYeD4bDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAODYxmMxmMxmMbBwAAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmMxms1n8bDYAAAAAAAAAxmMbDYOBwbDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAYDAMBgGAwDAYBgMAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZm4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAODYZDA8DAYDAYHgAAAAAAAAAAAAADszGYzGYfAYDGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1msxmMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMfDAYDA8AAAAAAAAADszGYzGYfAYDAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAADMZjMZjMPAwAAAAAAAAAAAAAGMxmM1ms/jYAAAAAAAAAAAAAGMxjYODYxmMAAAAAAAAAAAAAGMxmMxmMfgMBgYeAAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcDgGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgcGAwGDgAAAAAAAAAdm4AAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GAYOAAAAAzGYAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzGYADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GAYOAAAAgODYAD4xn8wGAxj4AAAAAAAAAzGYAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAA+DYZjM9jMZjMbHwAAAAAAAAAbBg2AYfmMxmMxj4AAAAAAAAA8DAfDMZjMZj4YHgAAAAAAxmMEBwbGMxn8xmMxmMAAAAAAODYOAAODYxmM/mMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNjs3mw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxmMAD4xmMxmMxj4AAAAAAAAA4DAYD4ZjMZjMfDAYDA8AAABgeGYAGYzGYzGYzDsAAAAAADAwADMZjMZh4GAwGB4AAAAAAAAYGBgAGMxmMxmMfgMBgYeAAxmMODYxmMxmMxmMbBwAAAAAAxmMAGMxmMxmMxmMxj4AAAAAAAAAAAABj4zm81nM5j4wAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAMPDYzmc1ms5nMbDwwAAAAAAHwzGY+GIzG8zGYzGMAAAAAAAAcGwwGAwfgwGAwGAw2DgAAAAAYGBgADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAYGBgAD4xmMxmMxj4AAAAAAAAYGBgAGYzGYzGYzDsAAAAAADAwABwbGMxn8xmMxmMAAAAAADAwAB4GAwGAwGAwGB4AAAAAADAwABwbGMxmMxmMbBwAAAAAADAwAGMxmMxmMxmMxj4AAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAAAAAAA/mAwGAAAAAAAAAAAAAAAAAAA/gMBgMAAAAAAAAAAGAwGExmYGBgYG4pgYGB8AAAAGAwGExmYGBgZmcnh8BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABmZmYZhmAAAAAAAAAAAAAAAAGYZhmZmYAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxm4AAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAADs3AwGAwGAwAAAAAAAAAPAwPDMZjMZh4GB4AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxmMxjYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAfGMxmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAw2Gw2DgAAAAAAAAAAAAGAwAD8AAwGAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAAGwbDYbDYbAAAAAAAAAAAAAAADg2BgYGQ+AAAAAAAAAAAAAAAAAAAAfD4fD4fD4fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 352 "amigaFont": false 353 }, 354 "latin1": { 355 "width": 9, 356 "height": 16, 357 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAADAMAwABwGAwGAwGB4AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxmM/mMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAAxgAAGMxmMxmMxj8BgYeAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAAAAAAD4zm89nMxj4AAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAIfGczms1ms1nM5j4QAAAAAAAAAAAAGMbBwODYxgAAAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAfEEslUslUqkEfAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwYGAEBwbGMxn8xmMxmMAAAAAAfGMEBwbGMxn8xmMxmMAAAAAADAMEBwbGMxn8xmMxmMAAAAAAAAAfEEmlEolEmkEfAAAAAAAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAAAAGAwfGMwGAxj4GAwAAAAAAAAAADMZh4GD8GD8GAwAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwAAAdm4ADwDD4zGYzDsAAAAAAdm4ABwbGMxn8xmMxmMAAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsAAAAAAxj4xmMxmMfGMAAAAAAAAANAwLAMPjMZjMZh4AAAAAAAAA+DYZjM9jMZjMbHwAAAAAAODYAH8ZjEaDwaDEZn8AAAAAAAGMAH8ZjEaDwaDEZn8AAAAAAMAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAABwGAwGAwGB4AAAAAADAwAB4GAwGAwGAwGB4AAAAAAPDMAB4GAwGAwGAwGB4AAAAAAADMAB4GAwGAwGAwGB4AAAAAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////AAwGAwGAwAAAGAwGAwGAAAAAMAwAB4GAwGAwGAwGB4AAAAAA//////////4AAAAAAAAAAAAAGBgAD4xmMxmMxmMxj4AAAAAAAAAeGYzGY2GYxmMxmYAAAAAAODYAD4xmMxmMxmMxj4AAAAAAMAwAD4xmMxmMxmMxj4AAAAAAAAAdm4AD4xmMxmMxj4AAAAAAdm4AD4xmMxmMxmMxj4AAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAA4DAYD4ZjMZjMZj4YDA8AAAAA8DAfDMZjMZj4YHgAAAAAAGBgAGMxmMxmMxmMxj4AAAAAAODYAGMxmMxmMxmMxj4AAAAAAMAwAGMxmMxmMxmMxj4AAAAAAAAYGBgAGMxmMxmMxj8BgY+AADAwADMZjMZh4GAwGB4AAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAAAAAAAAAAAAAAAA/wA/wAAHAMDENnYGBgZmcmh+BgMAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAAAAAAAAAAAAwDDwAAAABwbDYOAAAAAAAAAAAAAAAAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAwOAwGAwPAAAAAAAAAAAAAAAD4Bh4BgMfAAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 358 "amigaFont": false 359 }, 360 "latin2": { 361 "width": 9, 362 "height": 16, 363 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPhsPhgMBgMDg8HAAAAAAAAAAfjMfjMZjMZjc7nYwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH4YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAAGMxmMRAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgYGBgMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnsAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAMBgGAAAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGYzGYzGYeBgAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwAAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAAAAdm4AAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4DAMfAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADwzDwAGYzGYzGYzDsAAAAAAAAYGBgAD4xmAwGAxj4AAAAAAAAAAAAAD4xmAwGAxj4GAYeAAAAAOA0Hg4GBweCwGB4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAANjYAD4xmMxmMxmMxj4AAAAAAAAANjYAD4xmMxmMxj4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAGBgAH8hgYGBgYGExn8AAAAAAAGMEBwbGMxn8xmMxmMAAAAAADAwAB4ZmEwGAwGEZh4AAAAAAGBgYAA/jMYDwYDEZn8AAAAAAMDAAHgYDAYDAYDEZn8AAAAAAMDAAHAYDAYDAYDAYHgAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAAAA9jEZDAYDAYDEZn8AAAAAAAAA7DIaDAYDAYDAYHgAAAAAAGBgAD4xmMYBwDGMxj4AAAAAAAAADAwAD4xjAOAYxj4AAAAAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAZh4AD8fi0GAwGAwGB4AAAAAAAAMEhoMH4MBgMBgNg4AAAAAAAAA8DIbDwcHA4DEZn8AAAAAAAAAAAAAAAxjYODYxgAAAAAAAAAAbBwAD4xmAwGAxj4AAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAEBwbGMxn8xmMxmMGBgHgAAAAAAAADwDD4zGYzDsGBgHgAbBwAH8xkYGBgYGExn8AAAAAAAAAbBwAH8zAwMDAxn8AAAAAAAAA/jMYjQeDQYDEZn8GBgHgAAAAAAAAD4xn8wGAxj4MDAPAAAAAAAAAAA/gMBgMBgAAAAAAAAAYGBgAH8zAwMDAxn8AAAAAAZh4AB4ZmEwGAwGEZh4AAAAAAAAAAAAAD4xjAOAYxj4GAYeAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAADYNg2NjYAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGBgAAgODYxmM/mMxmMAAAAAAODYAAgODYxmM/mMxmMAAAAAAbBwAH8ZjEaDwaDEZn8AAAAAAAAAfGMxjAOAYBmMxj4GAYeAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAGAwAH8hgYGBgYGExn8AAAAAAAAAGAwAH8zAwMDAxn8AAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwxj4AAgODYxmM/mMxmMAAAAAAAAAxj4ADwDD4zGYzDsAAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsAAAAAAAGMfGMxmMfGMAAAAAAAAADAYfgYPDYzGYzDsAAAAAAAAA+DYZjM9jMZjMbHwAAAAAAbBwAHwbDMZjMZjMbHwAAAAAAbAAAH8ZjEaDwaDEZn8AAAAAAAAAHYbDZ4bGYzGYzDsAAAAAAbBwAGM5ns/m8zmMxmMAAAAAADAwAB4GAwGAwGAwGB4AAAAAAPDMAB4GAwGAwGAwGB4AAAAAAAAAZh4AD4xn8wGAxj4AAAAAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////AAAfj8WgwGAwGAwGB4GAYeAAODYOAAxmMxmMxmMxj4AAAAAA//////////4AAAAAAAAAAAAADAwAD4xmMxmMxmMxj4AAAAAAAAAeGYzGY2GYxmMxmYAAAAAAODYAD4xmMxmMxmMxj4AAAAAADAwAGM5ns/m8zmMxmMAAAAAAAAYGBgAG4ZjMZjMZjMAAAAAAAAAbBwAG4ZjMZjMZjMAAAAAAbBwAD4xmAYBwDAMxj4AAAAAAAAAbBwAD4xjAOAYxj4AAAAAAGBgAH4ZjMZj4bDMZnsAAAAAAGBgAGMxmMxmMxmMxj4AAAAAAAAYGBgAG4djMYDAYHgAAAAAANjYAGMxmMxmMxmMxj4AAAAAAAAYGBgAGMxmMxmMxj8BgY+AADAwADMZjMZh4GAwGB4AAAAAAAAAEBgMH4MBgMBgNg4GAYeAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAABsbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAPAAADYOAAAAAAAAAAAAAAAAAAAAAGMfAAAAAAAAAAAAAAAAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAGAwAD8AAwGAAAAAAAAAAAAAAAAAAAAAAAAAAGAYeAAABwbDYOAAAAAAAAAAAAAAAAAADYbAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAANjYAGYzGYzGYzDsAAAAAAbBwAH4ZjMZj4bDMZnsAAAAAAAAAbBwAG4djMYDAYHgAAAAAAAAAAAAfD4fD4fD4fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 364 "amigaFont": false 365 }, 366 "nordic": { 367 "width": 9, 368 "height": 16, 369 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAADAMAwABwGAwGAwGB4AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxmM/mMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAHYNhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAAxgAAGMxmMxmMxj8BgYeAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAAAAAAD4xmc1nMxj4AAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAIfGczms1ms1nM5j4QAAAAAAHwzGY+GIzG8zGYzGMAAAAAAAAcGwwGAwfgwGAw2DgAAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAAAAAAAAAA/mAwGAwAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAxj4xmMxmMfGMAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 370 "amigaFont": false 371 }, 372 "persian": { 373 "width": 9, 374 "height": 16, 375 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABIZn+ZhIAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAPDMw2G222w2GZh4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAw3O/3+22Gw2Gw2GAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAA/22mQwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAw2Gw2Gw2GwzMPAwAAAAAAAAAw2Gw2Gw2223+ZjMAAAAAAAAAw2GZh4GAwPDMw2GAAAAAAAAAw2GwzMPAwGAwGB4AAAAAAAAA/2GhgYGBgYGCw3+AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAMBgGAAAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAODYZDA8DAYDAYHgAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHM/22222222AAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGGw2GwzMPAwAAAAAAAAAAAAAGGw2G222/zMAAAAAAAAAAAAAGGZh4GB4ZmGAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwAAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAAAAAAAAAAAAAAAQEAgCAOAAAAAAAAAAAACAgDwAAAAAAAAAAAAAAAAAAAAAAAAgOAgAAAAAAAAAAAgEAgEAQCAQBAIBAIAAAAAAAAEQj4QBAIBAEAgEAgAAAAAAACSSTsQBAIBAEAgEAgAAAAAAAAMCAgEAYCAgIBAIA8AAAAAAAAAEAQFBIIiEQUCkTcAAAAAAACEPgEAgIBAIBAEAgEAAAAAAACEQiEQhEJBIFAwGAgAAAAAAAAQGAwFBIJBEQiEQiEAAAAAAAAwJCIRB4BAIBAEAgEAAAAAAAAAAAADAwGAwAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAB4QiAQBAEAYDAAAAYDAAAAAAACPiACAQCAQCAQCAAAAAAAAAAAAAMCAcEACAX8AAAAAAAAAAAAAAAAAQEAgDAgBAQAAAAAAAACAQCAQCAQCAQCAAAAAAAAAAAIBAIBAIBAIBAGAAAAAAAAAAAAAAAAAAACCgT8AAAEAAAAAAAAAAAAAAAACAX8AAAEAAAAAAAAAAAAAAACCgT8AAAFAQAAAAAAAAAAAAAACAX8AAAKAgAAAAAAAAAFAAACCgT8AAAAAAAAAAAAAAAFAAAACAX8AAAAAAAAAAAAAAQFAAACCgT8AAAAAAAAAAAAAAQFAAAACAX8AAAAAAAAAAAAAAAAAwJAEHxAQCARCAIQ8AAAAAAAAAGBIAn+AAACAAAAAAAAAAAAAwJAEHxAQCURCAIQ8AAAAAAAAAGBIAn+AAAKAgAAAAAAAAAAAwJAEHxAQCAQCAIQ8AAAAAAAAAGBIAn+AAAAAAAAAAAAEAAAAwJAEHxAQCAQCAIQ8AAAAAgAAAGBIAn+AAAAAAAAAAAAAAAAAIAgCIQ8AAAAAAAAAAAACAAAAIAgCIQ8AAAAAAAAAAAAAAAAAAAAEAQCAQEBBwAAAAAAAAAAgAAAEAQCAQEBBwAAAAAAAAICgAAAEAQCAQEBBwAAAAAAAAAAAAABKFQ+EAgIGAAAAAAAAAAAAAAACJX8AAAAAAAAAAAAAAICgAABKFQ+EAgIGAAAAAAAAAQFAAAACJX8AAAAAAAAAAAAAAAAAAAgKKQ8EAgIGAAAAAAAAAAAAABhSMX8AAAAAAAAAAAAAAIAAAAgKKQ8EAgIGAAAAAAABAAAAABhSMX8AAAAAAAAAABAIBAIBAJhSMX8AAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVUAAAAQCAgEBEISBQEAAAAAAAAGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAw+AwGAwGAwGAwGAwGAwGAw+Aw+AwGAwGAwGAwNhsNhsNhsNhs9hsNhsNhsNhsAAAAAAAAAAAA/hsNhsNhsNhsAAAAAAAAA+Aw+AwGAwGAwGAwNhsNhsNhs9gM9hsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAAA/gM9hsNhsNhsNhsNhsNhsNhs9gM/gAAAAAAAAAANhsNhsNhsNhs/gAAAAAAAAAAGAwGAwGAw+Aw+AAAAAAAAAAAAAAAAAAAAAAA+AwGAwGAwGAwGAwGAwGAwGAwH4AAAAAAAAAAGAwGAwGAwGAw/4AAAAAAAAAAAAAAAAAAAAAA/4wGAwGAwGAwGAwGAwGAwGAwH4wGAwGAwGAwAAAAAAAAAAAA/4AAAAAAAAAAGAwGAwGAwGAw/4wGAwGAwGAwGAwGAwGAwH4wH4wGAwGAwGAwNhsNhsNhsNhsN5sNhsNhsNhsNhsNhsNhsN5gP4AAAAAAAAAAAAAAAAAAAP5gN5sNhsNhsNhsNhsNhsNhs94A/4AAAAAAAAAAAAAAAAAAA/4A95sNhsNhsNhsNhsNhsNhsN5gN5sNhsNhsNhsAAAAAAAAA/4A/4AAAAAAAAAANhsNhsNhs94A95sNhsNhsNhsGAwGAwGAw/4A/4AAAAAAAAAANhsNhsNhsNhs/4AAAAAAAAAAAAAAAAAAA/4A/4wGAwGAwGAwAAAAAAAAAAAA/5sNhsNhsNhsNhsNhsNhsNhsP4AAAAAAAAAAGAwGAwGAwH4wH4AAAAAAAAAAAAAAAAAAAH4wH4wGAwGAwGAwAAAAAAAAAAAAP5sNhsNhsNhsNhsNhsNhsNhs/5sNhsNhsNhsGAwGAwGAw/4w/4wGAwGAwGAwGAwGAwGAwGAw+AAAAAAAAAAAAAAAAAAAAAAAH4wGAwGAwGAw////////////////////////AAAAAAAAAAAA////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f////////////AAAAAAAAAAAAABAIBIIBAJhSMX8AAAAAAAAAAAAAAADAgEAQHhAQCAQCAIQ8AAAAAAAAcHgYExAQCAQCAIQ8AAAAAAAAAHB4GHOAAAAAAAAAAAAAAAAAYEggCH+AAAAAAAAAAAACAADAgEAQHhAQCAQCAIQ8AAABAAAAcHgYExAQCAQCAIQ8AAAAAQAAAHB4GHOAAAAAAAAAAAACAAAAYEggCH+AAAAAAAAAAAAAgAAAEBSOgT8AAAAAAAAAAAAAgAAAEBQOAX8AAAAAAAAAAAAAAUAAAAgKJSGQSCQREHAAAAACgAAAEBQOAX8AAAAAAAAAAACAQCCQiCQigT8AAAAAAAAAAQEBAQEAgDgCAX8AAAAAAAAABQUFAQEAwBgCgT8AAAAAAAAABQUFAQEAgDgCAX8AAAAAAAAAAACAQCAQCAQCISCQSCQR8AAAAACIRCEQiCQSBg+AAAAAAAAAAACAQCAQCAQCAX8AAAAAAAAAAAAAAAAAADAcHxAIBAIBAIBAAAAAAAAAAAAMCXsAAAAAAAAAAAAAAAAAIAACISCQSCQRCHgAAAAAAACAAAACAX8AAAAAAAAAAAAAAAAAAAgKBQGAQEBDwAAAAAAAAAAAIBgSCQMAAAAAAAAAAAAAAAAAAHBIKHmJAkDgAAAAAAAAAACAIHhKGXsAAAAAAAAAAAAAAAAAAAAAAAOCCQhEEgj4AAAAAAAAABgQSEIgkEgj4AAAAAAAAAAAAAACAX8AAAKAAAAAAAAAH+VX+VX+VX+5Xu/X+/3+", 376 "amigaFont": false 377 }, 378 "portuguese": { 379 "width": 9, 380 "height": 16, 381 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GDgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAdm4ADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAYGAEBwbGMxn8xmMxmMAAAAAAAAAAAAAD4xmAwGAxj4GDgAAAAAgODYAD4xn8wGAxj4AAAAAAODYAH8ZjEaDwaDEZn8AAAAAAADAMAwAD4xn8wGAxj4AAAAAADAwAB4GAwGAwGAwGB4AAAAAAODYAD4xmMxmMxmMxj4AAAAAAADAMAwABwGAwGAwGB4AAAAAAdm4ABwbGMxn8xmMxmMAAAAAAODYxhwbGMxn8xmMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAADAMEBwbGMxn8xmMxmMAAAAAAMAwAH8ZjEaDwaDEZn8AAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAdm4AD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAGBgAGMxmMxmMxmMxj4AAAAAAADAMAwAGYzGYzGYzDsAAAAAAMAwAB4GAwGAwGAwGB4AAAAAAdm4AD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAwGD4xmAwGAxj4GAwAAAAAAABwbDIYHgYDAYDA5n4AAAAAAMAwAGMxmMxmMxmMxj4AAAAAAAHwzGY+GIzG8zGYzGMAAAAAAGBgAD4xmMxmMxmMxj4AAAAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAMBgABgMDAwGMxj4AAAAAAMAwAD4xmMxmMxmMxj4AAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAADs3Gw2Gw3DsAAAAAAAAAeGYzGY2GYxmMxmYAAAAAAAAA/mMxmAwGAwGAwGAAAAAAAAAAAAAAH8bDYbDYbDYAAAAAAAAA/mMYBgGAwMDAxn8AAAAAAAAAAAAAD82Gw2Gw2DgAAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAdm4GAwGAwGAwAAAAAAAAAfgwPDMZjMZh4GD8AAAAAAAAAODYxmM/mMxmMbBwAAAAAAAAAODYxmMxjYbDYbHcAAAAAAAAAHhgGAYPjMZjMZh4AAAAAAAAAAAAAD82222z8AAAAAAAAAAAAAAGBj82228z8YGAAAAAAAAAAHBgYDAfDAYDAMA4AAAAAAAAAAD4xmMxmMxmMxmMAAAAAAAAAAAA/gAAH8AAA/gAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAABgGAYBgYGBgAD8AAAAAAAAAAAYGBgYBgGAYAD8AAAAAAAAADg2GwwGAwGAwGAwGAwGAwGAwGAwGAwGAwGGw2GwcAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAADs3AAdm4AAAAAAAAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAeDAYDAYDHYbDYPA4AAAAAAADYNhsNhsNgAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 382 "amigaFont": false 383 }, 384 "russian": { 385 "width": 9, 386 "height": 16, 387 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAfGMxmc1nMxmMxj4AAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAHhsZmMxn8xmMxmMAAAAAAAAA/jEYDAfDMZjMZn4AAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAA/jMYjAYDAYDAYHgAAAAAAAAAHhsZjMZjMZjMZn+w0CAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA222Wi0fj8Wm2222AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAAxmMxmc3ns5mMxmMAAAAAAbBwxmMxmc3ns5mMxmMAAAAAAAAA5jMbDYeDwbDYZnMAAAAAAAAAHxsZjMZjMZjMZmeAAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/mMxmMxmMxmMxmMAAAAAAAAA/DMZjMZj4YDAYHgAAAAAAAAAfGMxmAwGAwGExj4AAAAAAAAA/22mQwGAwGAwGB4AAAAAAAAAxmMxmMxj8BgMxj4AAAAAAAAAfm22222222z8GB4AAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAxmMxmMxmMxmMxn+AwGAAAAAAxmMxmMxj8BgMBgMAAAAAAAAA1ms1ms1ms1ms1n8AAAAAAAAA1ms1ms1ms1ms1n+AwGAAAAAA+HgsBgPhmMxmMz8AAAAAAAAAw2Gw2G82222223mAAAAAAAAA8DAYDAfDMZjMZn4AAAAAAAAAfGMBhMPhMBgMxj4AAAAAAAAAzm2222+2222222cAAAAAAAAAPzMZjMPh8ZjMZnOAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAEBj4wGA/GMxmMxj4AAAAAAAAAAAAAH4ZjMfDMZn4AAAAAAAAAAAAAH8YjEYDAYHgAAAAAAAAAAAAAA8NjMZjMZn+w2GAAAAAAAAAAD4xmM/mAxj4AAAAAAAAAAAAAGs1iofCo1msAAAAAAAAAAAAAD4xgMPAMxj4AAAAAAAAAAAAAGMxmc1nMxmMAAAAAAAAAADYOGMxmc1nMxmMAAAAAAAAAAAAAHMbDweDYZnMAAAAAAAAAAAAAA8NjMZjMZnMAAAAAAAAAAAAAGM7n8/ms1mMAAAAAAAAAAAAAGMxmM/mMxmMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAH8xmMxmMxmMAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwGAwGAwGHwGHwGAwGAwGAwGAwNhsNhsNhsNnsNhsNhsNhsNhsAAAAAAAAAAH8NhsNhsNhsNhsAAAAAAAHwGHwGAwGAwGAwGAwNhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAANhsNhsNhsNn8AAAAAAAAAAAAGAwGAwGHwGHwAAAAAAAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwGAwGAwGA/GA/GAwGAwGAwGAwNhsNhsNhsNhvNhsNhsNhsNhsNhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsGAwGAwGH/AH/AAAAAAAAAAAANhsNhsNhsNn/AAAAAAAAAAAAAAAAAAAH/AH/GAwGAwGAwGAwAAAAAAAAAAH/NhsNhsNhsNhsNhsNhsNhsNh/AAAAAAAAAAAAGAwGAwGA/GA/AAAAAAAAAAAAAAAAAAAA/GA/GAwGAwGAwGAwAAAAAAAAAAB/NhsNhsNhsNhsNhsNhsNhsNn/NhsNhsNhsNhsGAwGAwGH/GH/GAwGAwGAwGAwGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f//////////4AAAAAAAAAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAAD4xmAwGAxj4AAAAAAAAAAAAAD8WgwGAwGB4AAAAAAAAAAAAAGMxmMxmMfgMBmMfAAAAAAB4GD82222222z8GAwPAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxn+AwGAAAAAAAAAAGMxmMxj8BgMAAAAAAAAAAAAAGs1ms1ms1n8AAAAAAAAAAAAAGs1ms1ms1n8AwGAAAAAAAAAAHwsFgPhmMz8AAAAAAAAAAAAAGMxmM9m83nsAAAAAAAAAAAAAHgYDAfDMZn4AAAAAAAAAAAAAD4xgMPgMxj4AAAAAAAAAAAAAGc222+2222cAAAAAAAAAAAAAD+xmMfhsZnOAAAAAAbAA/jMYjQeDQYDEZn8AAAAAAAAAADYAD4xmM/GAxj4AAAAAAAAAfGMwGQ+GQwGAxj4AAAAAAAAAAAAAD4xmA+GAxj4AAAAAAZgAPAwGAwGAwGAwGB4AAAAAAAAAADYABwGAwGAwGB4AAAAAAbBwxmMxmMxj8BgMxj4AAAAAAAAAADYOGMxmMxmMfgMBmMfAAABwbDYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAcDAYDAYDAY7DYPA4AAAAAAAAAz2a73Y/243GYzGYAAAAAAAAAAGMfGMxmMxmMfGMAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 388 "amigaFont": false 389 }, 390 "terminus": { 391 "width": 9, 392 "height": 16, 393 "data": "AAAfiEQiEQiEQiEQj8AAAAAAAAAfEEqkEgl0kkEgj4AAAAAAAAAfH81n8/mM7n8/j4AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAEBwOAgVH8/ioEBwAAAAAAAAAEAgOD4/n8fAgEBwAAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAAAGBIJAwAAAAAAAAA/3+/3+/3+52223O/3+/3+/3+AAAHgMCgkOCIRCIRBwAAAAAAAAAOCIRCIRBwED4EAgAAAAAAAAAPhEPhAIBAIBAIGAAAAAAAAAAfiEfiEQiEQiEQiIgAAAAAAAAAAgkioOHcOCokggAAAAAAAAAAAAwHg/H+/HgwAAAAAAAAAAAAAAAweP3+PweAwAAAAAAAAAAEBwVAgEAgECoOAgAAAAAAAAAJBIJBIJBIJAAJBIAAAAAAAAAfkkkkkkjkEgkEgkAAAAAAABwRCAMCQRCIJAwBCIOAAAAAAAAAAAAAAAAAfj8fj8AAAAAAAAAEBwVAgEAgVBwED4AAAAAAAAAEBwVAgEAgEAgEAgAAAAAAAAAEAgEAgEAgECoOAgAAAAAAAAAAAAAAQBH8BAQAAAAAAAAAAAAAAAABAQH8QBAAAAAAAAAAAAAAAAQCAQCAQD8AAAAAAAAAAAAAAAABIQn+QhIAAAAAAAAAAAAAAAEAgOBwfD4/n8AAAAAAAAAAAA/n8fD4OBwEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgEAgEAgEAAEAgAAAAAAABIJBIAAAAAAAAAAAAAAAAAAAAAJBIJD8JBIfhIJBIAAAAAAAAgED4kkgkD4Egkkj4EAgAAAAAAZEoaAQEAgIBYUiYAAAAAAAAAGBIJAwMCURCIRB0AAAAAAAAgEAgAAAAAAAAAAAAAAAAAAAAACAgIBAIBAIBAEAQAAAAAAAAAIAgCAQCAQCAQEBAAAAAAAAAAAAAABIGD8GBIAAAAAAAAAAAAAAAAAgED4EAgAAAAAAAAAAAAAAAAAAAAAAAAEAgIAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAAAAABAICAQEAgIBAQCAAAAAAAAAAPCEQiMSikYiEQh4AAAAAAAAACAwKAQCAQCAQCB8AAAAAAAAAPCEQgEBAQEBAQD8AAAAAAAAAPCEQgEHAEAiEQh4AAAAAAAAAAgMCgkIiEfgEAgEAAAAAAAAAfiAQCAfAEAgEQh4AAAAAAAAAHBAQCAfCEQiEQh4AAAAAAAAAfgEAgIBAQCAgEAgAAAAAAAAAPCEQiEPCEQiEQh4AAAAAAAAAPCEQiEQh8AgEBBwAAAAAAAAAAAAAAgEAAAAAEAgAAAAAAAAAAAAAAgEAAAAAEAgIAAAAAAAAAAICAgICAIAgCAIAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAACAIAgCAICAgICAAAAAAAAAAPCEQiEBAQCAACAQAAAAAAAAAfEEnlEolEpk0gD8AAAAAAAAAPCEQiEQj8QiEQiEAAAAAAAAAfCEQiEfCEQiEQj4AAAAAAAAAPCEQiAQCAQCEQh4AAAAAAAAAeCIQiEQiEQiERDwAAAAAAAAAfiAQCAeCAQCAQD8AAAAAAAAAfiAQCAeCAQCAQCAAAAAAAAAAPCEQiAQCcQiEQh4AAAAAAAAAQiEQiEfiEQiEQiEAAAAAAAAAOAgEAgEAgEAgEBwAAAAAAAAADgIBAIBAIBCIRBwAAAAAAAAAQiISCgYDAUCQRCEAAAAAAAAAQCAQCAQCAQCAQD8AAAAAAAAAgmMqkkkkEgkEgkEAAAAAAAAAQiEQjEUiURiEQiEAAAAAAAAAPCEQiEQiEQiEQh4AAAAAAAAAfCEQiEQj4QCAQCAAAAAAAAAAPCEQiEQiEQiESh4AgAAAAAAAfCEQiEQj4UCQRCEAAAAAAAAAPCEQCAPAEAiEQh4AAAAAAAAA/ggEAgEAgEAgEAgAAAAAAAAAQiEQiEQiEQiEQh4AAAAAAAAAQiEQiEQhIJBIGAwAAAAAAAAAgkEgkEgkkklUxkEAAAAAAAAAQiEJBIGAwJBIQiEAAAAAAAAAgkERCIKAgEAgEAgAAAAAAAAAfgEAgICAgICAQD8AAAAAAAAAOBAIBAIBAIBAIBwAAAAAAAAAQCAIBAEAgCAQBAIAAAAAAAAAOAQCAQCAQCAQCBwAAAAAAAAgKCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4Ah8QiEQh8AAAAAAAAAQCAQD4QiEQiEQj4AAAAAAAAAAAAAB4QiAQCAQh4AAAAAAAAAAgEAh8QiEQiEQh8AAAAAAAAAAAAAB4QiEfiAQB4AAAAAAAAADggED4EAgEAgEAgAAAAAAAAAAAAAB8QiEQiEQh8AgEPAAAAAQCAQD4QiEQiEQiEAAAAAAAAAEAgABgEAgEAgEBwAAAAAAAAABAIAAYBAIBAIBAIRCIOAAAAAQCAQCERCQcCQRCEAAAAAAAAAMAgEAgEAgEAgEBwAAAAAAAAAAAAAH4kkkkkkkkkAAAAAAAAAAAAAD4QiEQiEQiEAAAAAAAAAAAAAB4QiEQiEQh4AAAAAAAAAAAAAD4QiEQiEQj4QCAQAAAAAAAAAB8QiEQiEQh8AgEAgAAAAAAAAC8YCAQCAQCAAAAAAAAAAAAAAB8QCAPAEAj4AAAAAAAAAEAgED4EAgEAgEAcAAAAAAAAAAAAACEQiEQiEQh8AAAAAAAAAAAAACEQiEJBIGAwAAAAAAAAAAAAAEEgkkkkkkj4AAAAAAAAAAAAACEQhIGBIQiEAAAAAAAAAAAAACEQiEQiEQh8AgEPAAAAAAAAAD8BAQEBAQD8AAAAAAAAADAgEAgIAgEAgEAYAAAAAAAAAEAgEAgEAgEAgEAgAAAAAAAAAMAQCAQBAQCAQCBgAAAAAAADEkkYAAAAAAAAAAAAAAAAAAAAAAAAEBQREEgkEgn8AAAAAAAAAPCEQiAQCAQCEQh4EAgIAAAAAJBIACEQiEQiEQh8AAAAAAAAACAgAB4QiEfiAQB4AAAAAAAAAGBIAB4Ah8QiEQh8AAAAAAAAAJBIAB4Ah8QiEQh8AAAAAAAAAEAQAB4Ah8QiEQh8AAAAAAAAAGBIGB4Ah8QiEQh8AAAAAAAAAAAAAB4QiAQCAQh4EAgIAAAAAGBIAB4QiEfiAQB4AAAAAAAAAJBIAB4QiEfiAQB4AAAAAAAAAEAQAB4QiEfiAQB4AAAAAAAAASCQABgEAgEAgEBwAAAAAAAAAMCQABgEAgEAgEBwAAAAAAAAAIAgABgEAgEAgEBwAAAAAAJBIAB4QiEQj8QiEQiEAAAAAAGBIGB4QiEQj8QiEQiEAAAAAACAgAD8QCAQDwQCAQD8AAAAAAAAAAAAADYEjknkgkDYAAAAAAAAAfkgkEg/EgkEgkE8AAAAAAAAAGBIAB4QiEQiEQh4AAAAAAAAAJBIAB4QiEQiEQh4AAAAAAAAAEAQAB4QiEQiEQh4AAAAAAAAAGBIACEQiEQiEQh8AAAAAAAAAEAQACEQiEQiEQh8AAAAAAAAAJBIACEQiEQiEQh8AgEPAAJBIAB4QiEQiEQiEQh4AAAAAAJBIACEQiEQiEQiEQh4AAAAAAAAAAAgED4kkgkEgkj4EAgAAAAAAGBIIBAeBAIBAIj8AAAAAAAAAgkERBQED4ED4EAgAAAAAAAAA8EQiEQ9EIjkIhEEAAAAAAAAADAkEAgfAgEAgEAgEEgYAAAAACAgAB4Ah8QiEQh8AAAAAAAAACAgABgEAgEAgEBwAAAAAAAAACAgAB4QiEQiEQh4AAAAAAAAACAgACEQiEQiEQh8AAAAAAAAAMiYAD4QiEQiEQiEAAAAAAMiYACEQjEUiURiEQiEAAAAAAABwBB4RB4AD4AAAAAAAAAAAAABwRCIRBwAD4AAAAAAAAAAAAAAAEAgAAgEBAQiEQh4AAAAAAAAAAAAAD8QCAQAAAAAAAAAAAAAAAAAAD8AgEAgAAAAAAAAAAABAYBAIhICAgICYkgICA8AAAABAYBAIhICAgIiMig8AgEAAAAAAEAgAAgEAgEAgEAgAAAAAAAAAAAAAAkJCQkCQJAkAAAAAAAAAAAAAEgSBIEhISEgAAAAAAiBEiBEiBEiBEiBEiBEiBEiBEqiqqiqqiqqiqqiqqiqqiqqiq7l27l27l27l27l27l27l27l2EAgEAgEAgEAgEAgEAgEAgEAgEAgEAgEAgEHgEAgEAgEAgEAgEAgEAgEAg8Ag8AgEAgEAgEAgKBQKBQKBQKHQKBQKBQKBQKBQAAAAAAAAAAHwKBQKBQKBQKBQAAAAAAAAA8Ag8AgEAgEAgEAgKBQKBQKBQ6AQ6BQKBQKBQKBQKBQKBQKBQKBQKBQKBQKBQKBQAAAAAAAAA+AQ6BQKBQKBQKBQKBQKBQKBQ6AQ+AAAAAAAAAAAKBQKBQKBQKHwAAAAAAAAAAAAEAgEAgEAg8Ag8AAAAAAAAAAAAAAAAAAAAAHgEAgEAgEAgEAgEAgEAgEAgEA/AAAAAAAAAAAAEAgEAgEAgEH/AAAAAAAAAAAAAAAAAAAAAAH/EAgEAgEAgEAgEAgEAgEAgEA/EAgEAgEAgEAgAAAAAAAAAAH/AAAAAAAAAAAAEAgEAgEAgEH/EAgEAgEAgEAgEAgEAgEAgH4gH4gEAgEAgEAgKBQKBQKBQKBfKBQKBQKBQKBQKBQKBQKBQL5AP4AAAAAAAAAAAAAAAAAAAP5AL5QKBQKBQKBQKBQKBQKBQ74A/4AAAAAAAAAAAAAAAAAAA/4A75QKBQKBQKBQKBQKBQKBQL5AL5QKBQKBQKBQAAAAAAAAA/4A/4AAAAAAAAAAKBQKBQKBQ74A75QKBQKBQKBQEAgEAgEAg/4A/4AAAAAAAAAAKBQKBQKBQKH/AAAAAAAAAAAAAAAAAAAAA/4A/4gEAgEAgEAgAAAAAAAAAAH/KBQKBQKBQKBQKBQKBQKBQKB/AAAAAAAAAAAAEAgEAgEAgH4gH4AAAAAAAAAAAAAAAAAAAH4gH4gEAgEAgEAgAAAAAAAAAAB/KBQKBQKBQKBQKBQKBQKBQKH/KBQKBQKBQKBQEAgEAgEAg/4g/4gEAgEAgEAgEAgEAgEAgEHgAAAAAAAAAAAAAAAAAAAAAAA/EAgEAgEAgEAg////////////////////////AAAAAAAAAAAA////////////8Hg8Hg8Hg8Hg8Hg8Hg8Hg8HgD4fD4fD4fD4fD4fD4fD4fD4f////////////AAAAAAAAAAAAAAAAAAAB0RiIRCIRh0AAAAAAAAAOCIRCQfCEQiEQj4QCAQAAAAAfiAQCAQCAQCAQCAAAAAAAAAAAAAAD8QiEQiEQiEAAAAAAAAAfiAIAgCAQEBAQD8AAAAAAAAAAAAAB8RCIRCIRBwAAAAAAAAAAAAACEQiEQiERj0QCAQAAAAAAAAAH8EAgEAgEAYAAAAAAAAAED4kkkkkkkkkfAgAAAAAAAAAPCEQiEWiEQiEQh4AAAAAAAAAPCEQiEQiEQhIJDMAAAAAAAAAPggCB4QiEQiEQh4AAAAAAAAAAAAADYkkkkjYAAAAAAAAAAAAAgIfEUkkkoj4QEAAAAAAAAAAAAAHhAQD8QBAHgAAAAAAAAAAAAAPCEQiEQiEQiEAAAAAAAAAAAAfgAAD8AAAfgAAAAAAAAAAAAAAAgED4EAgAD4AAAAAAAAAABAEAQBAQEBAAD4AAAAAAAAAAAICAgIAgCAIAB8AAAAAAAAADAkEggEAgEAgEAgEAgEAgEAgEAgEAgEAgEEgkDAAAAAAAAAAAAAEAgAD4AAgEAAAAAAAAAAAAAAABkTAAMiYAAAAAAAAAAAwJBIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAAAAAAAgEAAAAAAAAAAAAAMBAIBAIRCIRBIFAYAAAAAAABwJBIJBIAAAAAAAAAAAAAAAAAwJAQEB4AAAAAAAAAAAAAAAAAAAAAAB4PB4PB4PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 394 "amigaFont": false 395 }, 396 "turkish": { 397 "width": 9, 398 "height": 16, 399 "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAfkCpUCgV6mUCgT8AAAAAAAAAfn+23+/2G53+/z8AAAAAAAAAAAAbH8/n8/j4OAgAAAAAAAAAAAAEBwfH8fBwEAAAAAAAAAAAAAwPB453O5wwGB4AAAAAAAAAAAwPD8/3+fgwGB4AAAAAAAAAAAAAAAGB4PAwAAAAAAAAA/3+/3+/3+52Gw3O/3+/3+/3+AAAAAAAB4ZiEQjMPAAAAAAAA/3+/3+/2GmV6vUyw3+/3+/3+AAAHgcGhkeGYzGYzDwAAAAAAAAAPDMZjMZh4GD8GAwAAAAAAAAAPxmPxgMBgMDg8HAAAAAAAAAAfzGfzGYzGYzO53MwAAAAAAAAAAwGG2PHOPG2GAwAAAAAAAEAwHA8Hw/nw8HAwEAAAAAAAAAEBgcHh8/h8HgcBgEAAAAAAAAAGB4fgwGAwfh4GAAAAAAAAAAAZjMZjMZjMZgAZjMAAAAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAAAAA/n8/n8AAAAAAAAAGB4fgwGAwfh4GD8AAAAAAAAAGB4fgwGAwGAwGAwAAAAAAAAAGAwGAwGAwGD8PAwAAAAAAAAAAAAAAwDH8DAwAAAAAAAAAAAAAAAABgYH8YBgAAAAAAAAAAAAAAAAAAwGAwH8AAAAAAAAAAAAAAAABQbH8bBQAAAAAAAAAAAAAAAEBwOD4fH8/gAAAAAAAAAAAAA/n8fD4OBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGB4PB4GAwGAAGAwAAAAAAADMZjMJAAAAAAAAAAAAAAAAAAAAADYbH8bDYbH8bDYAAAAAAGAwfGMwmAfAMBkMxj4GAwAAAAAAAAAwmMDAwMDAxkMAAAAAAAAAODYbBwdm4zGYzDsAAAAAAABgMBgYAAAAAAAAAAAAAAAAAAAADAwMBgMBgMBgGAYAAAAAAAAAMAwDAYDAYDAYGBgAAAAAAAAAAAAADMPH+PDMAAAAAAAAAAAAAAAAAwGD8GAwAAAAAAAAAAAAAAAAAAAAAAAwGAwMAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAgMDAwMDAwEAAAAAAAAAAODYxmM1msxmMbBwAAAAAAAAAGBweAwGAwGAwGD8AAAAAAAAAfGMBgYGBgYGAxn8AAAAAAAAAfGMBgMPAMBgMxj4AAAAAAAAADA4PDYzH8DAYDA8AAAAAAAAA/mAwGA/AMBgMxj4AAAAAAAAAODAwGA/GMxmMxj4AAAAAAAAA/mMBgMDAwMBgMBgAAAAAAAAAfGMxmMfGMxmMxj4AAAAAAAAAfGMxmMfgMBgMDDwAAAAAAAAAAAAGAwAAAAAwGAAAAAAAAAAAAAAGAwAAAAAwGBgAAAAAAAAAAAMDAwMDAMAwDAMAAAAAAAAAAAAAD8AAAfgAAAAAAAAAAAAAADAMAwDAMDAwMDAAAAAAAAAAfGMxgYGAwGAAGAwAAAAAAAAAAD4xmM3m83m4wD4AAAAAAAAAEBwbGMxn8xmMxmMAAAAAAAAA/DMZjMfDMZjMZn4AAAAAAAAAPDMwmAwGAwGEZh4AAAAAAAAA+DYZjMZjMZjMbHwAAAAAAAAA/jMYjQeDQYDEZn8AAAAAAAAA/jMYjQeDQYDAYHgAAAAAAAAAPDMwmAwG8xmMZh0AAAAAAAAAxmMxmM/mMxmMxmMAAAAAAAAAPAwGAwGAwGAwGB4AAAAAAAAAHgYDAYDAYzGYzDwAAAAAAAAA5jMZjYeDwbDMZnMAAAAAAAAA8DAYDAYDAYDEZn8AAAAAAAAAxnc/n81mMxmMxmMAAAAAAAAAxnM9n83mcxmMxmMAAAAAAAAAfGMxmMxmMxmMxj4AAAAAAAAA/DMZjMfDAYDAYHgAAAAAAAAAfGMxmMxmMxms3j4DAcAAAAAA/DMZjMfDYZjMZnMAAAAAAAAAfGMxjAOAYBmMxj4AAAAAAAAAfj8WgwGAwGAwGB4AAAAAAAAAxmMxmMxmMxmMxj4AAAAAAAAAxmMxmMxmMxjYOAgAAAAAAAAAxmMxmM1ms1n87jYAAAAAAAAAxmMbD4OBwfDYxmMAAAAAAAAAZjMZjMPAwGAwGB4AAAAAAAAA/mMhgYGBgYGExn8AAAAAAAAAPBgMBgMBgMBgMB4AAAAAAAAAAEAwHAcBwHAcBgEAAAAAAAAAPAYDAYDAYDAYDB4AAAAAAEBwbGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAABgGAYAAAAAAAAAAAAAAAAAAAAAAAAADwDD4zGYzDsAAAAAAAAA4DAYDwbDMZjMZj4AAAAAAAAAAAAAD4xmAwGAxj4AAAAAAAAAHAYDB4bGYzGYzDsAAAAAAAAAAAAAD4xn8wGAxj4AAAAAAAAAHBsMhgeBgMBgMDwAAAAAAAAAAAAADszGYzGYzD4DGYeAAAAA4DAYDYdjMZjMZnMAAAAAAAAAGAwABwGAwGAwGB4AAAAAAAAABgMAAcBgMBgMBgMZjMPAAAAA4DAYDMbDweDYZnMAAAAAAAAAOAwGAwGAwGAwGB4AAAAAAAAAAAAAHY/ms1ms1mMAAAAAAAAAAAAAG4ZjMZjMZjMAAAAAAAAAAAAAD4xmMxmMxj4AAAAAAAAAAAAAG4ZjMZjMZj4YDA8AAAAAAAAADszGYzGYzD4DAYHgAAAAAAAAG4djMYDAYHgAAAAAAAAAAAAAD4xjAOAYxj4AAAAAAAAAEBgMH4MBgMBgNg4AAAAAAAAAAAAAGYzGYzGYzDsAAAAAAAAAAAAAGMxmMxmMbBwAAAAAAAAAAAAAGMxms1ms/jYAAAAAAAAAAAAAGMbBwOBwbGMAAAAAAAAAAAAAGMxmMxmMxj8BgY+AAAAAAAAAH8zAwMDAxn8AAAAAAAAADgwGAwcAwGAwGAcAAAAAAAAAGAwGAwGAwGAwGAwAAAAAAAAAcAwGAwDgwGAwGDgAAAAAAADs3AAAAAAAAAAAAAAAAAAAAAAAAAAEBwbGMxmM/gAAAAAAAAAAPDMwmAwGAwGEZh4GBgAAAAAAzAAAGYzGYzGYzDsAAAAAAAAYGBgAD4xn8wGAxj4AAAAAAAAgODYADwDD4zGYzDsAAAAAAAAAzAAADwDD4zGYzDsAAAAAAADAMAwADwDD4zGYzDsAAAAAAABwbBwADwDD4zGYzDsAAAAAAAAAAAAAD4xmAwGAxj4GBgAAAAAgODYAD4xn8wGAxj4AAAAAAAAAxgAAD4xn8wGAxj4AAAAAAADAMAwAD4xn8wGAxj4AAAAAAAAAZgAABwGAwGAwGB4AAAAAAAAwPDMABwGAwGAwGB4AAAAAAAAAAAAABwGAwGAwGB4AAAAAAAGMAAgODYxmM/mMxmMAAAAAAODYOAgODYxn8xmMxmMAAAAAADAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAGYdhsfmw2DcAAAAAAAAAPjYzGY/mYzGYzGcAAAAAAAAgODYAD4xmMxmMxj4AAAAAAAAAxgAAD4xmMxmMxj4AAAAAAADAMAwAD4xmMxmMxj4AAAAAAABgeGYAGYzGYzGYzDsAAAAAAADAMAwAGYzGYzGYzDsAAAAAAAAwAB4GAwGAwGAwGB4AAAAAAAGMAD4xmMxmMxmMxj4AAAAAAAGMAGMxmMxmMxmMxj4AAAAAAAAAAAAAD4zm89nMxj4AAAAAAABwbDIYHgYDAYDA5n4AAAAAAAAAfGMxmc3ns5mMxj4AAAAAAAAAfGMxjAOAYBmMxj4GBgAAAAAAAAAAD4xjAOAYxj4GBgAAAAAwMDAADwDD4zGYzDsAAAAAAAAYGBgABwGAwGAwGB4AAAAAAAAwMDAAD4xmMxmMxj4AAAAAAAAwMDAAGYzGYzGYzDsAAAAAAAAAdm4AG4ZjMZjMZjMAAAAAAdm4AGM5ns/m8zmMxmMAAAAAAADMfh4ZmEwGA3mMbh0AAAAAAAAAzDwADszGYzGYzD4DGYeAAAAAMBgABgMDAwGMxj4AAAAAAAAAfEEslUslUqkEfAAAAAAAAAAAAAAAAA/gMBgMBgAAAAAAAADA4DEZjYGBgYG4hgYGB8AAAADA4DEZjYGBgZmcmh+BgMAAAAAAGAwAAwGAwPB4PAwAAAAAAAAAAAAABsbGwbBsAAAAAAAAAAAAAAAAGwbBsbGwAAAAAAAAAESIESIESIESIESIESIESIESIVVUVVUVVUVVUVVUVVUVVUVVU3Tu3Tu3Tu3Tu3Tu3Tu3Tu3TuGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGAwGHwGAwGAwGAwGAwYGAEBwbGMxn8xmMxmMAAAAAAfGMEBwbGMxn8xmMxmMAAAAAADAMEBwbGMxn8xmMxmMAAAAAAAAAfEEmlEolEmkEfAAAAAAAANhsNhsNnsBnsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsNhsAAAAAAAH8BnsNhsNhsNhsNhsNhsNhsNnsBn8AAAAAAAAAAAAAAAGAwfGMwGAxj4GAwAAAAAAAAAADMZh4GD8GD8GAwAAAAAAAAAAAAAAAAHwGAwGAwGAwGAwGAwGAwGAwGA/AAAAAAAAAAAAGAwGAwGAwGH/AAAAAAAAAAAAAAAAAAAAAAH/GAwGAwGAwGAwGAwGAwGAwGA/GAwGAwGAwGAwAAAAAAAAAAH/AAAAAAAAAAAAGAwGAwGAwGH/GAwGAwGAwGAwAAAdm4ADwDD4zGYzDsAAAAAAdm4ABwbGMxn8xmMxmMAAAAAANhsNhsNhvMB/AAAAAAAAAAAAAAAAAAAB/MBvNhsNhsNhsNhsNhsNhsNnvAH/AAAAAAAAAAAAAAAAAAAH/AHvNhsNhsNhsNhsNhsNhsNhvMBvNhsNhsNhsNhsAAAAAAAH/AH/AAAAAAAAAAAANhsNhsNnvAHvNhsNhsNhsNhsAAAAAAxj4xmMxmMfGMAAAAAAAAAODYbBwAD4AAAAAAAAAAAAAAAPDYbB8AD8AAAAAAAAAAAAODYAH8ZjEaDwaDEZn8AAAAAAAGMAH8ZjEaDwaDEZn8AAAAAAMAwAH8ZjEaDwaDEZn8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwAB4GAwGAwGAwGB4AAAAAAPDMAB4GAwGAwGAwGB4AAAAAAADMAB4GAwGAwGAwGB4AAAAAAGAwGAwGAwGHwAAAAAAAAAAAAAAAAAAAAAAA/GAwGAwGAwGAw////////////////////////AAAAAAAAAAH/////////////AAwGAwGAwAAAGAwGAwGAAAAAMAwAB4GAwGAwGAwGB4AAAAAA//////////4AAAAAAAAAAAAAGBgAD4xmMxmMxmMxj4AAAAAAAAAeGYzGY2GYxmMxmYAAAAAAODYAD4xmMxmMxmMxj4AAAAAAMAwAD4xmMxmMxmMxj4AAAAAAAAAdm4AD4xmMxmMxj4AAAAAAdm4AD4xmMxmMxmMxj4AAAAAAAAAAAAADMZjMZjMZj4YDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMbBwODYxgAAAAAAAGBgAGMxmMxmMxmMxj4AAAAAAODYAGMxmMxmMxmMxj4AAAAAAMAwAGMxmMxmMxmMxj4AAAAAAADAMAwABwGAwGAwGB4AAAAAAAAAxgAAGMxmMxmMxj8BgYeAAAH+AAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAGAwfgwGAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAMDENnYGBgZmcmh+BgMAAAAAAf22222ew2Gw2Gw2AAAAAAAD4xjAODYxmMbBwDGMfAAAAAAAAAAAAAwAD8AAwAAAAAAAAAAAAAAAAAAAAAAAAAAwDDwAAAABwbDYOAAAAAAAAAAAAAAAAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAwOAwGAwPAAAAAAAAAAAAAAAD4Bh4BgMfAAAAAAAAAAAAAAAB4ZgYGBkfgAAAAAAAAAAAAAAAAAAAfj8fj8fj8fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 400 "amigaFont": false 401 } 402 }; 403 404 BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 405 406 fontBitsBuffer = {}; 407 408 // Receives an RGBA image, <rgbaSource>, and the font width <fontWidth>, and delivers a double-scaled version, suitable for retina-type devices. 409 function doubleScale(rgbaSource, fontWidth) { 410 var byteWidth, doubledByteWidth, rgba, rgbaDoubled, startOfRow, i, k; 411 byteWidth = fontWidth * 4; 412 doubledByteWidth = byteWidth * 2; 413 rgbaDoubled = new Uint8Array(rgbaSource.length * 4); 414 for (i = 0, k = 0; i < rgbaSource.length; i += 4) { 415 rgba = rgbaSource.subarray(i, i + 4); 416 rgbaDoubled.set(rgba, k); 417 k += 4; 418 rgbaDoubled.set(rgba, k); 419 k += 4; 420 if ((i + 4) % byteWidth === 0) { 421 startOfRow = k - doubledByteWidth; 422 rgbaDoubled.set(rgbaDoubled.subarray(startOfRow, startOfRow + doubledByteWidth), k); 423 k += doubledByteWidth; 424 } 425 } 426 return rgbaDoubled; 427 } 428 429 // Returns properties that describe a font's size, and functions which return RGBA arrays, which are to be inserted in an entire RGBA image. Accepts <bits> an array of boolean values which describe a 1-bit image of a font, all 256 characters, as well as the <width> and <height> of each glyph, and a boolean, <amigaFont>, which if set to true is used when drawing a glyph in bold type. 430 function font(bits, width, height, amigaFont, options) { 431 // <fontBitWidth> is the size of each glyph, in amount of bits, <fontBuffer> is used to buffer RGBA images of each glyph. <fontBuffer24Bit> is used on a case-by-case basis when rendering a glyph in the get24BitData() function. 432 var fontBitWidth, fontBuffer, fontBuffer24Bit, excludeNinthBit; 433 fontBitWidth = width * height; 434 fontBuffer = []; 435 // Set <excludeNinthBit> to true, if we need to ignore the ninth bit of a font. 436 excludeNinthBit = (width === 9 && options.bits !== "9") || (width === 9 && options.thumbnail); 437 // RGBA data, requires Red, Green, Blue, and Alpha values for each 'bit' in the 1-bit image data, <bits>. 438 fontBuffer24Bit = new Uint8Array((excludeNinthBit ? width - 1 : width) * height * 4); 439 440 // Accepts a character code <charCode>, e.g. 65 = A, with an array of RGBA values, <palette>, and a foreground, <fg>, and background, <bg>, value which points at an element in the array. 441 function getData(charCode, palette, fg, bg) { 442 var i, j, k, bufferIndex; 443 // For each value of <charCode>, and <fg>, and <bg>, create a unique reference for our buffered array, <fontBuffer>. 444 bufferIndex = charCode + (fg << 8) + (bg << 12); 445 // If we haven't already drawn this glyph before... 446 if (!fontBuffer[bufferIndex]) { 447 // ... create a new one. 448 fontBuffer[bufferIndex] = new Uint8Array((excludeNinthBit ? width - 1 : width) * height * 4); 449 // Works through each bit in <bits> at the point where our <charCode> starts, and copy <fg> where the bit is set, and <bg> where it is not. 450 for (i = 0, j = charCode * fontBitWidth, k = 0; i < fontBitWidth; ++i, ++j) { 451 // Ignore the ninth bit, if <excludeNinthBit> is set. 452 if (!excludeNinthBit || (i + 1) % 9 !== 0) { 453 if (bits[j]) { 454 fontBuffer[bufferIndex].set(palette[fg], k); 455 } else { 456 // In case that this is an <amigaFont>, and the foreground colour <fg> is set to bold type, i.e. 8 to 15, make sure we 'double-width' the glyph. 457 if (amigaFont && (fg > 7) && (i % width > 0) && bits[j - 1] && (options.bits === "ced" || options.bits === "workbench")) { 458 fontBuffer[bufferIndex].set(palette[fg], k); 459 } else { 460 fontBuffer[bufferIndex].set(palette[bg], k); 461 } 462 } 463 k += 4; 464 } 465 } 466 if (options["2x"]) { 467 fontBuffer[bufferIndex] = doubleScale(fontBuffer[bufferIndex], excludeNinthBit ? width - 1 : width); 468 } 469 } 470 // Return the buffered RGBA image. 471 return fontBuffer[bufferIndex]; 472 } 473 474 // Same as getData(), but accepts only a <fg> (foreground) and <bg> (background) arrays as RGBA data. Returns, as with getData(), raw RGBA data which describes the glyph's image. 475 function get24BitData(charCode, fg, bg) { 476 var i, j, k; 477 for (i = 0, j = charCode * fontBitWidth, k = 0; i < fontBitWidth; ++i, ++j) { 478 // Ignore the ninth bit, if <excludeNinthBit> is set. 479 if (!excludeNinthBit || (i + 1) % 9 !== 0) { 480 if (bits[j]) { 481 fontBuffer24Bit.set(fg, k); 482 } else { 483 fontBuffer24Bit.set(bg, k); 484 } 485 k += 4; 486 } 487 } 488 if (options["2x"]) { 489 return doubleScale(fontBuffer24Bit, excludeNinthBit ? width - 1 : width); 490 } 491 return fontBuffer24Bit; 492 } 493 494 // Entrypoint for each of the functions publicly available in Font. 495 return { 496 "getData": getData, 497 "get24BitData": get24BitData, 498 "height": height * (options["2x"] ? 2 : 1), 499 "width" : (excludeNinthBit ? 8 : width) * (options["2x"] ? 2 : 1) 500 }; 501 } 502 503 // Converts a stream of bytes returned by a File object, <file>, into a boolean array, <bits>, which represent the 1-bit image data of all the glyphs. The number of bytes to be read are calculated by the <width> and <height> specified for each glyph. 504 function bytesToBits(file, width, height) { 505 var bits, i, j, k, v; 506 // Build the <bits> array, for all 256 glyphs. 507 bits = new Uint8Array(width * height * 256); 508 for (i = width * height * 256 / 8, k = 0; i > 0; --i) { 509 v = file.get(); 510 for (j = 7; j >= 0; --j) { 511 // returns true or false if the bit is set for each bit in every byte read. 512 bits[k++] = !!((v >> j) & 1); 513 } 514 } 515 return bits; 516 } 517 518 // Converts a string of <text> in Base64 characters to a File object. This is probably much slower than calling window.atob(), but atob() cannot be invoked by a Web Worker instance. Truncating the array based on padding characters is not implemented, but is not necessary for this script. <bytes16> is used on the assumption that keeping the bit-shifting limited to typed-arrays is faster that dynamic types. 519 function base64ToFile(text) { 520 var i, j, bytes16, bytes8; 521 bytes16 = new Uint32Array(1); 522 bytes8 = new Uint8Array(text.length / 4 * 3); 523 for (i = j = 0; i < text.length; bytes16[0] = 0) { 524 bytes16[0] += (BASE64_CHARS.indexOf(text.charAt(i++)) & 63) << 18; 525 bytes16[0] += (BASE64_CHARS.indexOf(text.charAt(i++)) & 63) << 12; 526 bytes16[0] += (BASE64_CHARS.indexOf(text.charAt(i++)) & 63) << 6; 527 bytes16[0] += BASE64_CHARS.indexOf(text.charAt(i++)) & 63; 528 bytes8[j++] = (bytes16[0] >> 16) & 255; 529 bytes8[j++] = (bytes16[0] >> 8) & 255; 530 bytes8[j++] = bytes16[0] & 255; 531 } 532 return new File(bytes8); 533 } 534 535 // Returns a font object returned by <font> based on the data held in FONT_PRESETS using the key <name>. When the preset is called initially, the 1-bit image data returned by bytesToBits() is buffered in <fontBitsBuffer>, referenced by the key <name>, which may save some cpu cycles when the function is called again. Assumes <name> absolutely exists in FONT_PRESETS, and any error checking is handled by calling has() previously. 536 function preset(name, options) { 537 // Aliases for various keys, used to preserve compatibility with url schemes. 538 switch (name) { 539 case "amiga": 540 name = "topaz"; 541 break; 542 case "microknightplus": 543 name = "microknight+"; 544 break; 545 case "topazplus": 546 name = "topaz+"; 547 break; 548 case "topaz500plus": 549 name = "topaz500+"; 550 break; 551 } 552 // If we haven't already converted this data to a boolean array... 553 if (!fontBitsBuffer[name]) { 554 // ... build and store it. 555 fontBitsBuffer[name] = bytesToBits(base64ToFile(FONT_PRESETS[name].data), FONT_PRESETS[name].width, FONT_PRESETS[name].height); 556 } 557 // Return our font object based on the buffered array by calling font() with all the data held in FONT_PRESETS. 558 return font(fontBitsBuffer[name], FONT_PRESETS[name].width, FONT_PRESETS[name].height, FONT_PRESETS[name].amigaFont, options); 559 } 560 561 // Returns a font object by reading <file>, assuming a predefined glyph height, <fontHeight>. This is a predefined function to handle font data held in xbin files. 562 function xbin(file, fontHeight, options) { 563 return font(bytesToBits(file, 8, fontHeight), 8, fontHeight, false, options); 564 } 565 566 // A generic function, leveraged by various parsers to read font data of a standard 8x16 size, to be read from <file>, and returns a font object. 567 function font8x16x256(file, options) { 568 return font(bytesToBits(file, 8, 16), 8, 16, false, options); 569 } 570 571 // A simple function, which returns true or false depending on whether <name> is a key name in FONT_PRESETS, so that a call to preset will return valid data. 572 function has(name) { 573 switch (name) { 574 case "amiga": 575 case "microknightplus": 576 case "topazplus": 577 case "topaz500plus": 578 return true; 579 default: 580 return FONT_PRESETS.hasOwnProperty(name); 581 } 582 } 583 584 // Entrypoint for publicly-available functions. 585 return { 586 "preset": preset, 587 "xbin": xbin, 588 "font8x16x256": font8x16x256, 589 "has": has 590 }; 591 }()); 592 593 // Collects together several functions and variables which hold palette data. 594 Palette = (function () { 595 // Variables, which should be treated as constants for use when rendering .asc, .ans, .bin files, as well as when setting "bits" to "ced", and "workbench". All are defined as native arrays of RGBA data, held as Uint8Array arrays. e.g. [[0, 0, 0, 255], [255, 255, 255,255] ...] 596 var ASC_PC, ANSI, BIN, CED, WORKBENCH; 597 598 // Converts a 6-bit <value>, representing a colour in the EGA palette, to its RGBA equivalent (as a Uint8Array). 599 function egaRGB(value) { 600 return new Uint8Array([ 601 (((value & 32) >> 5) + ((value & 4) >> 1)) * 0x55, 602 (((value & 16) >> 4) + ((value & 2))) * 0x55, 603 (((value & 8) >> 3) + ((value & 1) << 1)) * 0x55, 604 255 605 ]); 606 } 607 608 // Define the various preset palettes. Since the Workbench palette does not have equivalent EGA values, RGBA values are defined directly. 609 ASC_PC = [0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7].map(egaRGB); 610 ANSI = [0, 4, 2, 20, 1, 5, 3, 7, 56, 60, 58, 62, 57, 61, 59, 63].map(egaRGB); 611 BIN = [0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63].map(egaRGB); 612 CED = [7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].map(egaRGB); 613 WORKBENCH = [new Uint8Array([170, 170, 170, 255]), new Uint8Array([170, 170, 170, 255]), new Uint8Array([0, 0, 0, 255]), new Uint8Array([0, 0, 0, 255]), new Uint8Array([255, 255, 255, 255]), new Uint8Array([255, 255, 255, 255]), new Uint8Array([102, 136, 187, 255]), new Uint8Array([102, 136, 187, 255]), new Uint8Array([0, 0, 255, 255]), new Uint8Array([0, 0, 255, 255]), new Uint8Array([255, 0, 255, 255]), new Uint8Array([255, 0, 255, 255]), new Uint8Array([0, 255, 255, 255]), new Uint8Array([0, 255, 255, 255]), new Uint8Array([255, 255, 255, 255]), new Uint8Array([255, 255, 255, 255])]; 614 615 // Reads palette information from <file>, assuming it is held as RGB data, and has 16 members. Returns a native array of RGBA data, held as Uint8Array arrays. 616 function triplets16(file) { 617 var pal, i, r, g, b; 618 for (pal = [], i = 0; i < 16; ++i) { 619 r = file.get(); 620 g = file.get(); 621 b = file.get(); 622 pal.push(new Uint8Array([r << 2 | r >> 4, g << 2 | g >> 4, b << 2 | b >> 4, 255])); 623 } 624 return pal; 625 } 626 627 // A very specific function to interpret palette information held by adf files. Information on all 64 colours is read from <file>, and then only colours from specific places in that array are used in the image. Returns RGBA data in the same format returned by triplets16(). 628 function adf(file) { 629 var pal, i, r, g, b; 630 for (pal = [], i = 0; i < 64; ++i) { 631 r = file.get(); 632 g = file.get(); 633 b = file.get(); 634 pal.push(new Uint8Array([r << 2 | r >> 4, g << 2 | g >> 4, b << 2 | b >> 4, 255])); 635 } 636 return [pal[0], pal[1], pal[2], pal[3], pal[4], pal[5], pal[20], pal[7], pal[56], pal[57], pal[58], pal[59], pal[60], pal[61], pal[62], pal[63]]; 637 } 638 639 // Entrypoint for the various public methods. 640 return { 641 "ASC_PC": ASC_PC, 642 "ANSI": ANSI, 643 "BIN": BIN, 644 "CED": CED, 645 "WORKBENCH": WORKBENCH, 646 "adf": adf, 647 "triplets16": triplets16 648 }; 649 }()); 650 651 // Scales the RGBA image data, <sourcedata>, by averaging each "chunk" of a certain size, <chunkWidth> and <chunkHeight>. <width> and <height> describe the size of the source image. 652 function scaleCanvas(sourceData, width, height, chunkWidth, chunkHeight, options) { 653 var destWidth, destHeight, destData, rgba, pixelRowOffset, chunkSize, i, j, k, x, y, r, g, b, a; 654 655 // Temporary var for storing the value of the averaged "chunk". 656 rgba = new Uint8Array(4); 657 658 // Define the size of the destination image... 659 destWidth = width / chunkWidth; 660 destHeight = height / chunkHeight; 661 // ... and create an 8-bit array for its RGBA data. 662 destData = new Uint8Array(destWidth * destHeight * 4); 663 664 // Pre-calculations used when building the destination data. 665 pixelRowOffset = (width - chunkWidth) * 4; 666 chunkSize = chunkWidth * chunkHeight; 667 668 for (i = x = y = 0; i < destData.length; i += 4) { 669 for (j = r = g = b = a = 0, k = (y * width * chunkHeight + x * chunkWidth) * 4; j < chunkSize; ++j) { 670 // Add all the values in each "chunk" for red, green, blue, and alpha bytes. 671 r += sourceData[k++]; 672 g += sourceData[k++]; 673 b += sourceData[k++]; 674 a += sourceData[k++]; 675 // Seek the next row of pixels in each "chunk". 676 if ((j + 1) % chunkWidth === 0) { 677 k += pixelRowOffset; 678 } 679 } 680 // Average out the values for each pixel in the destination image. 681 rgba[0] = Math.round(r / chunkSize); 682 rgba[1] = Math.round(g / chunkSize); 683 rgba[2] = Math.round(b / chunkSize); 684 rgba[3] = Math.round(a / chunkSize); 685 // Write our averaged pixel. 686 destData.set(rgba, i); 687 if (++x === destWidth) { 688 x = 0; 689 ++y; 690 } 691 } 692 693 // Returns the <width> and <height> of the destination image, as well as its RGBA data, <rgbaData>. 694 return { 695 "width": destWidth, 696 "height": destHeight, 697 "rgbaData": destData, 698 "2x": options["2x"] 699 }; 700 } 701 702 // Receives a <raw> object returned from the image-parsing functions found in Parser, and outputs a Uint8Array with RGBA data, <rgbaData>, with dimensions <width> and <height>. <start> and <length> point to rows offsets, so that only part of the image can be rendered. <altFont> is a font object, returned by font() to be used when rendering the image (assuming no font information is held in raw.font), and <options>, which are passed by the user. 703 function display(raw, start, length, options) { 704 var canvasWidth, canvasHeight, rgbaData, end, i, k, l, x, fontBitWidth, fontData, rowOffset, data, screenOffset, fontOffset, chunky; 705 706 // Temporary variable to pre-calculate some data. 707 fontBitWidth = raw.font.width * 4; 708 709 data = raw.getData(); 710 711 // Define where to stop reading data. 712 start = start * raw.columns * 10; 713 end = Math.min(start + length * raw.columns * 10, data.length); 714 715 // Calculate the dimensions of the output image. 716 canvasWidth = raw.columns * raw.font.width; 717 canvasHeight = (end - start) / (raw.columns * 10) * raw.font.height; 718 719 // Initialize the RGBA image data and calculate how many bytes are in each text-row. 720 rgbaData = new Uint8Array(canvasWidth * canvasHeight * 4); 721 rowOffset = canvasWidth * 4; 722 723 for (i = start, screenOffset = 0, x = 0; i < end; i += 10, screenOffset += fontBitWidth) { 724 // If we have 24 bit data 725 if (data[i + 1]) { 726 fontData = raw.font.get24BitData(data[i], data.subarray(i + 2, i + 6), data.subarray(i + 6, i + 10)); 727 } else { 728 fontData = raw.font.getData(data[i], raw.palette, data[i + 2], data[i + 3]); 729 } 730 for (fontOffset = screenOffset, k = l = 0; k < raw.font.height; ++k, fontOffset += rowOffset, l += fontBitWidth) { 731 rgbaData.set(fontData.subarray(l, l + fontBitWidth), fontOffset); 732 } 733 if (++x % raw.columns === 0) { 734 screenOffset += (raw.font.height - 1) * rowOffset; 735 } 736 } 737 738 // Finally, if the "thumbnail" option is chosen... 739 if (options.thumbnail) { 740 // ... calculate the scale factor and return the reduced image data. 741 chunky = Math.pow(2, 4 - options.thumbnail); 742 return scaleCanvas(rgbaData, canvasWidth, canvasHeight, chunky, chunky, options); 743 } 744 745 // Return the imageData, as a Uint8Array RGBA array, <rgbaData>, with image dimensions, <width> and <height>. 746 return { 747 "width": canvasWidth, 748 "height": canvasHeight, 749 "rgbaData": rgbaData, 750 "2x": options["2x"] 751 }; 752 } 753 754 // A simple function to return a CANVAS element, at the defined <width> and <height>. 755 function createCanvas(width, height) { 756 var canvas = document.createElement("canvas"); 757 canvas.width = width; 758 canvas.height = height; 759 return canvas; 760 } 761 762 // Converts data returned by display() as a canvas element, can also be called externally after the results of a Web Worker has been returned (as creating a canvas element is not possible in a Worker thread). 763 function displayDataToCanvas(displayData) { 764 var canvas, ctx, imageData; 765 canvas = createCanvas(displayData.width, displayData.height); 766 ctx = canvas.getContext("2d"); 767 imageData = ctx.createImageData(canvas.width, canvas.height); 768 imageData.data.set(displayData.rgbaData, 0); 769 ctx.putImageData(imageData, 0, 0); 770 // Deal with pixel ratio for retina-type displays. 771 if (displayData["2x"]) { 772 canvas.style.width = (canvas.width / 2) + "px"; 773 canvas.style.height = (canvas.height / 2) + "px"; 774 } 775 return canvas; 776 } 777 778 // Returns an options object which has been validated to make sure all the arguments are legal, and sets defaults where missing. 779 function validateOptions(options) { 780 var validatedOptions; 781 782 // Create the options object, if undefined. 783 options = options || {}; 784 validatedOptions = {}; 785 // "icecolors", must be a number, 0 or 1. Defaults to 0. 786 validatedOptions.icecolors = ((typeof options.icecolors === "number") && options.icecolors >= 0 && options.icecolors <= 1) ? options.icecolors : 0; 787 // "bits", must be "8", "9", "ced", or "workbench". Defaults to "8". 788 switch (options.bits) { 789 case "8": 790 case "9": 791 case "ced": 792 case "workbench": 793 validatedOptions.bits = options.bits; 794 break; 795 default: 796 validatedOptions.bits = "8"; 797 } 798 // "columns" setting, must be a number greater than 0. Defaults to 160. 799 validatedOptions.columns = ((typeof options.columns === "number") && options.columns > 0) ? options.columns : 160; 800 // "font" setting, must be a string, and be in the list of available presets. Defaults to "80x25". 801 validatedOptions.font = ((typeof options.font === "string") && Font.has(options.font)) ? options.font : "80x25"; 802 // "thumnail", must be a number between and including 0 to 3. Defaults to 0. 803 validatedOptions.thumbnail = ((typeof options.thumbnail === "number") && options.thumbnail >= 0 && options.thumbnail <= 3) ? options.thumbnail : 0; 804 // "2x", must be a number, 0 or 1. Defaults to 0. 805 validatedOptions["2x"] = ((typeof options["2x"] === "number") && options["2x"] >= 0 && options["2x"] <= 1) ? options["2x"] : 0; 806 // "imagedata", must be 0 or 1. Defaults to 0. 807 validatedOptions.imagedata = ((typeof options.imagedata === "number") && options.imagedata >= 0 && options.imagedata <= 1) ? options.imagedata : 0; 808 // "rows", must be a number greater than 0. Defaults to 26. 809 validatedOptions.rows = ((typeof options.rows === "number") && options.rows > 0) ? options.rows : 26; 810 // "2J", must be a number 0 or 1. Defaults to 1. 811 validatedOptions["2J"] = ((typeof options["2J"] === "number") && options["2J"] >= 0 && options["2J"] <= 1) ? options["2J"] : 1; 812 // "filetype", can be any string, since readBytes() defaults to the ANSI renderer if it is unrecognised. 813 validatedOptions.filetype = (typeof options.filetype === "string") ? options.filetype : "ans"; 814 815 return validatedOptions; 816 } 817 // Collects all the functions which parse the supported image formats, with a single entrypoint, readBytes. 818 Parser = (function () { 819 // ScreenData() returns a representation of the screen with <width> columns. This is used for images with a predefined palette. i.e. all formats except Tundra. 820 function ScreenData(columns) { 821 // <imageData> represents a Uint8Array of the screen, two pairs of bytes represent the character code and colour attributes in the second, as also used in the .bin file format. <rows> stores the highest row number written to, and <pos> is the current cursor position represented in the <imageData> array. 822 var that, imageData, pos; 823 824 that = this; 825 826 // Returns the ScreenData object to its initial start, used upon initialization or when a screen-clear code is issued. 827 this.reset = function () { 828 imageData = new Uint8Array(columns * 1000 * 10); 829 pos = 0; 830 that.columns = columns; 831 that.rows = 0; 832 }; 833 834 this.reset(); 835 836 // Extend the <imageData> array if necessary, by creating a new array with an additional 1000 rows after from the <y> position currently attempting to be written to, and copy the existing data to the start. 837 function extendImageData(y) { 838 var newImageData; 839 newImageData = new Uint8Array(that.columns * (y + 1000) * 10 + imageData.length); 840 newImageData.set(imageData, 0); 841 imageData = newImageData; 842 } 843 844 // Set the character code, <charCode>, and foreground & background attribute, <attrib>, and the <x> and <y> position of the <imageData> array. 845 this.set = function (x, y, charCode, trueColor, fg, bg) { 846 pos = (y * that.columns + x) * 10; 847 // If we see that we will be writing past the end of the array, extend the array by calling extendImageData() with the current <y> position we want to write to. 848 if (pos >= imageData.length) { 849 extendImageData(y); 850 } 851 // Store the data... 852 imageData[pos] = charCode; 853 if (trueColor) { 854 // Indicate that we are referring to RGBA values... 855 imageData[pos + 1] = 1; 856 // ... and store the data. 857 imageData.set(fg, pos + 2); 858 imageData.set(bg, pos + 6); 859 } else { 860 // ... and store the palette pointers. 861 imageData[pos + 2] = fg; 862 imageData[pos + 3] = bg; 863 } 864 // ... and update <rows> if it's the largest <y> value used so far. 865 if (y + 1 > that.rows) { 866 that.rows = y + 1; 867 } 868 }; 869 870 this.raw = function (bytes) { 871 var i, j; 872 that.rows = Math.ceil(bytes.length / 2 / that.columns); 873 imageData = new Uint8Array(that.columns * that.rows * 10); 874 for (i = 0, j = 0; j < bytes.length; i += 10, j += 2) { 875 imageData[i] = bytes[j]; 876 imageData[i + 2] = bytes[j + 1] & 15; 877 imageData[i + 3] = bytes[j + 1] >> 4; 878 } 879 }; 880 881 this.trimColumns = function () { 882 var i, height, j, maxX, newImageData; 883 for (maxX = 0, height = imageData.length / 10 / that.columns, i = 0; i < imageData.length; i += 10) { 884 // If a character code is seen, check to see if it's the highest column value, and record it if necessary. 885 if (imageData[i]) { 886 maxX = Math.max((i / 10) % that.columns, maxX); 887 } 888 } 889 ++maxX; 890 // Create a new imageData object, with a reduced size if necessary. 891 for (newImageData = new Uint8Array((maxX + 1) * height * 10), i = 0, j = 0; i < newImageData.length; i += maxX * 10, j += that.columns * 10) { 892 newImageData.set(imageData.subarray(j, j + that.columns * 10), i); 893 } 894 imageData = newImageData; 895 // Set the new width. 896 that.columns = maxX; 897 }; 898 899 // Return the <imageData> array, but only up to the <rows> row. 900 this.getData = function () { 901 var subarray, i; 902 // Before returning the truncated array, set the Alpha byte for every character position to the maximum value, otherwise the whole image will be transparent when later copying into a RGBA. 903 for (subarray = imageData.subarray(0, that.columns * that.rows * 10), i = 0; i < subarray.length; i += 10) { 904 subarray[i + 5] = 255; 905 subarray[i + 9] = 255; 906 } 907 return subarray; 908 }; 909 } 910 911 // A function to parse a sequence of bytes representing an Artworx file format. 912 function adf(bytes, options) { 913 var file, imageData; 914 915 // Turn bytes into a File object. 916 file = new File(bytes); 917 918 // Read version number. 919 file.getC(); 920 921 imageData = new ScreenData(80); 922 923 // Read Palette. See Palette.adf(). 924 imageData.palette = Palette.adf(file); 925 // Read Font. See Font.font8x16x256(). 926 imageData.font = Font.font8x16x256(file, options); 927 928 // Raw Imagedata. 929 imageData.raw(file.read()); 930 931 // Return an object readable by display() for constructing an RGBA image. 932 return { 933 "imageData": imageData, 934 "sauce": file.sauce // sauce record. 935 }; 936 } 937 938 // A function to parse a sequence of bytes representing an ANSI file format. 939 function ans(bytes, options) { 940 var file, escaped, escapeCode, j, code, values, columns, imageData, topOfScreen, x, y, savedX, savedY, foreground, background, foreground24bit, background24bit, drawForeground, drawBackground, bold, blink, inverse, icecolors; 941 942 // Turn bytes into a File object. 943 file = new File(bytes); 944 945 // Reset all the attributes, used upon initialization, and on Esc[0m 946 function resetAttributes() { 947 foreground = 7; 948 background = 0; 949 foreground24bit = undefined; 950 background24bit = undefined; 951 bold = false; 952 blink = false; 953 inverse = false; 954 } 955 resetAttributes(); 956 957 // On the event of a new line, reset <x>, and record a new value for <topOfScreen> or <y> depending on whether the bottom of the screen has already been reached. 958 function newLine() { 959 x = 1; 960 if (y === 26 - 1) { 961 ++topOfScreen; 962 } else { 963 ++y; 964 } 965 } 966 967 // Set a new position for <x> and <y>, bounded by the maxumum amount of <columns>, and rows, and the minimum amount, 1. 968 function setPos(newX, newY) { 969 x = Math.min(columns, Math.max(1, newX)); 970 y = Math.min(26, Math.max(1, newY)); 971 } 972 973 // Initialize <x>, <y>, and <topOfScreen>. 974 x = 1; 975 y = 1; 976 topOfScreen = 0; 977 978 // Reset variables which store the escape code string appended to whilst parsing <escapeCode>, and the variable which records if the parse is running in <escaped> mode. 979 escapeCode = ""; 980 escaped = false; 981 982 // If there is a sauce record... 983 if (file.sauce) { 984 if (file.sauce.tInfo1 > 0) { 985 columns = file.sauce.tInfo1; 986 } else { 987 columns = 80; 988 } 989 // If no-blink mode is set in the sauce flags, use it. Otherwise, default to <options.icecolors> setting. 990 icecolors = file.sauce.flags & 1 || options.icecolors; 991 // Override the letterspacing setting if defined in sauce 992 switch (file.sauce.letterSpacing) { 993 case 1: 994 options.bits = "8"; 995 break; 996 case 2: 997 options.bits = "9"; 998 break; 999 default: 1000 break; 1001 } 1002 // Override the font setting if defined in sauce 1003 switch (file.sauce.tInfoS) { 1004 case "IBM VGA": 1005 options.font = "80x25"; 1006 break; 1007 case "IBM VGA50": 1008 options.font = "80x50"; 1009 break; 1010 case "Amiga Topaz 1": 1011 options.font = "topaz500"; 1012 break; 1013 case "Amiga Topaz 1+": 1014 options.font = "topaz500+"; 1015 break; 1016 case "Amiga Topaz 2": 1017 options.font = "topaz"; 1018 break; 1019 case "Amiga Topaz 2+": 1020 options.font = "topaz+"; 1021 break; 1022 case "Amiga P0T-NOoDLE": 1023 options.font = "pot-noodle"; 1024 break; 1025 case "Amiga MicroKnight": 1026 options.font = "microknight"; 1027 break; 1028 case "Amiga MicroKnight+": 1029 options.font = "microknight+"; 1030 break; 1031 case "Amiga mOsOul": 1032 options.font = "mosoul"; 1033 break; 1034 } 1035 } else { 1036 // If "ced" mode has been invoked, set the <columns> to 78 character wide. Otherwise, use the default 80. 1037 if (options.mode === "ced") { 1038 columns = 78; 1039 } else { 1040 columns = 80; 1041 } 1042 // Set <icecolors> to whatever was chosen by the user, or set as the default by readBytes(). 1043 icecolors = options.icecolors; 1044 } 1045 1046 // Create the ScreenData() object at the required width. 1047 imageData = new ScreenData(columns); 1048 imageData.font = Font.preset(options.font, options); 1049 1050 // Choose the correct Palette constant, depending on whichever mode has been set. See Palette for more information. 1051 switch (options.bits) { 1052 case "ced": 1053 imageData.palette = Palette.CED; 1054 break; 1055 case "workbench": 1056 imageData.palette = Palette.WORKBENCH; 1057 break; 1058 default: 1059 imageData.palette = Palette.ANSI; 1060 } 1061 1062 // Returns an array of values found in <escapeCode>, seperated by ";". If there value is not a number, or missing, then the default value of 1 is used. 1063 function getValues() { 1064 return escapeCode.substr(1, escapeCode.length - 2).split(";").map(function (value) { 1065 var parsedValue; 1066 parsedValue = parseInt(value, 10); 1067 return isNaN(parsedValue) ? 1 : parsedValue; 1068 }); 1069 } 1070 1071 while (!file.eof()) { 1072 // Obtain the current character <code>. 1073 code = file.get(); 1074 if (escaped) { 1075 // If the routine is in <escaped> mode, add the <code> to the <escapeCode> string. 1076 escapeCode += String.fromCharCode(code); 1077 // If the code terminates the <escaped> mode... 1078 if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) { 1079 // ... set the mode to unescaped, and obtain the values in the escaped string. 1080 escaped = false; 1081 values = getValues(); 1082 // Check for a valid CSI code. 1083 if (escapeCode.charAt(0) === "[") { 1084 switch (escapeCode.charAt(escapeCode.length - 1)) { 1085 case "A": // Up cursor. 1086 y = Math.max(1, y - values[0]); 1087 break; 1088 case "B": // Down cursor. 1089 y = Math.min(26 - 1, y + values[0]); 1090 break; 1091 case "C": // Forward cursor. 1092 if (x === columns) { 1093 newLine(); 1094 } 1095 x = Math.min(columns, x + values[0]); 1096 break; 1097 case "D": // Backward cursor. 1098 x = Math.max(1, x - values[0]); 1099 break; 1100 case "H": // Set the cursor position by calling setPos(), first <y>, then <x>. 1101 if (values.length === 1) { 1102 setPos(1, values[0]); 1103 } else { 1104 setPos(values[1], values[0]); 1105 } 1106 break; 1107 case "J": // Clear screen. 1108 if (values[0] === 2) { 1109 x = 1; 1110 y = 1; 1111 imageData.reset(); 1112 } 1113 break; 1114 case "K": // Clear until the end of line. 1115 for (j = x - 1; j < columns; ++j) { 1116 imageData.set(j, y - 1 + topOfScreen, 0, false, 0, 0); 1117 } 1118 break; 1119 case "m": // Attributes, work through each code in turn. 1120 for (j = 0; j < values.length; ++j) { 1121 if (values[j] >= 30 && values[j] <= 37) { 1122 // Set the <foreground> color, points to a value in the <palette> array... 1123 foreground = values[j] - 30; 1124 if (foreground24bit) { 1125 foreground24bit = undefined; 1126 } 1127 } else if (values[j] >= 40 && values[j] <= 47) { 1128 // ... and for <background>, if the required value is used. 1129 background = values[j] - 40; 1130 if (background24bit) { 1131 background24bit = undefined; 1132 } 1133 } else { 1134 switch (values[j]) { 1135 case 0: // Reset attributes 1136 resetAttributes(); 1137 break; 1138 case 1: // Bold 1139 bold = true; 1140 if (foreground24bit) { 1141 foreground24bit = undefined; 1142 } 1143 break; 1144 case 5: // Blink 1145 blink = true; 1146 if (background24bit) { 1147 background24bit = undefined; 1148 } 1149 break; 1150 case 7: // Inverse 1151 inverse = true; 1152 break; 1153 case 22: // Bold off 1154 bold = false; 1155 break; 1156 case 25: // Blink off 1157 blink = false; 1158 break; 1159 case 27: // Inverse off 1160 inverse = false; 1161 break; 1162 } 1163 } 1164 } 1165 break; 1166 case "s": // Save the current <x> and <y> positions. 1167 savedX = x; 1168 savedY = y; 1169 break; 1170 case "t": // 24 bit ANSI 1171 if (values.length === 4) { 1172 switch (values[0]) { 1173 case 0: // Background 1174 background24bit = new Uint8Array([values[1], values[2], values[3]]); 1175 break; 1176 case 1: // Foreground 1177 foreground24bit = new Uint8Array([values[1], values[2], values[3]]); 1178 break; 1179 } 1180 } 1181 break; 1182 case "u": // Restore the current <x> and <y> positions. 1183 x = savedX; 1184 y = savedY; 1185 break; 1186 } 1187 } 1188 // Finally, reset the <escapeCode>. 1189 escapeCode = ""; 1190 } 1191 } else { 1192 // If not in <escaped> mode, treat <code> as a literal. 1193 switch (code) { 1194 case 10: // Lone linefeed (LF). 1195 newLine(); 1196 break; 1197 case 13: // Carriage Return, and Linefeed (CRLF) 1198 if (file.peek() === 0x0A) { 1199 file.read(1); 1200 newLine(); 1201 } 1202 break; 1203 case 26: // Ignore eof characters until the actual end-of-file, or sauce record has been reached. 1204 break; 1205 default: 1206 // Go in <escaped> mode if "Esc[" is seen. 1207 if (code === 27 && file.peek() === 0x5B) { 1208 escaped = true; 1209 } else { 1210 // If "ced" mod has been invoked, don't record any additional attribute data. 1211 if (options.mode === "ced") { 1212 imageData.set(x - 1, y - 1 + topOfScreen, code, false, 1, 0); 1213 } else { 1214 // In <inverse> mode, or not, set the character <code> and attribute data to the <imageData> object, according to the current <foreground>, <background>, <icecolors>, <bold>, and <blink> setting. 1215 if (inverse) { 1216 drawForeground = background; 1217 drawBackground = foreground; 1218 } else { 1219 drawForeground = foreground; 1220 drawBackground = background; 1221 } 1222 if (bold) { 1223 drawForeground += 8; 1224 } 1225 if (blink && icecolors && !background24bit) { 1226 drawBackground += 8; 1227 } 1228 if (foreground24bit || background24bit) { 1229 imageData.set(x - 1, y - 1 + topOfScreen, code, true, foreground24bit || imageData.palette[drawForeground], background24bit || imageData.palette[drawBackground]); 1230 } else { 1231 imageData.set(x - 1, y - 1 + topOfScreen, code, false, drawForeground, drawBackground); 1232 } 1233 } 1234 // If the end of row has been reached, start a new line. 1235 if (++x === columns + 1) { 1236 newLine(); 1237 } 1238 } 1239 } 1240 } 1241 } 1242 1243 // Returns an object usable by display() to convert into an RGBA array. 1244 return { 1245 "imageData": imageData, 1246 "sauce": file.sauce // SAUCE record. 1247 }; 1248 } 1249 1250 // A function to parse a sequence of bytes representing an ASCII plain-text file. 1251 function asc(bytes, options) { 1252 var file, imageData, code, x, y; 1253 1254 // Create a new <file> object, based on <bytes>, and create an <imageData> representation of the screen. 1255 file = new File(bytes); 1256 imageData = new ScreenData(80); 1257 imageData.font = Font.preset(options.font, options); 1258 imageData.palette = Palette.ASC_PC; 1259 1260 // Initialize the cursor position by setting <x> and <y>. 1261 x = 0; 1262 y = 0; 1263 1264 while (!file.eof()) { 1265 // Get the character <code> 1266 code = file.get(); 1267 // If we see a carriage return then line feed (CRLF), start a new line. 1268 if (code === 13 && file.peek() === 10) { 1269 file.read(1); 1270 ++y; 1271 x = 0; 1272 } else if (code === 10) { // A lone line feed (LF) also starts a new line. 1273 ++y; 1274 x = 0; 1275 } else { 1276 // For a literal, record the character code at the <x> and <y>. 1277 imageData.set(x, y, code, false, 1, 0); 1278 // Start a new line when columns is reached. 1279 if (++x === 80) { 1280 ++y; 1281 x = 0; 1282 } 1283 } 1284 } 1285 1286 // Returns an object usable by display() to convert into an RGBA array. 1287 return { 1288 "imageData": imageData, 1289 "sauce": file.sauce // SAUCE record. 1290 }; 1291 } 1292 1293 // A function to parse a sequence of bytes representing a raw display dump. 1294 function bin(bytes, options) { 1295 var file, imageData, i, icecolors; 1296 1297 // Create a new <file> object, based on <bytes>, and create an <imageData> representation of the screen. 1298 file = new File(bytes); 1299 1300 imageData = new ScreenData(options.columns); 1301 imageData.font = Font.preset(options.font, options); 1302 imageData.palette = Palette.BIN; 1303 1304 // Raw Imagedata. 1305 imageData.raw(file.read()); 1306 1307 // If there is sauce record, look for an <icecolors> setting in flags, use the user-defined or default setting if not. 1308 if (file.sauce) { 1309 icecolors = file.sauce.flags & 1 || options.icecolors; 1310 // Override the letterspacing setting if defined in sauce 1311 switch (file.sauce.letterSpacing) { 1312 case 1: 1313 options.bits = "8"; 1314 break; 1315 case 2: 1316 options.bits = "9"; 1317 break; 1318 default: 1319 break; 1320 } 1321 // Override the letterspacing setting if defined in sauce 1322 switch (file.sauce.letterSpacing) { 1323 case 1: 1324 options.bits = "8"; 1325 break; 1326 case 2: 1327 options.bits = "9"; 1328 break; 1329 default: 1330 break; 1331 } 1332 // Override the font setting if defined in sauce 1333 switch (file.sauce.tInfoS) { 1334 case "IBM VGA": 1335 options.font = "80x25"; 1336 break; 1337 case "IBM VGA50": 1338 options.font = "80x50"; 1339 break; 1340 case "Amiga Topaz 1": 1341 options.font = "topaz500"; 1342 break; 1343 case "Amiga Topaz 1+": 1344 options.font = "topaz500+"; 1345 break; 1346 case "Amiga Topaz 2": 1347 options.font = "topaz"; 1348 break; 1349 case "Amiga Topaz 2+": 1350 options.font = "topaz+"; 1351 break; 1352 case "Amiga P0T-NOoDLE": 1353 options.font = "pot-noodle"; 1354 break; 1355 case "Amiga MicroKnight": 1356 options.font = "microknight"; 1357 break; 1358 case "Amiga MicroKnight+": 1359 options.font = "microknight+"; 1360 break; 1361 case "Amiga mOsOul": 1362 options.font = "mosoul"; 1363 break; 1364 } 1365 } else { 1366 icecolors = options.icecolors; 1367 } 1368 1369 // If <icecolors> is turned off, make sure the attribute data is corrected to remove the background bright bit. 1370 if (!icecolors) { 1371 for (i = 1; i < imageData.length; i += 2) { 1372 imageData[i] = imageData[i] & 127; 1373 } 1374 } 1375 1376 // Returns an object usable by display() to convert into an RGBA array. 1377 return { 1378 "imageData": imageData, 1379 "sauce": file.sauce // SAUCE record. 1380 }; 1381 } 1382 1383 // A function to parse a sequence of bytes representing an iCE Draw file format. 1384 function idf(bytes, options) { 1385 var file, columns, imageData, c, loop, ch, attr, x, y; 1386 1387 // Convert the bytes to a File() object. 1388 file = new File(bytes); 1389 1390 // Seek to the column setting, and store. 1391 file.seek(8); 1392 columns = file.get16() + 1; 1393 1394 // Create the <screenData> based on the column width. 1395 imageData = new ScreenData(columns); 1396 1397 // Seek to the raw image data, and decode based on a run length encoding method. 1398 file.seek(12); 1399 1400 x = 0; 1401 y = 0; 1402 while (file.getPos() < file.size - 4144) { 1403 c = file.get16(); 1404 if (c === 1) { 1405 loop = file.get(); 1406 file.get(); 1407 ch = file.get(); 1408 attr = file.get(); 1409 while (loop-- > 0) { 1410 imageData.set(x++, y, ch, false, attr & 15, attr >> 4); 1411 if (x === columns) { 1412 x = 0; 1413 ++y; 1414 } 1415 } 1416 } else { 1417 imageData.set(x++, y, c & 255, false, (c >> 8) & 15, c >> 12); 1418 if (x === columns) { 1419 x = 0; 1420 ++y; 1421 } 1422 } 1423 } 1424 1425 // Decode the font and palette data. 1426 imageData.font = Font.font8x16x256(file, options); 1427 imageData.palette = Palette.triplets16(file); 1428 1429 return { 1430 "imageData": imageData, 1431 "sauce": file.sauce // The SAUCE record. 1432 }; 1433 } 1434 1435 // A function to parse a sequence of bytes representing PCBoard file format. 1436 function pcb(bytes, options) { 1437 var file, loop, charCode, bg, fg, icecolors, x, y, imageData; 1438 1439 // Convert bytes into a File() object, only for the convenience of later extracting the sauce record. 1440 file = new File(bytes); 1441 imageData = new ScreenData(80); 1442 imageData.font = Font.preset(options.font, options); 1443 imageData.palette = Palette.BIN; 1444 1445 // Reset all colour attributes, <bg> and <fg> and cursor positions, <x> and <y>. 1446 bg = 0; 1447 fg = 7; 1448 x = 0; 1449 y = 0; 1450 1451 // Set <icecolors> depending on the setting of flags in the sauce record 1452 if (file.sauce) { 1453 icecolors = file.sauce.flags & 1 || options.icecolors; 1454 } else { 1455 icecolors = options.icecolors; 1456 } 1457 1458 // Convenient function, to insert the current character code, <charCode>, with foreground and background attributes, <fg> and <bg>, at the current cursor position, <x> and <y>. 1459 function printChar() { 1460 imageData.set(x, y, charCode, false, fg, bg); 1461 if (++x === 80) { 1462 y++; 1463 x = 0; 1464 } 1465 } 1466 1467 // Start the image data decoding loop 1468 loop = 0; 1469 while (loop < file.size) { 1470 // <charCode>, the current character under inspection. 1471 charCode = bytes[loop]; 1472 1473 // Exit if we encounter an EOF character. 1474 if (charCode === 26) { 1475 break; 1476 } 1477 1478 switch (charCode) { 1479 case 13: // Ignore Carriage Returns <CR> 1480 break; 1481 case 10: // Linefeed character (LF), start a new line. 1482 y++; 1483 x = 0; 1484 break; 1485 case 9: // Horizontal tabs, add spaces. 1486 x += 8; 1487 break; 1488 case 64: // If we have a control code... 1489 // ... look ahead to see if it for and attribute change... 1490 if (bytes[loop + 1] === 88) { 1491 bg = bytes[loop + 2] - ((bytes[loop + 2] >= 65) ? 55 : 48); 1492 if (!icecolors && bg > 7) { 1493 bg -= 8; 1494 } 1495 fg = bytes[loop + 3] - ((bytes[loop + 3] >= 65) ? 55 : 48); 1496 loop += 3; 1497 // ... or to clear the screen... 1498 } else if (bytes[loop + 1] === 67 && bytes[loop + 2] === 76 && bytes[loop + 3] === 83) { 1499 x = y = 0; 1500 imageData.reset(); 1501 loop += 4; 1502 // ... or to set the cursor position. 1503 } else if (bytes[loop + 1] === 80 && bytes[loop + 2] === 79 && bytes[loop + 3] === 83 && bytes[loop + 4] === 58) { 1504 if (bytes[loop + 6] === 64) { 1505 x = ((bytes[loop + 5]) - 48) - 1; 1506 loop += 5; 1507 } else { 1508 x = (10 * ((bytes[loop + 5]) - 48) + (bytes[loop + 6]) - 48) - 1; 1509 loop += 6; 1510 } 1511 // Otherwise, treat the control code as a literal. 1512 } else { 1513 printChar(); 1514 } 1515 break; 1516 default: // Handle a literal character. 1517 printChar(); 1518 } 1519 loop++; 1520 } 1521 1522 return { 1523 "imageData": imageData, 1524 "sauce": file.sauce // The sauce record. 1525 }; 1526 } 1527 1528 // A function to parse a sequence of bytes representing a Tundra file format. 1529 function tnd(bytes, options) { 1530 var file, x, y, imageData, charCode, fg, bg; 1531 1532 // Routine to retrieve a 32-bit unsigned integer from a <file object> 1533 function get32(file) { 1534 var value; 1535 value = file.get() << 24; 1536 value += file.get() << 16; 1537 value += file.get() << 8; 1538 return value + file.get(); 1539 } 1540 1541 // Convert the bytes into a File() object; 1542 file = new File(bytes); 1543 1544 // THrow an error if the magic number in the header isn't seen. 1545 if (file.get() !== 24) { 1546 throw "File ID does not match."; 1547 } 1548 if (file.getS(8) !== "TUNDRA24") { 1549 throw "File ID does not match."; 1550 } 1551 1552 // Since Tundra files use 24-bit palettes, setup the foreground and background variables, <fg> and <bg>, as RGB arrays, and initialize the cursor positions. 1553 fg = new Uint8Array(3); 1554 bg = new Uint8Array(3); 1555 x = 0; 1556 y = 0; 1557 1558 // Create the <imageData> object, as a 24-bit version. 1559 imageData = new ScreenData(80); 1560 imageData.font = Font.preset(options.font, options); 1561 imageData.palette = Palette.ANSI; 1562 1563 while (!file.eof()) { 1564 // Start a newline if the current <x> position exceeds the column width. 1565 if (x === 80) { 1566 x = 0; 1567 ++y; 1568 } 1569 // Fetch the next character for inspection. 1570 charCode = file.get(); 1571 // Cursor positioning code. 1572 if (charCode === 1) { 1573 y = get32(file); 1574 x = get32(file); 1575 } 1576 // Foreground attribute code. 1577 if (charCode === 2) { 1578 charCode = file.get(); 1579 file.get(); 1580 fg.set(file.read(3), 0); 1581 } 1582 // Background attribute code. 1583 if (charCode === 4) { 1584 charCode = file.get(); 1585 file.get(); 1586 bg.set(file.read(3), 0); 1587 } 1588 // Both foreground and background setting code. 1589 if (charCode === 6) { 1590 charCode = file.get(); 1591 file.get(); 1592 fg.set(file.read(3), 0); 1593 file.get(); 1594 bg.set(file.read(3), 0); 1595 } 1596 // In case we see a literal, print it (<charCode>), with the current foreground and background attributes, <fg> and <bg>. 1597 if (charCode !== 1 && charCode !== 2 && charCode !== 4 && charCode !== 6) { 1598 imageData.set(x, y, charCode, true, fg, bg); 1599 ++x; 1600 } 1601 } 1602 1603 return { 1604 "imageData": imageData, 1605 "sauce": file.sauce // The sauce record. 1606 }; 1607 } 1608 1609 // A function to parse a sequence of bytes representing an XBiN file format. 1610 function xb(bytes, options) { 1611 var file, header, imageData; 1612 1613 // This function is called to parse the XBin header. 1614 function XBinHeader(file) { 1615 var flags; 1616 1617 // Look for the magic number, throw an error if not found. 1618 if (file.getS(4) !== "XBIN") { 1619 throw "File ID does not match."; 1620 } 1621 if (file.get() !== 26) { 1622 throw "File ID does not match."; 1623 } 1624 1625 // Get the dimensions of the image... 1626 this.width = file.get16(); 1627 this.height = file.get16(); 1628 1629 // ... and the height of the font, if included. 1630 this.fontHeight = file.get(); 1631 1632 // Sanity check for the font height, throw an error if failed. 1633 if (this.fontHeight === 0 || this.fontHeight > 32) { 1634 throw "Illegal value for the font height (" + this.fontHeight + ")."; 1635 } 1636 1637 // Retrieve the flags. 1638 flags = file.get(); 1639 1640 // Check to see if a palette and font is included. 1641 this.palette = ((flags & 1) === 1); 1642 this.font = ((flags & 2) === 2); 1643 1644 // Sanity check for conflicting information in font settings. 1645 if (this.fontHeight !== 16 && !this.font) { 1646 throw "A non-standard font size was defined, but no font information was included with the file."; 1647 } 1648 1649 // Check to see if the image data is <compressed>, if non-blink mode is set, <nonBlink>, and if 512 characters are included with the font data. <char512>. 1650 this.compressed = ((flags & 4) === 4); 1651 this.nonBlink = ((flags & 8) === 8); 1652 this.char512 = ((flags & 16) === 16); 1653 } 1654 1655 // Routine to decompress data found in an XBin <file>, which contains a Run-Length encoding scheme. Needs to know the current <width> and <height> of the image. 1656 function uncompress(file, width, height) { 1657 var uncompressed, p, i, j, repeatAttr, repeatChar, count; 1658 // Initialize the data used to store the image, each text character has two bytes, one for the character code, and the other for the attribute. 1659 uncompressed = new Uint8Array(width * height * 2); 1660 i = 0; 1661 while (i < uncompressed.length) { 1662 p = file.get(); // <p>, the current code under inspection. 1663 count = p & 63; // <count>, the times data is repeated 1664 switch (p >> 6) { // Look at which RLE scheme to use 1665 case 1: // Handle repeated character code. 1666 for (repeatChar = file.get(), j = 0; j <= count; ++j) { 1667 uncompressed[i++] = repeatChar; 1668 uncompressed[i++] = file.get(); 1669 } 1670 break; 1671 case 2: // Handle repeated attributes. 1672 for (repeatAttr = file.get(), j = 0; j <= count; ++j) { 1673 uncompressed[i++] = file.get(); 1674 uncompressed[i++] = repeatAttr; 1675 } 1676 break; 1677 case 3: // Handle repeated character code and attributes. 1678 for (repeatChar = file.get(), repeatAttr = file.get(), j = 0; j <= count; ++j) { 1679 uncompressed[i++] = repeatChar; 1680 uncompressed[i++] = repeatAttr; 1681 } 1682 break; 1683 default: // Handle no RLE. 1684 for (j = 0; j <= count; ++j) { 1685 uncompressed[i++] = file.get(); 1686 uncompressed[i++] = file.get(); 1687 } 1688 } 1689 } 1690 return uncompressed; // Return the final, <uncompressed> data. 1691 } 1692 1693 // Convert the bytes to a File() object, and reader the settings in the header, by calling XBinHeader(). 1694 file = new File(bytes); 1695 header = new XBinHeader(file); 1696 1697 // Fetch the image data, and uncompress if necessary. 1698 imageData = new ScreenData(header.width); 1699 1700 // If palette information is included, read it immediately after the header, if not, use the default palette used for BIN files. 1701 imageData.palette = header.palette ? Palette.triplets16(file) : Palette.BIN; 1702 // If font information is included, read it, if not, use the default 80x25 font. 1703 imageData.font = header.font ? Font.xbin(file, header.fontHeight, options) : Font.preset("80x25", options); 1704 1705 if (header.compressed) { 1706 imageData.raw(uncompress(file, header.width, header.height)); 1707 } else { 1708 imageData.raw(file.read(header.width * header.height * 2)); 1709 } 1710 1711 return { 1712 "imageData": imageData, 1713 "sauce": file.sauce // The sauce record. 1714 }; 1715 } 1716 1717 // Parses an array of <bytes>, which represent a file, and calls <callback> when the image has been generated successfully, <splitRows> is set to a value greater than 0 if the image is to be split over multiple images, defined by an amount of rows. And <options> is key-pair list of options supplied by the user. 1718 function readBytes(bytes, callback, splitRows, options) { 1719 var data, returnArray, start, displayData; 1720 1721 // Validate the options given by the user. 1722 options = validateOptions(options); 1723 1724 // Choose which parser to use, based on the setting defined in <options.filetype>. 1725 switch (options.filetype) { 1726 case "txt": 1727 // For plain-text files, use the ascii parser, and use the default, or user-defined font. 1728 data = asc(bytes, options); 1729 break; 1730 case "ion": 1731 // For diz files, use the ascii parser, and use the default, or user-defined font. Also, trim the extra columns. 1732 data = asc(bytes, options); 1733 data.imageData.trimColumns(); 1734 break; 1735 case "adf": 1736 // For Artworx files, use the adf parser. Font is already defined in the file. 1737 data = adf(bytes, options); 1738 break; 1739 case "bin": 1740 // For raw-dump files, use the bin parser, and use the default, or user-defined font. 1741 data = bin(bytes, options); 1742 break; 1743 case "idf": 1744 // For iCE draw files, use the idf parser. Font is already defined in the file. 1745 data = idf(bytes, options); 1746 break; 1747 case "pcb": 1748 // For PCBoard files, use the pcb parser, and use the default, or user-defined font. 1749 data = pcb(bytes, options); 1750 break; 1751 case "tnd": 1752 // For Tundra files, use the tnd parser, and use the default, or user-defined font. 1753 data = tnd(bytes, options); 1754 break; 1755 case "xb": 1756 // For XBin files, use the xb parser. Font is already set in the parser. 1757 data = xb(bytes, options); 1758 break; 1759 case "diz": 1760 data = ans(bytes, options); 1761 data.imageData.trimColumns(); 1762 break; 1763 default: 1764 // For unrecognised filetypes, use the ANSI parser. 1765 data = ans(bytes, options); 1766 } 1767 1768 // If the splitRows value is set.. 1769 if (splitRows > 0) { 1770 // .. intialize an array used to store the multiple images, and calculate the byte-length of each image. 1771 returnArray = []; 1772 for (start = 0; start < data.imageData.rows; start += splitRows) { 1773 // Call display with each "chunk" of data. 1774 displayData = display(data.imageData, start, splitRows, options); 1775 // Push the either raw image data or a canvas of each image into the array, according to the <options.imagedata> setting... 1776 returnArray.push(options.imagedata ? displayData : displayDataToCanvas(displayData)); 1777 } 1778 // ... and return it. 1779 callback(returnArray, data.sauce); 1780 } else { 1781 // For a single image, send the data to display()... 1782 displayData = display(data.imageData, 0, data.imageData.rows, options); 1783 // ... and call callback() with either the raw data, or a canvas element, depending on the <options.imagedata> setting. 1784 callback(options.imagedata ? displayData : displayDataToCanvas(displayData), data.sauce); 1785 } 1786 } 1787 1788 // A single entrypoint for the Parser. 1789 return { 1790 "readBytes": readBytes 1791 }; 1792 }()); 1793 1794 // Parses an array of <bytes>, calls <callback> upon success. Uses <options> supplied by the user, and calls <callbackFail>, when supplied, if an error is caught. 1795 function renderBytes(bytes, callback, options, callbackFail) { 1796 // Catch any errors. 1797 try { 1798 // call readBytes(), with 0 as the splitRows option, and create an empty object if options, is missing. 1799 Parser.readBytes(bytes, callback, 0, options); 1800 } catch (e) { 1801 if (callbackFail) { 1802 // If an error is caught, call callbackFail()... 1803 callbackFail(e); 1804 } else { 1805 // ... otherwise, just throw it back. 1806 throw e; 1807 } 1808 } 1809 } 1810 1811 // Same as renderBytes(), but this fetches a <url> by calling httpGet(), instead of supplying raw bytes. 1812 function render(url, callback, options, callbackFail) { 1813 // Call httpGet() with the supplied <url>. 1814 httpGet(url, function (bytes) { 1815 // Create a blank <options> object, if one wasn't supplied. 1816 options = options || {}; 1817 // Set the filetype option, based on the url, if one wasn't already set in <options>. 1818 if (!options.filetype) { 1819 options.filetype = url.split(".").pop().toLowerCase(); 1820 } 1821 // Call the version of this function for <bytes>, with the Uint8Array data returned with httpGet(). 1822 renderBytes(bytes, callback, options, callbackFail); 1823 // Pass <callbackFail> to httpGet(), in case the network request fails. 1824 }, callbackFail); 1825 } 1826 1827 // Parses an array of <bytes>, calls <callback> upon success. Uses <options> supplied by the user, and calls <callbackFail>, when supplied, if an error is caught. Multiple images are produced, based on the <splitRows> setting, divided by the amount of rows specified. 1828 function splitRenderBytes(bytes, callback, splitRows, options, callbackFail) { 1829 // Catch any errors. 1830 try { 1831 // call readBytes(), with 27 as the default splitRows option, and create an empty object if options, is missing. 1832 Parser.readBytes(bytes, callback, splitRows || 27, options); 1833 } catch (e) { 1834 if (callbackFail) { 1835 // If an error is caught, call callbackFail()... 1836 callbackFail(e); 1837 } else { 1838 // ... otherwise, just throw it back. 1839 throw e; 1840 } 1841 } 1842 } 1843 1844 // Same as splitRenderBytes(), but this fetches a <url> by calling httpGet(), instead of supplying raw bytes. 1845 function splitRender(url, callback, splitRows, options, callbackFail) { 1846 // Call httpGet() with the supplied <url>. 1847 httpGet(url, function (bytes) { 1848 // Create a blank <options> object, if one wasn't supplied. 1849 options = options || {}; 1850 // Set the filetype option, based on the url, if one wasn't already set in <options>. 1851 if (!options.filetype) { 1852 options.filetype = url.split(".").pop().toLowerCase(); 1853 } 1854 // Call the version of this function for <bytes>, with the Uint8Array data returned with httpGet(). 1855 splitRenderBytes(bytes, callback, splitRows, options, callbackFail); 1856 // Pass <callbackFail> to httpGet(), in case the network request fails. 1857 }, callbackFail); 1858 } 1859 1860 // Receives a sequence of <bytes>, representing an ANSI file, with <options> supplied by the user and returns an Ansimation object which can be used to display and control an animation. 1861 function Ansimation(bytes, options) { 1862 var timer, interval, file, font, palette, columns, rows, canvas, ctx, blinkCanvas, buffer, bufferCtx, blinkCtx, escaped, escapeCode, j, code, values, x, y, savedX, savedY, foreground, background, foreground24bit, background24bit, drawForeground, drawBackground, bold, inverse, blink, fontImageData; 1863 1864 // Convert bytes to a File() object. 1865 file = new File(bytes); 1866 1867 options = validateOptions(options); 1868 1869 switch (options.bits) { 1870 case "ced": 1871 palette = Palette.CED; 1872 break; 1873 case "workbench": 1874 palette = Palette.WORKBENCH; 1875 break; 1876 default: 1877 palette = Palette.ANSI; 1878 } 1879 1880 // If the <columns> setting in the SAUCE record is set, use it. 1881 if (file.sauce && file.sauce.tInfo1 > 0) { 1882 columns = file.sauce.tInfo1; 1883 } else if (options.mode === "ced") { 1884 columns = 78; 1885 } else { 1886 columns = 80; 1887 } 1888 1889 // Set the amount of <columns> is set in <options>, use it. 1890 columns = options.columns || columns; 1891 1892 // Set the amount of <rows> is set in <options>, use it. 1893 rows = options.rows || 26; 1894 1895 // Use the <font> set in <options>, if found in presets, otherwise use the default "80x25". 1896 font = Font.has(options.font) ? Font.preset(options.font, options) : Font.preset("80x25", options); 1897 1898 // Initialize the canvas used to display the animation, obtain the context, and create the temporary variable <fontImageData> to store the font image-data when rendered. 1899 canvas = createCanvas(columns * font.width, rows * font.height); 1900 1901 // Deal with pixel ratio for retina-type displays. 1902 if (options["2x"]) { 1903 canvas.style.width = (canvas.width / 2) + "px"; 1904 canvas.style.height = (canvas.height / 2) + "px"; 1905 } 1906 1907 ctx = canvas.getContext("2d"); 1908 fontImageData = ctx.createImageData(font.width, font.height); 1909 1910 // <blinkCanvas> is used to record the blinking "on" and "off" on two seperate images, which are then composited onto the main <canvas> alternately. 1911 blinkCanvas = [createCanvas(canvas.width, canvas.height), createCanvas(canvas.width, canvas.height)]; 1912 buffer = createCanvas(canvas.width, canvas.height); 1913 blinkCtx = blinkCanvas.map(function (canvas) { 1914 return canvas.getContext("2d"); 1915 }); 1916 bufferCtx = buffer.getContext("2d"); 1917 1918 // Reset all the text attributes set by ANSI control codes. 1919 function resetAttributes() { 1920 foreground = 7; 1921 background = 0; 1922 foreground24bit = undefined; 1923 background24bit = undefined; 1924 bold = false; 1925 blink = false; 1926 inverse = false; 1927 } 1928 1929 // Clear all the screen data, on all canvases, including the <blinkCanvas> array. 1930 function clearScreen(sx, sy, width, height) { 1931 ctx.fillStyle = "rgb(" + palette[0][0] + ", " + palette[0][1] + ", " + palette[0][2] + ")"; 1932 ctx.fillRect(sx, sy, width, height); 1933 blinkCtx[0].clearRect(sx, sy, width, height); 1934 blinkCtx[1].clearRect(sx, sy, width, height); 1935 } 1936 1937 // Clear the text characters held on the <blinkCanvas> array, used when a character is drawn which isn't set to blink. 1938 function clearBlinkChar(charX, charY) { 1939 var sx, sy; 1940 sx = charX * font.width; 1941 sy = charY * font.height; 1942 blinkCtx[0].clearRect(sx, sy, font.width, font.height); 1943 blinkCtx[1].clearRect(sx, sy, font.width, font.height); 1944 } 1945 1946 // Perform a newline operation, if the <y> amount is at the very bottom of the screen, then all canvas elements are shifted up a single line. 1947 function newLine() { 1948 x = 1; 1949 if (y === rows - 1) { 1950 ctx.drawImage(canvas, 0, font.height, canvas.width, canvas.height - font.height * 2, 0, 0, canvas.width, canvas.height - font.height * 2); 1951 bufferCtx.clearRect(0, 0, canvas.width, canvas.height); 1952 bufferCtx.drawImage(blinkCanvas[0], 0, font.height, canvas.width, canvas.height - font.height * 2, 0, 0, canvas.width, canvas.height - font.height * 2); 1953 blinkCtx[0].clearRect(0, 0, canvas.width, canvas.height); 1954 blinkCtx[0].drawImage(buffer, 0, 0); 1955 bufferCtx.clearRect(0, 0, canvas.width, canvas.height); 1956 bufferCtx.drawImage(blinkCanvas[1], 0, font.height, canvas.width, canvas.height - font.height * 2, 0, 0, canvas.width, canvas.height - font.height * 2); 1957 blinkCtx[1].clearRect(0, 0, canvas.width, canvas.height); 1958 blinkCtx[1].drawImage(buffer, 0, 0); 1959 clearScreen(0, canvas.height - font.height * 2, canvas.width, font.height); 1960 return true; 1961 } 1962 ++y; 1963 return false; 1964 } 1965 1966 // Sets the cursor position, <x> and <y>, according to new values. Performs a validation to make sure it remains in the boundries of the canvas. 1967 function setPos(newX, newY) { 1968 x = Math.min(columns, Math.max(1, newX)); 1969 y = Math.min(rows, Math.max(1, newY)); 1970 } 1971 1972 // Resets all the settings, used upon initialization, and to restore after an animation is restarted. 1973 function resetAll() { 1974 clearScreen(0, 0, canvas.width, canvas.height); 1975 resetAttributes(); 1976 setPos(1, 1); 1977 escapeCode = ""; 1978 escaped = false; 1979 file.seek(0); 1980 } 1981 1982 resetAll(); 1983 1984 // Obtains all the values currently stores in an <escapeCode> string. If one of the values cannot be parsed by parseInt(), or is missing, then the default value of 1 is used. 1985 function getValues() { 1986 return escapeCode.substr(1, escapeCode.length - 2).split(";").map(function (value) { 1987 var parsedValue; 1988 parsedValue = parseInt(value, 10); 1989 return isNaN(parsedValue) ? 1 : parsedValue; 1990 }); 1991 } 1992 1993 // Reads a certain amount of bytes, <num>, from the <file> object. 1994 function read(num) { 1995 var i; 1996 for (i = 0; i < num; ++i) { 1997 // Break out of the loop if the end of file has been reached. 1998 if (file.eof()) { 1999 break; 2000 } 2001 // Store the current character fro inspection in <code>. 2002 code = file.get(); 2003 if (escaped) { 2004 // If the <escaped> mode is set, add the code to <escapeCode> string. 2005 escapeCode += String.fromCharCode(code); 2006 // If the character ends the <escapeCode> string... 2007 if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) { 2008 // Turn <escaped> mode off, and obtain the values in the <escapeCode> string. 2009 escaped = false; 2010 values = getValues(); 2011 // For ANSI control codes. 2012 if (escapeCode.charAt(0) === "[") { 2013 switch (escapeCode.charAt(escapeCode.length - 1)) { 2014 case "A": // Cursor up. 2015 y = Math.max(1, y - values[0]); 2016 break; 2017 case "B": // Cursor down. 2018 y = Math.min(rows - 1, y + values[0]); 2019 break; 2020 case "C": // Cursor right, creating a newline if necessary. 2021 if (x === columns) { 2022 if (newLine()) { 2023 // Break out of the loop if the canvas has been shifted up, this causes the screen to be updated after breaking out of the loop to create the effect of smooth scrolling. 2024 return i + 1; 2025 } 2026 } 2027 x = Math.min(columns, x + values[0]); 2028 break; 2029 case "D": // Cursor Up. 2030 x = Math.max(1, x - values[0]); 2031 break; 2032 case "H": // Set the cursor position, default value of 1 for <x> if missing. 2033 if (values.length === 1) { 2034 setPos(1, Math.min(values[0])); 2035 } else { 2036 setPos(values[1], values[0]); 2037 } 2038 break; 2039 case "J": // Clear screen, if allowed in <options["2J"]> 2040 if (options["2J"] && values[0] === 2) { 2041 x = 1; 2042 y = 1; 2043 clearScreen(0, 0, canvas.width, canvas.height); 2044 } 2045 break; 2046 case "K": // Clear to the end of line. 2047 clearScreen((x - 1) * font.width, (y - 1) * font.height, canvas.width - (x - 1) * font.width, font.height); 2048 break; 2049 case "m": // Attribute setting codes. 2050 for (j = 0; j < values.length; ++j) { 2051 if (values[j] >= 30 && values[j] <= 37) { 2052 // Set the foreground colour. 2053 foreground = values[j] - 30; 2054 if (foreground24bit) { 2055 foreground24bit = undefined; 2056 } 2057 } else if (values[j] >= 40 && values[j] <= 47) { 2058 // Set the background colour. 2059 background = values[j] - 40; 2060 if (background24bit) { 2061 background24bit = undefined; 2062 } 2063 } else { 2064 switch (values[j]) { 2065 case 0: // Reset attributes. 2066 resetAttributes(); 2067 break; 2068 case 1: // Bold on. 2069 bold = true; 2070 if (foreground24bit) { 2071 foreground24bit = undefined; 2072 } 2073 break; 2074 case 5: // Blink on. 2075 blink = true; 2076 break; 2077 case 7: // Inverse on. 2078 inverse = true; 2079 break; 2080 case 22: // Bold off. 2081 bold = false; 2082 break; 2083 case 25: // Blink off. 2084 blink = false; 2085 break; 2086 case 27: // Inverse off. 2087 inverse = false; 2088 break; 2089 } 2090 } 2091 } 2092 break; 2093 case "s": // Store the current cursor position. 2094 savedX = x; 2095 savedY = y; 2096 break; 2097 case "t": // 24 bit ANSI 2098 if (values.length === 4) { 2099 switch (values[0]) { 2100 case 0: // Background 2101 background24bit = new Uint8Array([values[1], values[2], values[3], 255]); 2102 break; 2103 case 1: // Foreground 2104 foreground24bit = new Uint8Array([values[1], values[2], values[3], 255]); 2105 break; 2106 } 2107 } 2108 break; 2109 case "u": // Restore the saved cursor position. 2110 if (savedX !== undefined && savedY !== undefined) { 2111 x = savedX; 2112 y = savedY; 2113 } 2114 break; 2115 } 2116 } 2117 escapeCode = ""; 2118 } 2119 } else { 2120 switch (code) { 2121 case 10: // For a lone line feed (LF), start a new line. 2122 // Break out of the loop if the canvas has been shifted up, this causes the screen to be updated after breaking out of the loop to create the effect of smooth scrolling. 2123 if (newLine()) { 2124 // Return how many characters were interpreted. 2125 return i + 1; 2126 } 2127 break; 2128 case 13: 2129 // If a carriage return and line feed are seen together (CRLF), treat as a newline. 2130 if (file.peek() === 0x0A) { 2131 file.read(1); 2132 // Break out of the loop if the canvas has been shifted up, this causes the screen to be updated after breaking out of the loop to create the effect of smooth scrolling. 2133 if (newLine()) { 2134 // Return how many characters were interpreted. 2135 return i + 1; 2136 } 2137 } 2138 break; 2139 case 26: // Ignore eof characters. 2140 break; 2141 default: // Deal with literals 2142 // If an ANSI control code is seen, go into <escaped> mode. 2143 if (code === 27 && file.peek() === 0x5B) { 2144 escaped = true; 2145 } else { 2146 // Swap colours is <inverse> is set, otherwise, do not. 2147 if (inverse) { 2148 drawForeground = background; 2149 drawBackground = foreground; 2150 } else { 2151 drawForeground = foreground; 2152 drawBackground = background; 2153 } 2154 // Shift the colours is <bold> is set, observing the current <options.icecolors> setting. 2155 if (bold) { 2156 drawForeground += 8; 2157 } 2158 if (blink && options.icecolors && !background24bit) { 2159 drawBackground += 8; 2160 } 2161 // Obtain the <fontImageData> by calling font.getData(). 2162 if (foreground24bit || background24bit) { 2163 fontImageData.data.set(font.get24BitData(code, foreground24bit || palette[drawForeground], background24bit || palette[drawBackground]), 0); 2164 } else { 2165 fontImageData.data.set(font.getData(code, palette, drawForeground, drawBackground), 0); 2166 } 2167 // Draw the image to the canvas. 2168 ctx.putImageData(fontImageData, (x - 1) * font.width, (y - 1) * font.height, 0, 0, font.width, font.height); 2169 if (!options.icecolors && !background24bit) { 2170 // Update the blink canvas elements, by drawing both versions of the blinking data to the <blinkCanvas> array, or if <blink> is not set, clear whatever may already be drawn to these elements. 2171 if (blink) { 2172 blinkCtx[0].putImageData(fontImageData, (x - 1) * font.width, (y - 1) * font.height, 0, 0, font.width, font.height); 2173 fontImageData.data.set(font.getData(code, palette, drawBackground, drawBackground), 0); 2174 blinkCtx[1].putImageData(fontImageData, (x - 1) * font.width, (y - 1) * font.height, 0, 0, font.width, font.height); 2175 } else { 2176 clearBlinkChar(x - 1, y - 1); 2177 } 2178 } 2179 // Start a new line if the <columns> boundry has been reached. 2180 if (++x === columns + 1) { 2181 // Break out of the loop if the canvas has been shifted up, this causes the screen to be updated after breaking out of the loop to create the effect of smooth scrolling. 2182 if (newLine()) { 2183 // Return how many characters were interpreted. 2184 return i + 1; 2185 } 2186 } 2187 } 2188 } 2189 } 2190 } 2191 2192 // Return how many characters were interpreted, if we return 0, then the end of file has been reached. 2193 return i; 2194 } 2195 2196 // Starts playing the animation from <file> at the specified <baud> rate. Calls <callback> upon completion>, and only clears the screen when encountering "Esc[2J" if <clearScreen> is set to true. 2197 function play(baud, callback, clearScreen) { 2198 var length, drawBlink; 2199 // Sanity check for the <clearScreen> setting, defaults to true. 2200 clearScreen = (clearScreen === undefined) ? true : clearScreen; 2201 // Stop playing the animation, <timer>, and stops the blinking <interval> timer, if currently playing. 2202 clearTimeout(timer); 2203 clearInterval(interval); 2204 // <drawBlink> is used to select which <blinkCanvas> is drawn to the screen. 2205 drawBlink = false; 2206 // Start drawing each <blinkCanvas> to <canvas> alternately, every 250ms. 2207 interval = setInterval(function () { 2208 ctx.drawImage(blinkCanvas[drawBlink ? 1 : 0], 0, 0); 2209 drawBlink = !drawBlink; 2210 }, 250); 2211 // When called, drawChunk() will interpret and draw the next chunk of data, the maximum of <length> bytes long, by calling read(), every 10ms. If a value of 0 is returned by read(), call the <callback> function to indicate that it is complete. 2212 function drawChunk() { 2213 if (read(length)) { 2214 timer = setTimeout(drawChunk, 10); 2215 } else if (callback) { 2216 callback(); 2217 } 2218 } 2219 // Calculate roughly how many bytes to draw, based on the <baud> setting. 2220 length = Math.floor((baud || 115200) / 8 / 100); 2221 // If <clearScreen> is set, then clear everything, otherwise, just reset all the attributes and escaped data. 2222 if (clearScreen) { 2223 resetAll(); 2224 } else { 2225 resetAttributes(); 2226 escapeCode = ""; 2227 escaped = false; 2228 file.seek(0); 2229 } 2230 // Start interpreting the data. 2231 drawChunk(); 2232 } 2233 2234 // Stops interpreting data, and copying the <blinkCanvas> to <canvas> 2235 function stop() { 2236 clearTimeout(timer); 2237 clearInterval(interval); 2238 } 2239 2240 // Sets <file> to a new array of <bytes>, so new data can be appended to the animation. 2241 function load(bytes, callback) { 2242 clearTimeout(timer); 2243 file = new File(bytes); 2244 callback(file.sauce); 2245 } 2246 2247 // Returns the standard <canvas> and <sauce> information, as well as a <controller> object which is used to <play> and <stop> animations, as well as <load> new data. 2248 return { 2249 "canvas": canvas, 2250 "sauce": file.sauce, 2251 "controller": { 2252 "play": play, 2253 "stop": stop, 2254 "load": load 2255 } 2256 }; 2257 } 2258 2259 // animateBytes() returns a controller object used to control an <ansimation>, based on the supplied <bytes> and <options> provided by the user. 2260 function animateBytes(bytes, callback, options) { 2261 var ansimation; 2262 // Create the new ansimation object. 2263 ansimation = new Ansimation(bytes, options); 2264 // The reason for the timeout here is to return the controller object before calling <callback>, so that the animation isn't started before the controller is returned. Ideally, the controller should be passed via callback(), but it's implemented this way to achieve parity with the render() and splitRender() methods. 2265 setTimeout(function () { 2266 callback(ansimation.canvas, ansimation.sauce); 2267 }, 250); 2268 // Return the controller object. 2269 return ansimation.controller; 2270 } 2271 2272 // The same as animateBytes(), but fetches <bytes> from a <url>, and calls <callbackFail> if it fails. 2273 function animate(url, callback, options, callbackFail) { 2274 var ansimation; 2275 // Fetch the data. 2276 httpGet(url, function (bytes) { 2277 ansimation = new Ansimation(bytes, options); 2278 callback(ansimation.canvas, ansimation.sauce); 2279 // Pass <callbackFail> to httpGet, in case it fails. 2280 }, callbackFail); 2281 // The reason a new controller object is created here, instead of passing <ansimation.controller> directly, is because <ansimation> isn't initialized until the bytes are received asynchronously, via httpGet(). 2282 return { 2283 "play": function (baud, callback, clearScreen) { 2284 ansimation.controller.play(baud, callback, clearScreen); 2285 }, 2286 "stop": function () { 2287 ansimation.controller.stop(); 2288 }, 2289 // In this version of load(), httpGet provides the bytes. 2290 "load": function (url, callback, callbackFail) { 2291 httpGet(url, function (bytes) { 2292 ansimation.controller.load(bytes, callback); 2293 }, callbackFail); 2294 } 2295 }; 2296 } 2297 2298 // If this is running in a Web Worker instance, do not initialize Popup, as it provides an in-browser function. 2299 if (!self.WorkerLocation) { 2300 // Popup collects functions which allows a "pop-up" display to be shown in the browser, instead of calling the various render methods elsewhere. 2301 Popup = (function () { 2302 var STYLE_DEFAULTS; 2303 2304 // Defaults used when rewriting the various CSS properties when creating a new element. 2305 STYLE_DEFAULTS = {"background-color": "transparent", "background-image": "none", "margin": "0", "padding": "0", "border": "0", "font-size": "100%", "font": "inherit", "vertical-align": "baseline", "color": "black", "display": "block", "cursor": "default", "text-align": "left", "text-shadow": "none", "text-transform": "none", "clear": "none", "float": "none", "overflow": "auto", "position": "relative", "visibility": "visible"}; 2306 2307 // Works through every element, and discovers the highest z-index recorded. Later used to make sure that elements added to the document are visible. 2308 function findHighestZIndex() { 2309 var elements, highest, i, zIndex; 2310 for (i = 0, elements = document.getElementsByTagName("*"), highest = 0; i < elements.length; ++i) { 2311 zIndex = document.defaultView.getComputedStyle(elements[i]).zIndex; 2312 if (zIndex !== "auto" && zIndex !== "inherit") { 2313 highest = Math.max(highest, parseInt(zIndex, 10)); 2314 } 2315 } 2316 return highest; 2317 } 2318 2319 // Applies styles to an <element> stored in an object <style> 2320 function applyStyle(element, style) { 2321 var name; 2322 for (name in style) { 2323 if (style.hasOwnProperty(name)) { 2324 // Mark every-one as "important", to make sure that it doesn't inherit any styles on the page. 2325 element.style.setProperty(name, style[name], "important"); 2326 } 2327 } 2328 } 2329 2330 // Creates a new "div" element, applies the default set of CSS properties, and applies an optional set from <style>. 2331 function createDiv(style) { 2332 var div; 2333 style = style || {}; 2334 div = document.createElement("div"); 2335 applyStyle(div, STYLE_DEFAULTS); 2336 applyStyle(div, style); 2337 return div; 2338 } 2339 2340 // Sets the transition css properties to <element>, and applies a <style> immediately to perform a CSS transition after a short timeout (in order to make sure the transition styles are registered first). 2341 function transitionCSS(element, transProperty, transDuration, transFunction, style) { 2342 element.style.transitionProperty = transProperty; 2343 element.style.transitionDuration = transDuration; 2344 element.style.transitionTimingFunction = transFunction; 2345 if (style) { 2346 setTimeout(function () { 2347 applyStyle(element, style); 2348 }, 50); 2349 } 2350 } 2351 2352 // Displays a pop-up, based on the supplied <bytes> and <baud>-rate (if this is set to 0, display as an image). Also uses the user-supplied <options>. 2353 function show(bytes, baud, options) { 2354 var divOverlay, divCanvasContainer; 2355 2356 // Slides up the <divOverlay> element on the screen by setting various transition styles, also displays a loading spinner, if a url is provided in <options.spinner> 2357 function slideUpContainer() { 2358 if (options.spinner) { 2359 applyStyle(divOverlay, {"background-image": "none"}); 2360 } 2361 transitionCSS(divCanvasContainer, "top", "0.6s", "ease-in-out", {"top": "0"}); 2362 setTimeout(function () { 2363 applyStyle(divOverlay, {"overflow": "auto"}); 2364 }, 750); 2365 } 2366 2367 // Applies styles to a <canvas> element, also makes sure each <canvas> element is displayed vertically without a gap, by setting vertical-align: bottom. 2368 function processCanvas(canvas) { 2369 // Apply default styles. 2370 applyStyle(canvas, STYLE_DEFAULTS); 2371 canvas.style.verticalAlign = "bottom"; 2372 2373 return canvas; 2374 } 2375 2376 // Displays an error, in the form of an dialog box, with a defined <message>, and dismisses the overlay element. 2377 function error(message) { 2378 alert("Error: " + message); 2379 document.body.removeChild(divOverlay); 2380 } 2381 2382 // Removes the overlay element. 2383 function dismiss(evt) { 2384 evt.preventDefault(); 2385 document.body.removeChild(divOverlay); 2386 } 2387 2388 // Create the overlay element with various css styles. 2389 divOverlay = createDiv({"position": "fixed", "left": "0px", "top": "0px", "width": "100%", "height": "100%", "background-color": "rgba(0, 0, 0, 0.8)", "overflow": "hidden", "z-index": (findHighestZIndex() + 1).toString(10), "opacity": "0"}); 2390 // If a spinner url is provided in <options>, add it to the backdrop of the overlay element... 2391 if (options.spinner) { 2392 applyStyle(divOverlay, {"background-image": "url(" + options.spinner + ")", "background-position": "center center", "background-repeat": "no-repeat"}); 2393 // ... and scale it down to half-size in css-pixels if a retina-type is being used. 2394 if (options["2x"]) { 2395 applyStyle(divOverlay, {"background-size": "32px 64px"}); 2396 } 2397 } 2398 // Create the elemtn used to containt the canvas element(s). 2399 divCanvasContainer = createDiv({"background-color": "black", "box-shadow": "0 8px 32px rgb(0, 0, 0)", "margin": "8px auto", "padding": "16px", "border": "2px solid white", "border-radius": "8px", "top": "100%"}); 2400 2401 // Add the elements to the document. 2402 divOverlay.appendChild(divCanvasContainer); 2403 document.body.appendChild(divOverlay); 2404 2405 // Add the transition properties, and start the transition. 2406 transitionCSS(divOverlay, "opacity", "0.2s", "ease-out", {"opacity": "1.0"}); 2407 2408 // After the transition has been given time to complete, start the rendering process. 2409 setTimeout(function () { 2410 var controller; 2411 // If a baud rate setting has been defined, regard as an animation. 2412 if (baud > 0) { 2413 controller = animateBytes(bytes, function (canvas) { 2414 // Set the container's width based on the width of the canvas element, and display the canvas. 2415 if (options["2x"]) { 2416 divCanvasContainer.style.width = (canvas.width / 2) + "px"; 2417 } else { 2418 divCanvasContainer.style.width = canvas.width + "px"; 2419 } 2420 divCanvasContainer.appendChild(processCanvas(canvas)); 2421 // Slide up the container. 2422 slideUpContainer(); 2423 setTimeout(function () { 2424 // Start playing the animation after the sliding effect. 2425 controller.play(baud); 2426 }, 750); 2427 // If the overlay is clicked anywhere... 2428 divOverlay.onclick = function (evt) { 2429 // ... dismiss the overlay, and stop the animation. 2430 dismiss(evt); 2431 controller.stop(); 2432 }; 2433 }, options); // Pass the options to animateBytes. 2434 } else { // If no baud-rate, treat as an image. 2435 splitRenderBytes(bytes, function (canvases) { 2436 // Set the container's width based on the width of the first canvas element. 2437 if (options["2x"]) { 2438 divCanvasContainer.style.width = (canvases[0].width / 2) + "px"; 2439 } else { 2440 divCanvasContainer.style.width = canvases[0].width + "px"; 2441 } 2442 canvases.forEach(function (canvas) { 2443 // Append each canvas element to the element container. 2444 divCanvasContainer.appendChild(processCanvas(canvas)); 2445 }); 2446 // Slide up the container. 2447 slideUpContainer(); 2448 // If the overlay is clicked anywhere dismiss the overlay. 2449 divOverlay.onclick = dismiss; 2450 }, 100, options, error); // Pass the options and error function to splitRenderBytes. 2451 } 2452 }, 250); 2453 } 2454 2455 // Single entrypoint for popup. 2456 return { 2457 "show": show 2458 }; 2459 }()); 2460 } 2461 2462 // Calls show() in <Popup>, according to the supplied <bytes> and <options>. 2463 function popupBytes(bytes, options) { 2464 // Set baud-rate to 0, since this is assumed to be an image. 2465 Popup.show(bytes, 0, options); 2466 } 2467 2468 // The <url> version of popupBytes(), which gets the <bytes> from a file from the network first, and calls <callbackFail> when the network fetch fails. 2469 function popup(url, options, callbackFail) { 2470 httpGet(url, function (bytes) { 2471 // Set <options> to an empty object, if not set. 2472 options = options || {}; 2473 // Set the filetype to the url extension, if <options.filetype> is not already set. 2474 if (!options.filetype) { 2475 options.filetype = url.split(".").pop().toLowerCase(); 2476 } 2477 // Call popupBytes() with the <bytes> returned from the httpGet() operation. 2478 popupBytes(bytes, options); 2479 // Pass <callbackFail> to httpGet(), in case the operation fails. 2480 }, callbackFail); 2481 } 2482 2483 // The animation version of popupBytes(), this sets the <baud> option, defaults to 14400, so the bytes are assumend to represent an ANSI animation. 2484 function popupAnimationBytes(bytes, baud, options) { 2485 Popup.show(bytes, baud || 14400, options); 2486 } 2487 2488 // The <url> version of popupAnimationBytes(), fetches the <bytes> from a httpGet() operation. 2489 function popupAnimation(url, baud, options, callbackFail) { 2490 httpGet(url, function (bytes) { 2491 // No filetype setting is set here, as the bytes are assumed in an animation to represent an ANSI file. 2492 popupAnimationBytes(bytes, baud, options); 2493 // Pass <callbackFail> to httpGet(), in case the operation fails. 2494 }, callbackFail); 2495 } 2496 2497 // Return all the publicly-available functions for AnsiLove. 2498 return { 2499 "sauceBytes": sauceBytes, 2500 "sauce": sauce, 2501 // Used to convert raw image data to a canvas element, after a web worker returns it's results. 2502 "displayDataToCanvas": displayDataToCanvas, 2503 "renderBytes": renderBytes, 2504 "render": render, 2505 "splitRenderBytes": splitRenderBytes, 2506 "splitRender": splitRender, 2507 "animateBytes": animateBytes, 2508 "animate": animate, 2509 "popupBytes": popupBytes, 2510 "popup": popup, 2511 "popupAnimationBytes": popupAnimationBytes, 2512 "popupAnimation": popupAnimation 2513 }; 2514 }()); 2515 2516 (function () { 2517 "use strict"; 2518 // If this script is executed as part of a Web Worker thread, attach methods to <self> to provide hooks for a web worker instance. 2519 if (self.WorkerLocation) { 2520 self.onmessage = function (evt) { 2521 // If raw bytes have been supplied. 2522 if (evt.data.bytes) { 2523 if (evt.data.split > 0) { // If the imagedata is to be split. 2524 // Web worker function for splitRenderBytes. 2525 AnsiLove.splitRenderBytes(evt.data.bytes, function (imagedata, sauce) { 2526 // Return the raw-data, returned by the display() function, and a sauce record. 2527 self.postMessage({"splitimagedata": imagedata, "sauce": sauce}); 2528 // Pass the various options from the web worker invocation, setting the <imagedata> setting on. 2529 }, evt.data.split, {"imagedata": 1, "font": evt.data.font, "bits": evt.data.bits, "icecolors": evt.data.icecolors, "columns": evt.data.columns, "thumbnail": evt.data.thumbnail, "2x": evt.data["2x"], "filetype": evt.data.filetype}); 2530 } else { // For just a single image. 2531 // Web worker function for renderBytes. 2532 AnsiLove.renderBytes(evt.data.bytes, function (imagedata, sauce) { 2533 // Return the raw-data, returned by the display() function, and a sauce record. 2534 self.postMessage({"imagedata": imagedata, "sauce": sauce}); 2535 // Pass the various options from the web worker invocation, setting the <imagedata> setting on. 2536 }, {"imagedata": 1, "font": evt.data.font, "bits": evt.data.bits, "icecolors": evt.data.icecolors, "columns": evt.data.columns, "thumbnail": evt.data.thumbnail, "2x": evt.data["2x"], "filetype": evt.data.filetype}); 2537 } 2538 } else { // If a url has been supplied. 2539 if (evt.data.split > 0) { // If the imagedata is to be split. 2540 AnsiLove.splitRender(evt.data.url, function (imagedata, sauce) { 2541 // Return the raw-data, returned by the display() function, and a sauce record. 2542 self.postMessage({"splitimagedata": imagedata, "sauce": sauce}); 2543 // Pass the various options from the web worker invocation, setting the <imagedata> setting on. 2544 }, evt.data.split, {"imagedata": 1, "font": evt.data.font, "bits": evt.data.bits, "icecolors": evt.data.icecolors, "columns": evt.data.columns, "thumbnail": evt.data.thumbnail, "2x": evt.data["2x"], "filetype": evt.data.filetype}); 2545 } else { // For just a single image. 2546 AnsiLove.render(evt.data.url, function (imagedata, sauce) { 2547 // Return the raw-data, returned by the display() function, and a sauce record. 2548 self.postMessage({"imagedata": imagedata, "sauce": sauce}); 2549 // Pass the various options from the web worker invocation, setting the <imagedata> setting on. 2550 }, {"imagedata": 1, "font": evt.data.font, "bits": evt.data.bits, "icecolors": evt.data.icecolors, "columns": evt.data.columns, "thumbnail": evt.data.thumbnail, "2x": evt.data["2x"], "filetype": evt.data.filetype}); 2551 } 2552 } 2553 }; 2554 } 2555 }());