diff --git a/Cargo.lock b/Cargo.lock
index 7a033a1..4b299f8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -874,6 +874,7 @@ dependencies = [
"ratatui",
"tempfile",
"thiserror 2.0.21",
+ "unicode-width",
]
[[package]]
diff --git a/crates/ghostty-font/Cargo.toml b/crates/ghostty-font/Cargo.toml
index 4229cc3..8140e6f 100644
--- a/crates/ghostty-font/Cargo.toml
+++ b/crates/ghostty-font/Cargo.toml
@@ -9,6 +9,41 @@ tiny-skia = "0.12.0"
png = "0.18.1"
thiserror = "2.0.21"
log = "0.4.34"
+freetype-sys = "0.23.0"
+harfbuzz-sys = "0.8.0"
+ghostty-unicode.workspace = true
+bitflags = "2.13.2"
+yeslogic-fontconfig-sys = "6.0.1"
+ghostty-datastruct.workspace = true
-[lints]
-workspace = true
+# This crate wraps the freetype / harfbuzz / fontconfig C libraries through
+# their `-sys` crates; unsafe is denied by default and allowed on minimal,
+# `// SAFETY:`-commented items only.
+[lints.rust]
+unsafe_code = "deny"
+
+[lints.clippy]
+pedantic = { level = "warn", priority = -1 }
+todo = "warn"
+unwrap_used = "warn"
+cast_possible_truncation = "allow"
+cast_possible_wrap = "allow"
+cast_sign_loss = "allow"
+cast_precision_loss = "allow"
+cast_lossless = "allow"
+module_name_repetitions = "allow"
+too_many_lines = "allow"
+missing_errors_doc = "allow"
+missing_panics_doc = "allow"
+similar_names = "allow"
+struct_excessive_bools = "allow"
+fn_params_excessive_bools = "allow"
+match_same_arms = "allow"
+unreadable_literal = "allow"
+many_single_char_names = "allow"
+doc_markdown = "allow"
+must_use_candidate = "allow"
+return_self_not_must_use = "allow"
+used_underscore_binding = "allow"
+large_stack_arrays = "allow"
+inline_always = "allow"
diff --git a/crates/ghostty-font/res/BSD-2-Clause.txt b/crates/ghostty-font/res/BSD-2-Clause.txt
new file mode 100644
index 0000000..4387948
--- /dev/null
+++ b/crates/ghostty-font/res/BSD-2-Clause.txt
@@ -0,0 +1,24 @@
+Copyright (c) 2018-2024, Frederic Cambus
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/crates/ghostty-font/res/CodeNewRoman-Regular.otf b/crates/ghostty-font/res/CodeNewRoman-Regular.otf
new file mode 100644
index 0000000..dcc7c35
Binary files /dev/null and b/crates/ghostty-font/res/CodeNewRoman-Regular.otf differ
diff --git a/crates/ghostty-font/res/CozetteVector.ttf b/crates/ghostty-font/res/CozetteVector.ttf
new file mode 100644
index 0000000..05ba976
Binary files /dev/null and b/crates/ghostty-font/res/CozetteVector.ttf differ
diff --git a/crates/ghostty-font/res/GeistMono-Regular.ttf b/crates/ghostty-font/res/GeistMono-Regular.ttf
new file mode 100644
index 0000000..a909c5d
Binary files /dev/null and b/crates/ghostty-font/res/GeistMono-Regular.ttf differ
diff --git a/crates/ghostty-font/res/Inconsolata-Regular.ttf b/crates/ghostty-font/res/Inconsolata-Regular.ttf
new file mode 100755
index 0000000..20251d9
Binary files /dev/null and b/crates/ghostty-font/res/Inconsolata-Regular.ttf differ
diff --git a/crates/ghostty-font/res/JetBrainsMono-Bold.ttf b/crates/ghostty-font/res/JetBrainsMono-Bold.ttf
new file mode 100644
index 0000000..8c93043
Binary files /dev/null and b/crates/ghostty-font/res/JetBrainsMono-Bold.ttf differ
diff --git a/crates/ghostty-font/res/JetBrainsMono-BoldItalic.ttf b/crates/ghostty-font/res/JetBrainsMono-BoldItalic.ttf
new file mode 100644
index 0000000..1ddf216
Binary files /dev/null and b/crates/ghostty-font/res/JetBrainsMono-BoldItalic.ttf differ
diff --git a/crates/ghostty-font/res/JetBrainsMono-Italic-Variable.ttf b/crates/ghostty-font/res/JetBrainsMono-Italic-Variable.ttf
new file mode 100644
index 0000000..5414835
Binary files /dev/null and b/crates/ghostty-font/res/JetBrainsMono-Italic-Variable.ttf differ
diff --git a/crates/ghostty-font/res/JetBrainsMono-Italic.ttf b/crates/ghostty-font/res/JetBrainsMono-Italic.ttf
new file mode 100644
index 0000000..ccc9d6a
Binary files /dev/null and b/crates/ghostty-font/res/JetBrainsMono-Italic.ttf differ
diff --git a/crates/ghostty-font/res/JetBrainsMono-OFL.txt b/crates/ghostty-font/res/JetBrainsMono-OFL.txt
new file mode 100644
index 0000000..8bee414
--- /dev/null
+++ b/crates/ghostty-font/res/JetBrainsMono-OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/crates/ghostty-font/res/JetBrainsMono-Regular.ttf b/crates/ghostty-font/res/JetBrainsMono-Regular.ttf
new file mode 100644
index 0000000..dff66cc
Binary files /dev/null and b/crates/ghostty-font/res/JetBrainsMono-Regular.ttf differ
diff --git a/crates/ghostty-font/res/JetBrainsMono-Variable.ttf b/crates/ghostty-font/res/JetBrainsMono-Variable.ttf
new file mode 100644
index 0000000..b60e77f
Binary files /dev/null and b/crates/ghostty-font/res/JetBrainsMono-Variable.ttf differ
diff --git a/crates/ghostty-font/res/JetBrainsMonoNerdFont-Regular.ttf b/crates/ghostty-font/res/JetBrainsMonoNerdFont-Regular.ttf
new file mode 100644
index 0000000..a603188
Binary files /dev/null and b/crates/ghostty-font/res/JetBrainsMonoNerdFont-Regular.ttf differ
diff --git a/crates/ghostty-font/res/JetBrainsMonoNoNF-Regular.ttf b/crates/ghostty-font/res/JetBrainsMonoNoNF-Regular.ttf
new file mode 100644
index 0000000..dff66cc
Binary files /dev/null and b/crates/ghostty-font/res/JetBrainsMonoNoNF-Regular.ttf differ
diff --git a/crates/ghostty-font/res/JuliaMono-Regular.ttf b/crates/ghostty-font/res/JuliaMono-Regular.ttf
new file mode 100644
index 0000000..605230a
Binary files /dev/null and b/crates/ghostty-font/res/JuliaMono-Regular.ttf differ
diff --git a/crates/ghostty-font/res/KawkabMono-Regular.ttf b/crates/ghostty-font/res/KawkabMono-Regular.ttf
new file mode 100644
index 0000000..4841678
Binary files /dev/null and b/crates/ghostty-font/res/KawkabMono-Regular.ttf differ
diff --git a/crates/ghostty-font/res/MIT.txt b/crates/ghostty-font/res/MIT.txt
new file mode 100644
index 0000000..9cf1062
--- /dev/null
+++ b/crates/ghostty-font/res/MIT.txt
@@ -0,0 +1,19 @@
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/crates/ghostty-font/res/MonaspaceNeon-Regular.otf b/crates/ghostty-font/res/MonaspaceNeon-Regular.otf
new file mode 100644
index 0000000..75aeb62
Binary files /dev/null and b/crates/ghostty-font/res/MonaspaceNeon-Regular.otf differ
diff --git a/crates/ghostty-font/res/NerdFontsSymbols-LICENSE b/crates/ghostty-font/res/NerdFontsSymbols-LICENSE
new file mode 100644
index 0000000..06eb073
--- /dev/null
+++ b/crates/ghostty-font/res/NerdFontsSymbols-LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Ryan L McIntyre
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/crates/ghostty-font/res/NotoColorEmoji.ttf b/crates/ghostty-font/res/NotoColorEmoji.ttf
new file mode 100755
index 0000000..2c1f104
Binary files /dev/null and b/crates/ghostty-font/res/NotoColorEmoji.ttf differ
diff --git a/crates/ghostty-font/res/NotoEmoji-Regular.ttf b/crates/ghostty-font/res/NotoEmoji-Regular.ttf
new file mode 100755
index 0000000..850d972
Binary files /dev/null and b/crates/ghostty-font/res/NotoEmoji-Regular.ttf differ
diff --git a/crates/ghostty-font/res/OFL.txt b/crates/ghostty-font/res/OFL.txt
new file mode 100644
index 0000000..e1fa6e8
--- /dev/null
+++ b/crates/ghostty-font/res/OFL.txt
@@ -0,0 +1,91 @@
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/crates/ghostty-font/res/README-upstream.md b/crates/ghostty-font/res/README-upstream.md
new file mode 100644
index 0000000..b4d77a7
--- /dev/null
+++ b/crates/ghostty-font/res/README-upstream.md
@@ -0,0 +1,39 @@
+# Fonts and Licenses
+
+This project uses several fonts which fall under the SIL Open Font License (OFL-1.1), MIT License, and BSD 2-Clause License:
+
+- Code New Roman (OFL-1.1)
+ - [© 2014 Sam Radian. All Rights Reserved.](https://github.com/chrissimpkins/codeface/blob/master/fonts/code-new-roman/license.txt)
+- Geist Mono (OFL-1.1)
+ - [Copyright (c) 2023 Vercel, in collaboration with basement.studio](https://github.com/vercel/geist-font/blob/main/LICENSE.txt)
+- Inconsolata (OFL-1.1)
+ - [Copyright 2006 The Inconsolata Project Authors](https://github.com/google/fonts/blob/main/ofl/inconsolata/OFL.txt)
+- JetBrains Mono (OFL-1.1)
+ - [Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)](https://github.com/JetBrains/JetBrainsMono/blob/master/OFL.txt)
+- JuliaMono (OFL-1.1)
+ - [Copyright (c) 2020 - 2023, cormullion
+ with Reserved Font Name JuliaMono.](https://github.com/cormullion/juliamono/blob/master/LICENSE)
+- Kawkab Mono (OFL-1.1)
+ - [Copyright (c) 2015, Abdullah Arif (abdullah.a@gmail.com). Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
+ ](https://github.com/aiaf/kawkab-mono/blob/master/OFL.txt)
+- Lilex (OFL-1.1)
+ - [Copyright 2019 The Lilex Project Authors (https://github.com/mishamyrt/Lilex)](https://github.com/mishamyrt/Lilex/blob/master/OFL.txt)
+- Monaspace Neon (OFL-1.1)
+ - [Copyright (c) 2023, GitHub https://github.com/githubnext/monaspace
+ with Reserved Font Name "Monaspace", including subfamilies: "Argon", "Neon", "Xenon", "Radon", and "Krypton"](https://github.com/githubnext/monaspace/blob/main/LICENSE)
+- Noto Emoji (OFL-1.1)
+ - [Copyright 2013 Google LLC](https://github.com/googlefonts/noto-emoji/blob/main/LICENSE)
+- Cozette (MIT)
+ - [Copyright (c) 2020, Slavfox](https://github.com/slavfox/Cozette/blob/main/LICENSE)
+- Terminus TTF (OFL-1.1)
+ - [Copyright (c) 2010-2020 Dimitar Toshkov Zhekov with Reserved Font Name "Terminus Font"](https://sourceforge.net/projects/terminus-font/)
+ - [Copyright (c) 2011-2023 Tilman Blumenbach with Reserved Font Name "Terminus (TTF)"](https://files.ax86.net/terminus-ttf/)
+- Spleen (BSD 2-Clause)
+ - [Copyright (c) 2018-2024, Frederic Cambus](https://github.com/fcambus/spleen)
+
+A full copy of the OFL license can be found at [OFL.txt](./OFL.txt).
+An accompanying FAQ is also available at .
+
+A full copy of the MIT license can be found at [MIT.txt](./MIT.txt).
+
+A full copy of the BSD 2-Clause license can be found at [BSD-2-Clause.txt](./BSD-2-Clause.txt).
diff --git a/crates/ghostty-font/res/SymbolsNerdFont-Regular.ttf b/crates/ghostty-font/res/SymbolsNerdFont-Regular.ttf
new file mode 100644
index 0000000..38c24fb
Binary files /dev/null and b/crates/ghostty-font/res/SymbolsNerdFont-Regular.ttf differ
diff --git a/crates/ghostty-font/res/TerminusTTF-Regular.ttf b/crates/ghostty-font/res/TerminusTTF-Regular.ttf
new file mode 100644
index 0000000..d125e63
Binary files /dev/null and b/crates/ghostty-font/res/TerminusTTF-Regular.ttf differ
diff --git a/crates/ghostty-font/res/spleen-8x16.bdf b/crates/ghostty-font/res/spleen-8x16.bdf
new file mode 100644
index 0000000..5c7c268
--- /dev/null
+++ b/crates/ghostty-font/res/spleen-8x16.bdf
@@ -0,0 +1,22328 @@
+STARTFONT 2.1
+COMMENT /*
+COMMENT * Spleen 8x16 2.1.0
+COMMENT * Copyright (c) 2018-2024, Frederic Cambus
+COMMENT * https://www.cambus.net/
+COMMENT *
+COMMENT * Created: 2018-08-11
+COMMENT * Last Updated: 2024-01-27
+COMMENT *
+COMMENT * Spleen is released under the BSD 2-Clause license.
+COMMENT * See LICENSE file for details.
+COMMENT *
+COMMENT * SPDX-License-Identifier: BSD-2-Clause
+COMMENT */
+FONT -misc-spleen-medium-r-normal--16-160-72-72-C-80-ISO10646-1
+SIZE 16 72 72
+FONTBOUNDINGBOX 8 16 0 -4
+STARTPROPERTIES 20
+FAMILY_NAME "Spleen"
+WEIGHT_NAME "Medium"
+FONT_VERSION "2.1.0"
+FOUNDRY "misc"
+SLANT "R"
+SETWIDTH_NAME "Normal"
+PIXEL_SIZE 16
+POINT_SIZE 160
+RESOLUTION_X 72
+RESOLUTION_Y 72
+SPACING "C"
+AVERAGE_WIDTH 80
+CHARSET_REGISTRY "ISO10646"
+CHARSET_ENCODING "1"
+MIN_SPACE 8
+FONT_ASCENT 12
+FONT_DESCENT 4
+COPYRIGHT "Copyright (c) 2018-2024, Frederic Cambus"
+DEFAULT_CHAR 32
+_GBDFED_INFO "Edited with gbdfed 1.6."
+ENDPROPERTIES
+CHARS 969
+STARTCHAR SPACE
+ENCODING 32
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR EXCLAMATION MARK
+ENCODING 33
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+18
+18
+18
+18
+18
+00
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR QUOTATION MARK
+ENCODING 34
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR NUMBER SIGN
+ENCODING 35
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+6C
+6C
+FE
+6C
+6C
+6C
+6C
+FE
+6C
+6C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DOLLAR SIGN
+ENCODING 36
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+7E
+D0
+D0
+D0
+7C
+16
+16
+16
+16
+FC
+10
+00
+00
+00
+ENDCHAR
+STARTCHAR PERCENT SIGN
+ENCODING 37
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+06
+66
+6C
+0C
+18
+18
+30
+36
+66
+60
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR AMPERSAND
+ENCODING 38
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+38
+6C
+6C
+6C
+38
+70
+DA
+CC
+CC
+7A
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR APOSTROPHE
+ENCODING 39
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+18
+18
+18
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFT PARENTHESIS
+ENCODING 40
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0E
+18
+30
+30
+60
+60
+60
+60
+30
+30
+18
+0E
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHT PARENTHESIS
+ENCODING 41
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+70
+18
+0C
+0C
+06
+06
+06
+06
+0C
+0C
+18
+70
+00
+00
+00
+ENDCHAR
+STARTCHAR ASTERISK
+ENCODING 42
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+66
+3C
+18
+FF
+18
+3C
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR PLUS SIGN
+ENCODING 43
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+18
+18
+7E
+18
+18
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR COMMA
+ENCODING 44
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+18
+18
+30
+00
+00
+00
+ENDCHAR
+STARTCHAR HYPHEN-MINUS
+ENCODING 45
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+7E
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR FULL STOP
+ENCODING 46
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SOLIDUS
+ENCODING 47
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+0C
+0C
+18
+18
+30
+30
+60
+60
+C0
+C0
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT ZERO
+ENCODING 48
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+CE
+DE
+F6
+E6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT ONE
+ENCODING 49
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+38
+78
+58
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT TWO
+ENCODING 50
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+06
+06
+0C
+18
+30
+60
+C6
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT THREE
+ENCODING 51
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+06
+06
+3C
+06
+06
+06
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT FOUR
+ENCODING 52
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+CC
+CC
+CC
+CC
+FE
+0C
+0C
+0C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT FIVE
+ENCODING 53
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FE
+C6
+C0
+C0
+FC
+06
+06
+06
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT SIX
+ENCODING 54
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C0
+C0
+FC
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT SEVEN
+ENCODING 55
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FE
+C6
+06
+06
+0C
+18
+30
+30
+30
+30
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT EIGHT
+ENCODING 56
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+7C
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIGIT NINE
+ENCODING 57
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+C6
+7E
+06
+06
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR COLON
+ENCODING 58
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+18
+18
+00
+00
+00
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SEMICOLON
+ENCODING 59
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+18
+18
+00
+00
+00
+18
+18
+30
+00
+00
+00
+ENDCHAR
+STARTCHAR LESS-THAN SIGN
+ENCODING 60
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+06
+0C
+18
+30
+60
+60
+30
+18
+0C
+06
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR EQUALS SIGN
+ENCODING 61
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+00
+00
+7E
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREATER-THAN SIGN
+ENCODING 62
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+60
+30
+18
+0C
+06
+06
+0C
+18
+30
+60
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR QUESTION MARK
+ENCODING 63
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+06
+0C
+18
+30
+30
+00
+30
+30
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR COMMERCIAL AT
+ENCODING 64
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+C2
+DA
+DA
+DA
+DA
+DE
+C0
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A
+ENCODING 65
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER B
+ENCODING 66
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+C6
+C6
+C6
+FC
+C6
+C6
+C6
+C6
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER C
+ENCODING 67
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER D
+ENCODING 68
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E
+ENCODING 69
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER F
+ENCODING 70
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER G
+ENCODING 71
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+DE
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER H
+ENCODING 72
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I
+ENCODING 73
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER J
+ENCODING 74
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+18
+F0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER K
+ENCODING 75
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+CC
+F8
+CC
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER L
+ENCODING 76
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER M
+ENCODING 77
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+EE
+FE
+D6
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER N
+ENCODING 78
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+E6
+E6
+D6
+D6
+CE
+CE
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O
+ENCODING 79
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER P
+ENCODING 80
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+C6
+C6
+C6
+FC
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Q
+ENCODING 81
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+D6
+D6
+7C
+18
+0C
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER R
+ENCODING 82
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+C6
+C6
+C6
+FC
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER S
+ENCODING 83
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+7C
+06
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER T
+ENCODING 84
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FF
+18
+18
+18
+18
+18
+18
+18
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U
+ENCODING 85
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER V
+ENCODING 86
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+6C
+38
+10
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER W
+ENCODING 87
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+D6
+FE
+EE
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER X
+ENCODING 88
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+6C
+38
+6C
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Y
+ENCODING 89
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+7E
+06
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Z
+ENCODING 90
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FE
+06
+06
+0C
+18
+30
+60
+C0
+C0
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFT SQUARE BRACKET
+ENCODING 91
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+3E
+30
+30
+30
+30
+30
+30
+30
+30
+30
+30
+3E
+00
+00
+00
+ENDCHAR
+STARTCHAR REVERSE SOLIDUS
+ENCODING 92
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+C0
+C0
+60
+60
+30
+30
+18
+18
+0C
+0C
+06
+06
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHT SQUARE BRACKET
+ENCODING 93
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7C
+0C
+0C
+0C
+0C
+0C
+0C
+0C
+0C
+0C
+0C
+7C
+00
+00
+00
+ENDCHAR
+STARTCHAR CIRCUMFLEX ACCENT
+ENCODING 94
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+C6
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LOW LINE
+ENCODING 95
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+FE
+00
+ENDCHAR
+STARTCHAR GRAVE ACCENT
+ENCODING 96
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+30
+18
+0C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A
+ENCODING 97
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER B
+ENCODING 98
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+C0
+FC
+C6
+C6
+C6
+C6
+C6
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER C
+ENCODING 99
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER D
+ENCODING 100
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+06
+06
+06
+7E
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E
+ENCODING 101
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER F
+ENCODING 102
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+1E
+30
+30
+30
+7C
+30
+30
+30
+30
+30
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER G
+ENCODING 103
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7C
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER H
+ENCODING 104
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+C0
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I
+ENCODING 105
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER J
+ENCODING 106
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+18
+18
+18
+18
+18
+18
+18
+18
+18
+70
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER K
+ENCODING 107
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+C0
+CC
+D8
+F0
+F0
+D8
+CC
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER L
+ENCODING 108
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+30
+30
+30
+30
+30
+30
+30
+30
+30
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER M
+ENCODING 109
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+EC
+D6
+D6
+D6
+D6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER N
+ENCODING 110
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O
+ENCODING 111
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER P
+ENCODING 112
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+C6
+C6
+C6
+C6
+C6
+FC
+C0
+C0
+C0
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Q
+ENCODING 113
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7E
+06
+06
+06
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER R
+ENCODING 114
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER S
+ENCODING 115
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C0
+C0
+7C
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER T
+ENCODING 116
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+30
+30
+30
+7C
+30
+30
+30
+30
+30
+1E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U
+ENCODING 117
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER V
+ENCODING 118
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+C6
+6C
+38
+10
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER W
+ENCODING 119
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+D6
+D6
+D6
+D6
+6E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER X
+ENCODING 120
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+6C
+38
+38
+6C
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Y
+ENCODING 121
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Z
+ENCODING 122
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FE
+06
+0C
+18
+30
+60
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFT CURLY BRACKET
+ENCODING 123
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0E
+18
+18
+18
+18
+70
+70
+18
+18
+18
+18
+0E
+00
+00
+00
+ENDCHAR
+STARTCHAR VERTICAL LINE
+ENCODING 124
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHT CURLY BRACKET
+ENCODING 125
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+70
+18
+18
+18
+18
+0E
+0E
+18
+18
+18
+18
+70
+00
+00
+00
+ENDCHAR
+STARTCHAR TILDE
+ENCODING 126
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+32
+7E
+4C
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR
+ENCODING 127
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR NO-BREAK SPACE
+ENCODING 160
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR INVERTED EXCLAMATION MARK
+ENCODING 161
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+18
+18
+18
+18
+18
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CENT SIGN
+ENCODING 162
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+08
+7E
+C8
+C8
+C8
+C8
+C8
+7E
+08
+00
+00
+00
+ENDCHAR
+STARTCHAR POUND SIGN
+ENCODING 163
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+38
+6C
+60
+60
+60
+F8
+60
+60
+C0
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CURRENCY SIGN
+ENCODING 164
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+3C
+66
+66
+66
+3C
+66
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR YEN SIGN
+ENCODING 165
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C3
+C3
+66
+3C
+18
+3C
+18
+3C
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BROKEN BAR
+ENCODING 166
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+18
+18
+18
+00
+00
+18
+18
+18
+18
+18
+00
+00
+ENDCHAR
+STARTCHAR SECTION SIGN
+ENCODING 167
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+3C
+66
+60
+30
+3C
+66
+66
+66
+66
+3C
+0C
+06
+66
+3C
+00
+ENDCHAR
+STARTCHAR DIAERESIS
+ENCODING 168
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+6C
+6C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR COPYRIGHT SIGN
+ENCODING 169
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+82
+9A
+A2
+A2
+A2
+9A
+82
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR FEMININE ORDINAL INDICATOR
+ENCODING 170
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+0C
+3C
+4C
+3C
+00
+7C
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ENCODING 171
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+33
+66
+CC
+66
+33
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR NOT SIGN
+ENCODING 172
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+FE
+06
+06
+06
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SOFT HYPHEN
+ENCODING 173
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+3C
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR REGISTERED SIGN
+ENCODING 174
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+82
+BA
+AA
+B2
+AA
+AA
+82
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR MACRON
+ENCODING 175
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DEGREE SIGN
+ENCODING 176
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+6C
+38
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR PLUS-MINUS SIGN
+ENCODING 177
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+18
+18
+7E
+18
+18
+00
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SUPERSCRIPT TWO
+ENCODING 178
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+4C
+0C
+38
+60
+7C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SUPERSCRIPT THREE
+ENCODING 179
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+1C
+26
+0C
+06
+26
+1C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR ACUTE ACCENT
+ENCODING 180
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR MICRO SIGN
+ENCODING 181
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+CC
+CC
+CC
+CC
+CC
+CC
+F6
+C0
+C0
+C0
+00
+ENDCHAR
+STARTCHAR PILCROW SIGN
+ENCODING 182
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+D6
+D6
+D6
+76
+16
+16
+16
+16
+16
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR MIDDLE DOT
+ENCODING 183
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+18
+18
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CEDILLA
+ENCODING 184
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR SUPERSCRIPT ONE
+ENCODING 185
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+38
+18
+18
+18
+3C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR MASCULINE ORDINAL INDICATOR
+ENCODING 186
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+6C
+38
+00
+00
+7C
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ENCODING 187
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+CC
+66
+33
+66
+CC
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR VULGAR FRACTION ONE QUARTER
+ENCODING 188
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+40
+C0
+40
+42
+46
+EC
+18
+30
+70
+D4
+94
+1E
+04
+04
+00
+ENDCHAR
+STARTCHAR VULGAR FRACTION ONE HALF
+ENCODING 189
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+40
+C0
+40
+42
+46
+EC
+18
+30
+6C
+D2
+82
+0C
+10
+1E
+00
+ENDCHAR
+STARTCHAR VULGAR FRACTION THREE QUARTERS
+ENCODING 190
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+90
+20
+12
+96
+6C
+18
+30
+70
+D4
+94
+1E
+04
+04
+00
+ENDCHAR
+STARTCHAR INVERTED QUESTION MARK
+ENCODING 191
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+18
+18
+30
+60
+C0
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH GRAVE
+ENCODING 192
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+30
+18
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH ACUTE
+ENCODING 193
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ENCODING 194
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH TILDE
+ENCODING 195
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+32
+4C
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH DIAERESIS
+ENCODING 196
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+6C
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH RING ABOVE
+ENCODING 197
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+38
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER AE
+ENCODING 198
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+D8
+D8
+D8
+FE
+D8
+D8
+D8
+D8
+DE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER C WITH CEDILLA
+ENCODING 199
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH GRAVE
+ENCODING 200
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+30
+18
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH ACUTE
+ENCODING 201
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ENCODING 202
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH DIAERESIS
+ENCODING 203
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+6C
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH GRAVE
+ENCODING 204
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+30
+18
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH ACUTE
+ENCODING 205
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+0C
+18
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ENCODING 206
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH DIAERESIS
+ENCODING 207
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+66
+66
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER ETH
+ENCODING 208
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+66
+66
+66
+F6
+66
+66
+66
+66
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER N WITH TILDE
+ENCODING 209
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+32
+4C
+00
+C6
+E6
+E6
+D6
+D6
+CE
+CE
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH GRAVE
+ENCODING 210
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+30
+18
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH ACUTE
+ENCODING 211
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ENCODING 212
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH TILDE
+ENCODING 213
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+32
+4C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH DIAERESIS
+ENCODING 214
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+6C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR MULTIPLICATION SIGN
+ENCODING 215
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+6C
+38
+38
+6C
+C6
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH STROKE
+ENCODING 216
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+02
+7C
+C6
+CE
+CE
+D6
+D6
+E6
+E6
+C6
+7C
+80
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH GRAVE
+ENCODING 217
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+30
+18
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH ACUTE
+ENCODING 218
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ENCODING 219
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH DIAERESIS
+ENCODING 220
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+6C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Y WITH ACUTE
+ENCODING 221
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+C6
+C6
+C6
+C6
+7E
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER THORN
+ENCODING 222
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+C0
+C0
+FC
+C6
+C6
+C6
+C6
+C6
+FC
+C0
+C0
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER SHARP S
+ENCODING 223
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+78
+CC
+CC
+CC
+D8
+CC
+C6
+C6
+D6
+DC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH GRAVE
+ENCODING 224
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+30
+18
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH ACUTE
+ENCODING 225
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH CIRCUMFLEX
+ENCODING 226
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH TILDE
+ENCODING 227
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+32
+7E
+4C
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH DIAERESIS
+ENCODING 228
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+6C
+6C
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH RING ABOVE
+ENCODING 229
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+38
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER AE
+ENCODING 230
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+6E
+16
+16
+7E
+D0
+D0
+6E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER C WITH CEDILLA
+ENCODING 231
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C0
+C0
+C0
+C0
+C0
+7E
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH GRAVE
+ENCODING 232
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+30
+18
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH ACUTE
+ENCODING 233
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH CIRCUMFLEX
+ENCODING 234
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH DIAERESIS
+ENCODING 235
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+6C
+6C
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH GRAVE
+ENCODING 236
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+30
+18
+0C
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH ACUTE
+ENCODING 237
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH CIRCUMFLEX
+ENCODING 238
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+3C
+66
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH DIAERESIS
+ENCODING 239
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+66
+66
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER ETH
+ENCODING 240
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+D8
+70
+D8
+0C
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER N WITH TILDE
+ENCODING 241
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+32
+7E
+4C
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH GRAVE
+ENCODING 242
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+30
+18
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH ACUTE
+ENCODING 243
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH CIRCUMFLEX
+ENCODING 244
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH TILDE
+ENCODING 245
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+32
+7E
+4C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH DIAERESIS
+ENCODING 246
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+6C
+6C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DIVISION SIGN
+ENCODING 247
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+18
+18
+00
+7E
+00
+18
+18
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH STROKE
+ENCODING 248
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+02
+7C
+C6
+CE
+D6
+E6
+C6
+7C
+80
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH GRAVE
+ENCODING 249
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+30
+18
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH ACUTE
+ENCODING 250
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH CIRCUMFLEX
+ENCODING 251
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH DIAERESIS
+ENCODING 252
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+6C
+6C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Y WITH ACUTE
+ENCODING 253
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER THORN
+ENCODING 254
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+C0
+FC
+C6
+C6
+C6
+C6
+C6
+FC
+C0
+C0
+C0
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Y WITH DIAERESIS
+ENCODING 255
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+6C
+6C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH MACRON
+ENCODING 256
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7C
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH MACRON
+ENCODING 257
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH BREVE
+ENCODING 258
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH BREVE
+ENCODING 259
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+6C
+38
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH OGONEK
+ENCODING 260
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+C6
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH OGONEK
+ENCODING 261
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER C WITH ACUTE
+ENCODING 262
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+7E
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER C WITH ACUTE
+ENCODING 263
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+7E
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ENCODING 264
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7E
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER C WITH CIRCUMFLEX
+ENCODING 265
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+7E
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER C WITH DOT ABOVE
+ENCODING 266
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+00
+7E
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER C WITH DOT ABOVE
+ENCODING 267
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+7E
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER C WITH CARON
+ENCODING 268
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+7E
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER C WITH CARON
+ENCODING 269
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+7E
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER D WITH CARON
+ENCODING 270
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER D WITH CARON
+ENCODING 271
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+16
+06
+06
+7E
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER D WITH STROKE
+ENCODING 272
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+66
+66
+66
+F6
+66
+66
+66
+66
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER D WITH STROKE
+ENCODING 273
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+06
+1F
+06
+7E
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH MACRON
+ENCODING 274
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7C
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH MACRON
+ENCODING 275
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH BREVE
+ENCODING 276
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH BREVE
+ENCODING 277
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+6C
+38
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH DOT ABOVE
+ENCODING 278
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH DOT ABOVE
+ENCODING 279
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH OGONEK
+ENCODING 280
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+C0
+7E
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH OGONEK
+ENCODING 281
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH CARON
+ENCODING 282
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH CARON
+ENCODING 283
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ENCODING 284
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7E
+C0
+C0
+C0
+DE
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER G WITH CIRCUMFLEX
+ENCODING 285
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7C
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER G WITH BREVE
+ENCODING 286
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+7E
+C0
+C0
+C0
+DE
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER G WITH BREVE
+ENCODING 287
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+6C
+38
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7C
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER G WITH DOT ABOVE
+ENCODING 288
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+00
+7E
+C0
+C0
+C0
+DE
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER G WITH DOT ABOVE
+ENCODING 289
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7C
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER G WITH CEDILLA
+ENCODING 290
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+DE
+C6
+C6
+C6
+C6
+7E
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER G WITH CEDILLA
+ENCODING 291
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+18
+30
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7C
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ENCODING 292
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+C6
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER H WITH CIRCUMFLEX
+ENCODING 293
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+C0
+C0
+C0
+FC
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER H WITH STROKE
+ENCODING 294
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+FF
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER H WITH STROKE
+ENCODING 295
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+F0
+C0
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH TILDE
+ENCODING 296
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+32
+4C
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH TILDE
+ENCODING 297
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+32
+7E
+4C
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH MACRON
+ENCODING 298
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7E
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH MACRON
+ENCODING 299
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7E
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH BREVE
+ENCODING 300
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+66
+3C
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH BREVE
+ENCODING 301
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+3C
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH OGONEK
+ENCODING 302
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+18
+7E
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH OGONEK
+ENCODING 303
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+38
+18
+18
+18
+18
+18
+1C
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH DOT ABOVE
+ENCODING 304
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER DOTLESS I
+ENCODING 305
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LIGATURE IJ
+ENCODING 306
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+F7
+66
+66
+66
+66
+66
+66
+66
+66
+EC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LIGATURE IJ
+ENCODING 307
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+66
+66
+00
+E6
+66
+66
+66
+66
+66
+76
+06
+06
+1C
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ENCODING 308
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+F0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER J WITH CIRCUMFLEX
+ENCODING 309
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+3C
+66
+00
+18
+18
+18
+18
+18
+18
+18
+18
+18
+70
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER K WITH CEDILLA
+ENCODING 310
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+CC
+F8
+CC
+C6
+C6
+C6
+C6
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER K WITH CEDILLA
+ENCODING 311
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+C0
+CC
+D8
+F0
+F0
+D8
+CC
+C6
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER KRA
+ENCODING 312
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+CC
+D8
+F0
+D8
+CC
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER L WITH ACUTE
+ENCODING 313
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER L WITH ACUTE
+ENCODING 314
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+30
+30
+30
+30
+30
+30
+30
+30
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER L WITH CEDILLA
+ENCODING 315
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER L WITH CEDILLA
+ENCODING 316
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+30
+30
+30
+30
+30
+30
+30
+30
+30
+1C
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER L WITH CARON
+ENCODING 317
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER L WITH CARON
+ENCODING 318
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+30
+30
+30
+30
+30
+30
+30
+30
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER L WITH MIDDLE DOT
+ENCODING 319
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+C0
+C0
+C0
+CC
+CC
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER L WITH MIDDLE DOT
+ENCODING 320
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+30
+30
+30
+30
+36
+36
+30
+30
+30
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER L WITH STROKE
+ENCODING 321
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+60
+60
+68
+78
+70
+E0
+E0
+60
+60
+3E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER L WITH STROKE
+ENCODING 322
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+30
+30
+34
+3C
+38
+70
+70
+30
+30
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER N WITH ACUTE
+ENCODING 323
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+C6
+E6
+E6
+D6
+D6
+CE
+CE
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER N WITH ACUTE
+ENCODING 324
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER N WITH CEDILLA
+ENCODING 325
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+E6
+E6
+D6
+D6
+CE
+CE
+C6
+C6
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER N WITH CEDILLA
+ENCODING 326
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER N WITH CARON
+ENCODING 327
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+C6
+E6
+E6
+D6
+D6
+CE
+CE
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER N WITH CARON
+ENCODING 328
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+ENCODING 329
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+C0
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER ENG
+ENCODING 330
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+E6
+E6
+D6
+D6
+CE
+CE
+C6
+C6
+06
+06
+0C
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER ENG
+ENCODING 331
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+06
+06
+0C
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH MACRON
+ENCODING 332
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH MACRON
+ENCODING 333
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH BREVE
+ENCODING 334
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH BREVE
+ENCODING 335
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+6C
+38
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ENCODING 336
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+66
+CC
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ENCODING 337
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+36
+6C
+D8
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LIGATURE OE
+ENCODING 338
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+D8
+D8
+D8
+DE
+D8
+D8
+D8
+D8
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LIGATURE OE
+ENCODING 339
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+6E
+D6
+D6
+DE
+D0
+D0
+6E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER R WITH ACUTE
+ENCODING 340
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+FC
+C6
+C6
+C6
+FC
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER R WITH ACUTE
+ENCODING 341
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+7E
+C6
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER R WITH CEDILLA
+ENCODING 342
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+C6
+C6
+C6
+FC
+C6
+C6
+C6
+C6
+C6
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER R WITH CEDILLA
+ENCODING 343
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C0
+C0
+C0
+C0
+C0
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER R WITH CARON
+ENCODING 344
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+FC
+C6
+C6
+C6
+FC
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER R WITH CARON
+ENCODING 345
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+7E
+C6
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER S WITH ACUTE
+ENCODING 346
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+7E
+C0
+C0
+C0
+7C
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER S WITH ACUTE
+ENCODING 347
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+7E
+C0
+C0
+7C
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ENCODING 348
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7E
+C0
+C0
+C0
+7C
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER S WITH CIRCUMFLEX
+ENCODING 349
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+7E
+C0
+C0
+7C
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER S WITH CEDILLA
+ENCODING 350
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+7C
+06
+06
+06
+06
+FC
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER S WITH CEDILLA
+ENCODING 351
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C0
+C0
+7C
+06
+06
+FC
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER S WITH CARON
+ENCODING 352
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+7E
+C0
+C0
+C0
+7C
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER S WITH CARON
+ENCODING 353
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+7E
+C0
+C0
+7C
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER T WITH CEDILLA
+ENCODING 354
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FF
+18
+18
+18
+18
+18
+18
+18
+18
+18
+0C
+0C
+18
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER T WITH CEDILLA
+ENCODING 355
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+30
+30
+30
+7C
+30
+30
+30
+30
+30
+1E
+0C
+0C
+18
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER T WITH CARON
+ENCODING 356
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+FF
+18
+18
+18
+18
+18
+18
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER T WITH CARON
+ENCODING 357
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+30
+30
+7C
+30
+30
+30
+30
+30
+1E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER T WITH STROKE
+ENCODING 358
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FF
+18
+18
+18
+18
+7E
+18
+18
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER T WITH STROKE
+ENCODING 359
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+30
+30
+30
+7C
+30
+7C
+30
+30
+30
+1E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH TILDE
+ENCODING 360
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+32
+4C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH TILDE
+ENCODING 361
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+32
+7E
+4C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH MACRON
+ENCODING 362
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH MACRON
+ENCODING 363
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH BREVE
+ENCODING 364
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH BREVE
+ENCODING 365
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+6C
+38
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH RING ABOVE
+ENCODING 366
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+38
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH RING ABOVE
+ENCODING 367
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+38
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ENCODING 368
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+66
+CC
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ENCODING 369
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+36
+6C
+D8
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH OGONEK
+ENCODING 370
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH OGONEK
+ENCODING 371
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ENCODING 372
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+C6
+C6
+C6
+C6
+C6
+D6
+FE
+EE
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER W WITH CIRCUMFLEX
+ENCODING 373
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+C6
+C6
+D6
+D6
+D6
+D6
+6E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+ENCODING 374
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+C6
+C6
+C6
+C6
+7E
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ENCODING 375
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+10
+38
+6C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Y WITH DIAERESIS
+ENCODING 376
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+6C
+00
+C6
+C6
+C6
+C6
+7E
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Z WITH ACUTE
+ENCODING 377
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+FE
+06
+0C
+18
+30
+60
+C0
+C0
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Z WITH ACUTE
+ENCODING 378
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+FE
+06
+0C
+18
+30
+60
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ENCODING 379
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+00
+FE
+06
+0C
+18
+30
+60
+C0
+C0
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Z WITH DOT ABOVE
+ENCODING 380
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+FE
+06
+0C
+18
+30
+60
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER Z WITH CARON
+ENCODING 381
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+FE
+06
+0C
+18
+30
+60
+C0
+C0
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER Z WITH CARON
+ENCODING 382
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+FE
+06
+0C
+18
+30
+60
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER LONG S
+ENCODING 383
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+1E
+30
+30
+70
+30
+30
+30
+30
+30
+30
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER F WITH HOOK
+ENCODING 402
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+0E
+1B
+1B
+18
+18
+18
+7E
+18
+18
+18
+D8
+D8
+70
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH CARON
+ENCODING 461
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH CARON
+ENCODING 462
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH CARON
+ENCODING 463
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH CARON
+ENCODING 464
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH CARON
+ENCODING 465
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH CARON
+ENCODING 466
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH CARON
+ENCODING 467
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH CARON
+ENCODING 468
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER AE WITH MACRON
+ENCODING 482
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7C
+00
+7E
+D8
+D8
+D8
+FE
+D8
+D8
+D8
+DE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER AE WITH MACRON
+ENCODING 483
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+00
+6E
+16
+16
+7E
+D0
+D0
+6E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER G WITH CARON
+ENCODING 486
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+7E
+C0
+C0
+C0
+DE
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER G WITH CARON
+ENCODING 487
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7C
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER K WITH CARON
+ENCODING 488
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+C6
+C6
+C6
+CC
+F8
+CC
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER K WITH CARON
+ENCODING 489
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+C0
+C0
+CC
+D8
+F0
+F0
+D8
+CC
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH OGONEK
+ENCODING 490
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+18
+10
+0C
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH OGONEK
+ENCODING 491
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+18
+10
+0C
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+ENCODING 492
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+7C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+18
+10
+0C
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH OGONEK AND MACRON
+ENCODING 493
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+18
+10
+0C
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER J WITH CARON
+ENCODING 496
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+38
+10
+00
+18
+18
+18
+18
+18
+18
+18
+18
+18
+70
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER G WITH ACUTE
+ENCODING 500
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+7E
+C0
+C0
+C0
+DE
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER G WITH ACUTE
+ENCODING 501
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7C
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER AE WITH ACUTE
+ENCODING 508
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+00
+7E
+D8
+D8
+D8
+FE
+D8
+D8
+D8
+DE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER AE WITH ACUTE
+ENCODING 509
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+00
+6E
+16
+16
+7E
+D0
+D0
+6E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+ENCODING 510
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+30
+02
+7C
+CE
+CE
+D6
+D6
+E6
+E6
+C6
+7C
+80
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH STROKE AND ACUTE
+ENCODING 511
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0C
+18
+30
+02
+7C
+C6
+CE
+D6
+E6
+C6
+7C
+80
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+ENCODING 512
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+CC
+66
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH DOUBLE GRAVE
+ENCODING 513
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+D8
+6C
+36
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH INVERTED BREVE
+ENCODING 514
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH INVERTED BREVE
+ENCODING 515
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+6C
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+ENCODING 516
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+CC
+66
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH DOUBLE GRAVE
+ENCODING 517
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+D8
+6C
+36
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH INVERTED BREVE
+ENCODING 518
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH INVERTED BREVE
+ENCODING 519
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+6C
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+ENCODING 520
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+CC
+66
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH DOUBLE GRAVE
+ENCODING 521
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+D8
+6C
+36
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER I WITH INVERTED BREVE
+ENCODING 522
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+3C
+66
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER I WITH INVERTED BREVE
+ENCODING 523
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+3C
+66
+66
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+ENCODING 524
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+CC
+66
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH DOUBLE GRAVE
+ENCODING 525
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+D8
+6C
+36
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH INVERTED BREVE
+ENCODING 526
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH INVERTED BREVE
+ENCODING 527
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+6C
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+ENCODING 528
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+CC
+66
+00
+FC
+C6
+C6
+C6
+FC
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER R WITH DOUBLE GRAVE
+ENCODING 529
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+D8
+6C
+36
+00
+7E
+C6
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER R WITH INVERTED BREVE
+ENCODING 530
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+FC
+C6
+C6
+C6
+FC
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER R WITH INVERTED BREVE
+ENCODING 531
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+6C
+00
+7E
+C6
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+ENCODING 532
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+CC
+66
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH DOUBLE GRAVE
+ENCODING 533
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+D8
+6C
+36
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER U WITH INVERTED BREVE
+ENCODING 534
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+38
+6C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER U WITH INVERTED BREVE
+ENCODING 535
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+38
+6C
+6C
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER H WITH CARON
+ENCODING 542
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+C6
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER H WITH CARON
+ENCODING 543
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+10
+C0
+C0
+C0
+FC
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER A WITH DOT ABOVE
+ENCODING 550
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER A WITH DOT ABOVE
+ENCODING 551
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER E WITH CEDILLA
+ENCODING 552
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+C0
+7E
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER E WITH CEDILLA
+ENCODING 553
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+18
+18
+30
+00
+ENDCHAR
+STARTCHAR LATIN CAPITAL LETTER O WITH DOT ABOVE
+ENCODING 558
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LATIN SMALL LETTER O WITH DOT ABOVE
+ENCODING 559
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BREVE
+ENCODING 728
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DOT ABOVE
+ENCODING 729
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR OGONEK
+ENCODING 731
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+0C
+08
+06
+00
+ENDCHAR
+STARTCHAR SMALL TILDE
+ENCODING 732
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+32
+4C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DOUBLE ACUTE ACCENT
+ENCODING 733
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+66
+CC
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR COMBINING BREVE
+ENCODING 774
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR COMBINING DIAERESIS
+ENCODING 776
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+6C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK CAPITAL LETTER GAMMA
+ENCODING 915
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FE
+C6
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK CAPITAL LETTER THETA
+ENCODING 920
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+38
+6C
+C6
+C6
+FE
+C6
+C6
+C6
+6C
+38
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK CAPITAL LETTER SIGMA
+ENCODING 931
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FE
+C6
+60
+30
+18
+18
+30
+60
+C6
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK CAPITAL LETTER PHI
+ENCODING 934
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+10
+7C
+D6
+D6
+D6
+D6
+D6
+D6
+7C
+10
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK CAPITAL LETTER OMEGA
+ENCODING 937
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+38
+6C
+C6
+C6
+C6
+C6
+C6
+6C
+6C
+EE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK SMALL LETTER ALPHA
+ENCODING 945
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+76
+DC
+D8
+D8
+D8
+DC
+76
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK SMALL LETTER DELTA
+ENCODING 948
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+1E
+30
+18
+0C
+3C
+66
+66
+66
+66
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK SMALL LETTER EPSILON
+ENCODING 949
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+C6
+C0
+70
+C0
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK SMALL LETTER PI
+ENCODING 960
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FE
+6C
+6C
+6C
+6C
+6C
+6C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK SMALL LETTER SIGMA
+ENCODING 963
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+D8
+D8
+D8
+D8
+D8
+70
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK SMALL LETTER TAU
+ENCODING 964
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+18
+18
+18
+18
+18
+0C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREEK SMALL LETTER PHI
+ENCODING 966
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+4C
+D6
+D6
+D6
+D6
+D6
+7C
+10
+10
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER IO
+ENCODING 1025
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+6C
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+ENCODING 1030
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER YI
+ENCODING 1031
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+66
+66
+00
+7E
+18
+18
+18
+18
+18
+18
+18
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER SHORT U
+ENCODING 1038
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+C6
+C6
+C6
+C6
+7E
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER A
+ENCODING 1040
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER BE
+ENCODING 1041
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+C0
+C0
+C0
+FC
+C6
+C6
+C6
+C6
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER VE
+ENCODING 1042
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+C6
+C6
+C6
+FC
+C6
+C6
+C6
+C6
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER GHE
+ENCODING 1043
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER DE
+ENCODING 1044
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+1C
+3C
+6C
+6C
+6C
+6C
+6C
+6C
+FE
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER IE
+ENCODING 1045
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+F8
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER ZHE
+ENCODING 1046
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+D6
+D6
+D6
+7C
+38
+7C
+D6
+D6
+D6
+D6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER ZE
+ENCODING 1047
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+06
+06
+06
+3C
+06
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER I
+ENCODING 1048
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+CE
+CE
+D6
+D6
+E6
+E6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER SHORT I
+ENCODING 1049
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+6C
+38
+00
+C6
+CE
+CE
+D6
+D6
+E6
+E6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER KA
+ENCODING 1050
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+CC
+F8
+CC
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER EL
+ENCODING 1051
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER EM
+ENCODING 1052
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+EE
+FE
+D6
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER EN
+ENCODING 1053
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER O
+ENCODING 1054
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER PE
+ENCODING 1055
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FE
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER ER
+ENCODING 1056
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+C6
+C6
+C6
+FC
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER ES
+ENCODING 1057
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER TE
+ENCODING 1058
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FF
+18
+18
+18
+18
+18
+18
+18
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER U
+ENCODING 1059
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+7E
+06
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER EF
+ENCODING 1060
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+10
+7C
+D6
+D6
+D6
+D6
+D6
+D6
+7C
+10
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER HA
+ENCODING 1061
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+6C
+38
+6C
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER TSE
+ENCODING 1062
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7F
+03
+03
+06
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER CHE
+ENCODING 1063
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+7E
+06
+06
+06
+06
+06
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER SHA
+ENCODING 1064
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+D6
+D6
+D6
+D6
+D6
+D6
+D6
+D6
+D6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER SHCHA
+ENCODING 1065
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+D6
+D6
+D6
+D6
+D6
+D6
+D6
+D6
+D6
+7F
+03
+03
+06
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER HARD SIGN
+ENCODING 1066
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+F0
+F0
+30
+30
+3C
+36
+36
+36
+36
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER YERU
+ENCODING 1067
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C6
+C6
+C6
+C6
+F6
+DE
+DE
+DE
+DE
+F6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER SOFT SIGN
+ENCODING 1068
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+30
+30
+30
+30
+3C
+36
+36
+36
+36
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER E
+ENCODING 1069
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FC
+06
+06
+06
+3E
+06
+06
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER YU
+ENCODING 1070
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+CC
+D6
+D6
+D6
+F6
+F6
+D6
+D6
+D6
+CC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER YA
+ENCODING 1071
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+C6
+C6
+C6
+7E
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER A
+ENCODING 1072
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+06
+7E
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER BE
+ENCODING 1073
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+C0
+FC
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER VE
+ENCODING 1074
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+70
+D8
+D8
+D8
+FC
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER GHE
+ENCODING 1075
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+06
+06
+7C
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER DE
+ENCODING 1076
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+C6
+C6
+C6
+7E
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER IE
+ENCODING 1077
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER ZHE
+ENCODING 1078
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+D6
+7C
+38
+38
+7C
+D6
+D6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER ZE
+ENCODING 1079
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+06
+06
+3C
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER I
+ENCODING 1080
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER SHORT I
+ENCODING 1081
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+6C
+38
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER KA
+ENCODING 1082
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+CC
+CC
+D8
+F0
+F0
+D8
+CC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER EL
+ENCODING 1083
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER EM
+ENCODING 1084
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+EE
+FE
+D6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER EN
+ENCODING 1085
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+FE
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER O
+ENCODING 1086
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER PE
+ENCODING 1087
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER ER
+ENCODING 1088
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+C6
+C6
+C6
+C6
+C6
+FC
+C0
+C0
+C0
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER ES
+ENCODING 1089
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C0
+C0
+C0
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER TE
+ENCODING 1090
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+EC
+D6
+D6
+D6
+D6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER U
+ENCODING 1091
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER EF
+ENCODING 1092
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7C
+D6
+D6
+D6
+D6
+D6
+7C
+10
+10
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER HA
+ENCODING 1093
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+6C
+38
+38
+6C
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER TSE
+ENCODING 1094
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7F
+03
+03
+06
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER CHE
+ENCODING 1095
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+C6
+7E
+06
+06
+06
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER SHA
+ENCODING 1096
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+D6
+D6
+D6
+D6
+6E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER SHCHA
+ENCODING 1097
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+D6
+D6
+D6
+D6
+6F
+03
+03
+06
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER HARD SIGN
+ENCODING 1098
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+F0
+30
+3C
+36
+36
+36
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER YERU
+ENCODING 1099
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+C6
+C6
+F6
+DE
+DE
+DE
+F6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER SOFT SIGN
+ENCODING 1100
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+30
+30
+3C
+36
+36
+36
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER E
+ENCODING 1101
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FC
+06
+06
+3E
+06
+06
+FC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER YU
+ENCODING 1102
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+CC
+D6
+D6
+F6
+D6
+D6
+CC
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER YA
+ENCODING 1103
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+C6
+C6
+7E
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER IO
+ENCODING 1105
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+6C
+6C
+00
+7E
+C6
+C6
+FE
+C0
+C0
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+ENCODING 1110
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER YI
+ENCODING 1111
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+66
+66
+00
+38
+18
+18
+18
+18
+18
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER SHORT U
+ENCODING 1118
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+6C
+6C
+38
+00
+C6
+C6
+C6
+C6
+C6
+C6
+7E
+06
+06
+FC
+00
+ENDCHAR
+STARTCHAR CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+ENCODING 1168
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+06
+06
+7C
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR CYRILLIC SMALL LETTER GHE WITH UPTURN
+ENCODING 1169
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+06
+06
+7C
+C0
+C0
+C0
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DOUBLE VERTICAL LINE
+ENCODING 8214
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+66
+66
+66
+66
+66
+66
+66
+66
+66
+66
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFT SINGLE QUOTATION MARK
+ENCODING 8216
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+18
+18
+18
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHT SINGLE QUOTATION MARK
+ENCODING 8217
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+18
+18
+18
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFT DOUBLE QUOTATION MARK
+ENCODING 8220
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHT DOUBLE QUOTATION MARK
+ENCODING 8221
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BULLET
+ENCODING 8226
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+18
+3C
+3C
+18
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR HORIZONTAL ELLIPSIS
+ENCODING 8230
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+DB
+DB
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ENCODING 8249
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+0C
+18
+30
+18
+0C
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ENCODING 8250
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+30
+18
+0C
+18
+30
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DOUBLE EXCLAMATION MARK
+ENCODING 8252
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+66
+66
+66
+66
+66
+66
+66
+00
+66
+66
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SUPERSCRIPT LATIN SMALL LETTER N
+ENCODING 8319
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+78
+6C
+6C
+6C
+6C
+6C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR PESETA SIGN
+ENCODING 8359
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+F8
+CC
+CC
+F8
+C0
+CC
+DE
+CC
+CC
+CC
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR EURO SIGN
+ENCODING 8364
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+1C
+36
+60
+F8
+60
+F8
+60
+36
+1C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFTWARDS ARROW
+ENCODING 8592
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+20
+40
+FE
+40
+20
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR UPWARDS ARROW
+ENCODING 8593
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+3C
+5A
+18
+18
+18
+18
+18
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHTWARDS ARROW
+ENCODING 8594
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+08
+04
+FE
+04
+08
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DOWNWARDS ARROW
+ENCODING 8595
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+18
+18
+18
+18
+18
+5A
+3C
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFT RIGHT ARROW
+ENCODING 8596
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+28
+44
+FE
+44
+28
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR UP DOWN ARROW
+ENCODING 8597
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+3C
+5A
+18
+18
+18
+18
+5A
+3C
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR UP DOWN ARROW WITH BASE
+ENCODING 8616
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+3C
+5A
+18
+18
+18
+18
+5A
+3C
+18
+7E
+00
+00
+00
+ENDCHAR
+STARTCHAR BULLET OPERATOR
+ENCODING 8729
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+38
+38
+38
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR SQUARE ROOT
+ENCODING 8730
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+0F
+0C
+0C
+0C
+0C
+0C
+CC
+6C
+3C
+1C
+0C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR INFINITY
+ENCODING 8734
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+7E
+DB
+DB
+DB
+7E
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR INTERSECTION
+ENCODING 8745
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+7C
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR UNION
+ENCODING 8746
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+C6
+7C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR ALMOST EQUAL TO
+ENCODING 8776
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+32
+4C
+00
+32
+4C
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR IDENTICAL TO
+ENCODING 8801
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+7E
+00
+00
+7E
+00
+00
+7E
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LESS-THAN OR EQUAL TO
+ENCODING 8804
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+0C
+18
+30
+18
+0C
+00
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR GREATER-THAN OR EQUAL TO
+ENCODING 8805
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+30
+18
+0C
+18
+30
+00
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR HOUSE
+ENCODING 8962
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+10
+38
+6C
+C6
+C6
+C6
+FE
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR REVERSED NOT SIGN
+ENCODING 8976
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+FE
+C0
+C0
+C0
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TURNED NOT SIGN
+ENCODING 8985
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+C0
+C0
+C0
+FE
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TOP HALF INTEGRAL
+ENCODING 8992
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+0E
+1B
+1B
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOTTOM HALF INTEGRAL
+ENCODING 8993
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+18
+18
+D8
+D8
+70
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT HORIZONTAL
+ENCODING 9472
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY HORIZONTAL
+ENCODING 9473
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+FF
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT VERTICAL
+ENCODING 9474
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY VERTICAL
+ENCODING 9475
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+ENCODING 9476
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+DB
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+ENCODING 9477
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+DB
+DB
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+ENCODING 9478
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+18
+18
+00
+00
+18
+18
+18
+00
+00
+18
+18
+18
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+ENCODING 9479
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+1C
+1C
+1C
+00
+00
+1C
+1C
+1C
+00
+00
+1C
+1C
+1C
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+ENCODING 9480
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+AA
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+ENCODING 9481
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+AA
+AA
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+ENCODING 9482
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+18
+00
+00
+18
+18
+00
+00
+18
+18
+00
+00
+18
+18
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+ENCODING 9483
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+1C
+1C
+00
+00
+1C
+1C
+00
+00
+1C
+1C
+00
+00
+1C
+1C
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DOWN AND RIGHT
+ENCODING 9484
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+1F
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+ENCODING 9485
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+1F
+1F
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+ENCODING 9486
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY DOWN AND RIGHT
+ENCODING 9487
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+1F
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DOWN AND LEFT
+ENCODING 9488
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+F8
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+ENCODING 9489
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+F8
+F8
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+ENCODING 9490
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY DOWN AND LEFT
+ENCODING 9491
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FC
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT UP AND RIGHT
+ENCODING 9492
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+1F
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+ENCODING 9493
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+1F
+1F
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+ENCODING 9494
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1F
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY UP AND RIGHT
+ENCODING 9495
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1F
+1F
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT UP AND LEFT
+ENCODING 9496
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+F8
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+ENCODING 9497
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+F8
+F8
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+ENCODING 9498
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FC
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY UP AND LEFT
+ENCODING 9499
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FC
+FC
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ENCODING 9500
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+1F
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+ENCODING 9501
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+1F
+1F
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+ENCODING 9502
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1F
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+ENCODING 9503
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+ENCODING 9504
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+ENCODING 9505
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1F
+1F
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+ENCODING 9506
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+1F
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+ENCODING 9507
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1F
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ENCODING 9508
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+F8
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+ENCODING 9509
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+F8
+F8
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+ENCODING 9510
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FC
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+ENCODING 9511
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+ENCODING 9512
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+ENCODING 9513
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FC
+FC
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+ENCODING 9514
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FC
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY VERTICAL AND LEFT
+ENCODING 9515
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FC
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ENCODING 9516
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+ENCODING 9517
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+F8
+FF
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+ENCODING 9518
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+1F
+FF
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+ENCODING 9519
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+FF
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+ENCODING 9520
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+ENCODING 9521
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+ENCODING 9522
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+ENCODING 9523
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+FF
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ENCODING 9524
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+ENCODING 9525
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+F8
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+ENCODING 9526
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+1F
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+ENCODING 9527
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+FF
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+ENCODING 9528
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+ENCODING 9529
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+FC
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+ENCODING 9530
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+1F
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY UP AND HORIZONTAL
+ENCODING 9531
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+FF
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ENCODING 9532
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+ENCODING 9533
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+F8
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+ENCODING 9534
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+1F
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+ENCODING 9535
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+FF
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+ENCODING 9536
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+ENCODING 9537
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+ENCODING 9538
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+ENCODING 9539
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+F8
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+ENCODING 9540
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+1F
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+ENCODING 9541
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+ENCODING 9542
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+ENCODING 9543
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+FF
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+ENCODING 9544
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+FF
+FF
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+ENCODING 9545
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+FC
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+ENCODING 9546
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+1F
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+ENCODING 9547
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+FF
+FF
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+ENCODING 9548
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+EE
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+ENCODING 9549
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+EE
+EE
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+ENCODING 9550
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+18
+18
+18
+18
+18
+18
+00
+00
+18
+18
+18
+18
+18
+18
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+ENCODING 9551
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+1C
+1C
+1C
+1C
+1C
+1C
+00
+00
+1C
+1C
+1C
+1C
+1C
+1C
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE HORIZONTAL
+ENCODING 9552
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+FF
+00
+FF
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE VERTICAL
+ENCODING 9553
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+36
+36
+36
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+ENCODING 9554
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+1F
+18
+1F
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+ENCODING 9555
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+3F
+36
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE DOWN AND RIGHT
+ENCODING 9556
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+3F
+30
+37
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+ENCODING 9557
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+F8
+18
+F8
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+ENCODING 9558
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FE
+36
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE DOWN AND LEFT
+ENCODING 9559
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+FE
+06
+F6
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+ENCODING 9560
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+1F
+18
+1F
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+ENCODING 9561
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+36
+3F
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE UP AND RIGHT
+ENCODING 9562
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+37
+30
+3F
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+ENCODING 9563
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+F8
+18
+F8
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+ENCODING 9564
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+36
+FE
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE UP AND LEFT
+ENCODING 9565
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+F6
+06
+FE
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+ENCODING 9566
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+1F
+18
+1F
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+ENCODING 9567
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+36
+37
+36
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+ENCODING 9568
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+37
+30
+37
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+ENCODING 9569
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+F8
+18
+F8
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+ENCODING 9570
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+36
+F6
+36
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+ENCODING 9571
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+F6
+06
+F6
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+ENCODING 9572
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+FF
+00
+FF
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+ENCODING 9573
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+36
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+ENCODING 9574
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+FF
+00
+F7
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+ENCODING 9575
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+FF
+00
+FF
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+ENCODING 9576
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+36
+FF
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+ENCODING 9577
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+F7
+00
+FF
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ENCODING 9578
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+FF
+18
+FF
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+ENCODING 9579
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+36
+FF
+36
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+ENCODING 9580
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+36
+36
+36
+36
+36
+36
+F7
+00
+F7
+36
+36
+36
+36
+36
+36
+36
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+ENCODING 9581
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+0F
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+ENCODING 9582
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+F0
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT ARC UP AND LEFT
+ENCODING 9583
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+F0
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT ARC UP AND RIGHT
+ENCODING 9584
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+0F
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+ENCODING 9585
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+01
+03
+03
+06
+06
+0C
+0C
+18
+18
+30
+30
+60
+60
+C0
+C0
+80
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+ENCODING 9586
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+80
+C0
+C0
+60
+60
+30
+30
+18
+18
+0C
+0C
+06
+06
+03
+03
+01
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DIAGONAL CROSS
+ENCODING 9587
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+81
+C3
+C3
+66
+66
+3C
+3C
+18
+18
+3C
+3C
+66
+66
+C3
+C3
+81
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT LEFT
+ENCODING 9588
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+F0
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT UP
+ENCODING 9589
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+18
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT RIGHT
+ENCODING 9590
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+0F
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT DOWN
+ENCODING 9591
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY LEFT
+ENCODING 9592
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+F0
+F0
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY UP
+ENCODING 9593
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY RIGHT
+ENCODING 9594
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+0F
+0F
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY DOWN
+ENCODING 9595
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+ENCODING 9596
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+0F
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+ENCODING 9597
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+18
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+ENCODING 9598
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+FF
+F0
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+ENCODING 9599
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+1C
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR UPPER HALF BLOCK
+ENCODING 9600
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LOWER ONE EIGHTH BLOCK
+ENCODING 9601
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+FF
+FF
+ENDCHAR
+STARTCHAR LOWER ONE QUARTER BLOCK
+ENCODING 9602
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR LOWER THREE EIGHTHS BLOCK
+ENCODING 9603
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR LOWER HALF BLOCK
+ENCODING 9604
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR LOWER FIVE EIGHTHS BLOCK
+ENCODING 9605
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR LOWER THREE QUARTERS BLOCK
+ENCODING 9606
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR LOWER SEVEN EIGHTHS BLOCK
+ENCODING 9607
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR FULL BLOCK
+ENCODING 9608
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR LEFT SEVEN EIGHTHS BLOCK
+ENCODING 9609
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+FE
+ENDCHAR
+STARTCHAR LEFT THREE QUARTERS BLOCK
+ENCODING 9610
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+FC
+ENDCHAR
+STARTCHAR LEFT FIVE EIGHTHS BLOCK
+ENCODING 9611
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+ENDCHAR
+STARTCHAR LEFT HALF BLOCK
+ENCODING 9612
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+ENDCHAR
+STARTCHAR LEFT THREE EIGHTHS BLOCK
+ENCODING 9613
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+E0
+ENDCHAR
+STARTCHAR LEFT ONE QUARTER BLOCK
+ENCODING 9614
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR LEFT ONE EIGHTH BLOCK
+ENCODING 9615
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+ENDCHAR
+STARTCHAR RIGHT HALF BLOCK
+ENCODING 9616
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+ENDCHAR
+STARTCHAR LIGHT SHADE
+ENCODING 9617
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+11
+44
+11
+44
+11
+44
+11
+44
+11
+44
+11
+44
+11
+44
+11
+44
+ENDCHAR
+STARTCHAR MEDIUM SHADE
+ENCODING 9618
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+55
+AA
+55
+AA
+55
+AA
+55
+AA
+55
+AA
+55
+AA
+55
+AA
+55
+AA
+ENDCHAR
+STARTCHAR DARK SHADE
+ENCODING 9619
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+DD
+77
+DD
+77
+DD
+77
+DD
+77
+DD
+77
+DD
+77
+DD
+77
+DD
+77
+ENDCHAR
+STARTCHAR UPPER ONE EIGHTH BLOCK
+ENCODING 9620
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+FF
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHT ONE EIGHTH BLOCK
+ENCODING 9621
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+01
+01
+01
+01
+01
+01
+01
+01
+01
+01
+01
+01
+01
+01
+01
+01
+ENDCHAR
+STARTCHAR QUADRANT LOWER LEFT
+ENCODING 9622
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+ENDCHAR
+STARTCHAR QUADRANT LOWER RIGHT
+ENCODING 9623
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+ENDCHAR
+STARTCHAR QUADRANT UPPER LEFT
+ENCODING 9624
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+ENCODING 9625
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR QUADRANT UPPER LEFT AND LOWER RIGHT
+ENCODING 9626
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+ENDCHAR
+STARTCHAR QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+ENCODING 9627
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+ENDCHAR
+STARTCHAR QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+ENCODING 9628
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+ENDCHAR
+STARTCHAR QUADRANT UPPER RIGHT
+ENCODING 9629
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR QUADRANT UPPER RIGHT AND LOWER LEFT
+ENCODING 9630
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+ENDCHAR
+STARTCHAR QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+ENCODING 9631
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+0F
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR BLACK SQUARE
+ENCODING 9632
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+7C
+7C
+7C
+7C
+7C
+7C
+7C
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK RECTANGLE
+ENCODING 9644
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+FE
+FE
+FE
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK UP-POINTING TRIANGLE
+ENCODING 9650
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+10
+38
+38
+7C
+7C
+FE
+FE
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK DOWN-POINTING TRIANGLE
+ENCODING 9660
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+FE
+FE
+7C
+7C
+38
+38
+10
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK DIAMOND
+ENCODING 9670
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+10
+38
+7C
+FE
+7C
+38
+10
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LOZENGE
+ENCODING 9674
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+10
+38
+6C
+C6
+6C
+38
+10
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR WHITE CIRCLE
+ENCODING 9675
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+3C
+66
+66
+66
+66
+3C
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK CIRCLE
+ENCODING 9679
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+3C
+7E
+7E
+7E
+7E
+3C
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR INVERSE BULLET
+ENCODING 9688
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+FF
+FF
+FF
+FF
+FF
+E7
+C3
+C3
+E7
+FF
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR INVERSE WHITE CIRCLE
+ENCODING 9689
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+FF
+FF
+FF
+FF
+C3
+99
+99
+99
+99
+C3
+FF
+FF
+FF
+FF
+FF
+ENDCHAR
+STARTCHAR BLACK LOWER RIGHT TRIANGLE
+ENCODING 9698
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+80
+C0
+E0
+F0
+F8
+FC
+FE
+FF
+ENDCHAR
+STARTCHAR BLACK LOWER LEFT TRIANGLE
+ENCODING 9699
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+01
+03
+07
+0F
+1F
+3F
+7F
+FF
+ENDCHAR
+STARTCHAR BLACK UPPER LEFT TRIANGLE
+ENCODING 9700
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+FE
+FC
+F8
+F0
+E0
+C0
+80
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK UPPER RIGHT TRIANGLE
+ENCODING 9701
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+FF
+7F
+3F
+1F
+0F
+07
+03
+01
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TRIGRAM FOR HEAVEN
+ENCODING 9776
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+7E
+00
+00
+7E
+00
+00
+7E
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TRIGRAM FOR LAKE
+ENCODING 9777
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+66
+00
+00
+7E
+00
+00
+7E
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TRIGRAM FOR FIRE
+ENCODING 9778
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+7E
+00
+00
+66
+00
+00
+7E
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TRIGRAM FOR THUNDER
+ENCODING 9779
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+66
+00
+00
+66
+00
+00
+7E
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TRIGRAM FOR WIND
+ENCODING 9780
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+7E
+00
+00
+7E
+00
+00
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TRIGRAM FOR WATER
+ENCODING 9781
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+66
+00
+00
+7E
+00
+00
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TRIGRAM FOR MOUNTAIN
+ENCODING 9782
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+7E
+00
+00
+66
+00
+00
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR TRIGRAM FOR EARTH
+ENCODING 9783
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+66
+00
+00
+66
+00
+00
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR WHITE SMILING FACE
+ENCODING 9786
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+81
+A5
+81
+81
+A5
+99
+81
+81
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK SMILING FACE
+ENCODING 9787
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+FF
+DB
+FF
+FF
+DB
+E7
+FF
+FF
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR WHITE SUN WITH RAYS
+ENCODING 9788
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+18
+18
+DB
+3C
+E7
+3C
+DB
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR FEMALE SIGN
+ENCODING 9792
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+3C
+66
+66
+66
+66
+3C
+18
+3C
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR MALE SIGN
+ENCODING 9794
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+0F
+07
+0D
+19
+3C
+66
+66
+66
+66
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK SPADE SUIT
+ENCODING 9824
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+18
+3C
+7E
+FF
+FF
+7E
+18
+18
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK CLUB SUIT
+ENCODING 9827
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+18
+3C
+3C
+E7
+E7
+E7
+18
+18
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK HEART SUIT
+ENCODING 9829
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+6C
+FE
+FE
+FE
+7C
+38
+10
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BLACK DIAMOND SUIT
+ENCODING 9830
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+10
+38
+7C
+FE
+7C
+38
+10
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR EIGHTH NOTE
+ENCODING 9834
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+66
+7E
+60
+60
+60
+60
+60
+C0
+C0
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BEAMED EIGHTH NOTES
+ENCODING 9835
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+7E
+66
+7E
+66
+66
+66
+66
+66
+6E
+CC
+C0
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN BLANK
+ENCODING 10240
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1
+ENCODING 10241
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2
+ENCODING 10242
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12
+ENCODING 10243
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3
+ENCODING 10244
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13
+ENCODING 10245
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23
+ENCODING 10246
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123
+ENCODING 10247
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-4
+ENCODING 10248
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-14
+ENCODING 10249
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-24
+ENCODING 10250
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-124
+ENCODING 10251
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-34
+ENCODING 10252
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-134
+ENCODING 10253
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-234
+ENCODING 10254
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1234
+ENCODING 10255
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-5
+ENCODING 10256
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-15
+ENCODING 10257
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-25
+ENCODING 10258
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-125
+ENCODING 10259
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-35
+ENCODING 10260
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-135
+ENCODING 10261
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-235
+ENCODING 10262
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1235
+ENCODING 10263
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-45
+ENCODING 10264
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-145
+ENCODING 10265
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-245
+ENCODING 10266
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1245
+ENCODING 10267
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-345
+ENCODING 10268
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1345
+ENCODING 10269
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2345
+ENCODING 10270
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12345
+ENCODING 10271
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-6
+ENCODING 10272
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-16
+ENCODING 10273
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-26
+ENCODING 10274
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-126
+ENCODING 10275
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-36
+ENCODING 10276
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-136
+ENCODING 10277
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-236
+ENCODING 10278
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1236
+ENCODING 10279
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-46
+ENCODING 10280
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-146
+ENCODING 10281
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-246
+ENCODING 10282
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1246
+ENCODING 10283
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-346
+ENCODING 10284
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1346
+ENCODING 10285
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2346
+ENCODING 10286
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12346
+ENCODING 10287
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-56
+ENCODING 10288
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-156
+ENCODING 10289
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-256
+ENCODING 10290
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1256
+ENCODING 10291
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-356
+ENCODING 10292
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1356
+ENCODING 10293
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2356
+ENCODING 10294
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12356
+ENCODING 10295
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-456
+ENCODING 10296
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1456
+ENCODING 10297
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2456
+ENCODING 10298
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12456
+ENCODING 10299
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3456
+ENCODING 10300
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13456
+ENCODING 10301
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23456
+ENCODING 10302
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123456
+ENCODING 10303
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-7
+ENCODING 10304
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-17
+ENCODING 10305
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-27
+ENCODING 10306
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-127
+ENCODING 10307
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-37
+ENCODING 10308
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-137
+ENCODING 10309
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-237
+ENCODING 10310
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1237
+ENCODING 10311
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-47
+ENCODING 10312
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-147
+ENCODING 10313
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-247
+ENCODING 10314
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1247
+ENCODING 10315
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-347
+ENCODING 10316
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1347
+ENCODING 10317
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2347
+ENCODING 10318
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12347
+ENCODING 10319
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-57
+ENCODING 10320
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-157
+ENCODING 10321
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-257
+ENCODING 10322
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1257
+ENCODING 10323
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-357
+ENCODING 10324
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1357
+ENCODING 10325
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2357
+ENCODING 10326
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12357
+ENCODING 10327
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-457
+ENCODING 10328
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1457
+ENCODING 10329
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2457
+ENCODING 10330
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12457
+ENCODING 10331
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3457
+ENCODING 10332
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13457
+ENCODING 10333
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23457
+ENCODING 10334
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123457
+ENCODING 10335
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-67
+ENCODING 10336
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-167
+ENCODING 10337
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-267
+ENCODING 10338
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1267
+ENCODING 10339
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-367
+ENCODING 10340
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1367
+ENCODING 10341
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2367
+ENCODING 10342
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12367
+ENCODING 10343
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-467
+ENCODING 10344
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1467
+ENCODING 10345
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2467
+ENCODING 10346
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12467
+ENCODING 10347
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3467
+ENCODING 10348
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13467
+ENCODING 10349
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23467
+ENCODING 10350
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123467
+ENCODING 10351
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-567
+ENCODING 10352
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1567
+ENCODING 10353
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2567
+ENCODING 10354
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12567
+ENCODING 10355
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3567
+ENCODING 10356
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13567
+ENCODING 10357
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23567
+ENCODING 10358
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123567
+ENCODING 10359
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-4567
+ENCODING 10360
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-14567
+ENCODING 10361
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-24567
+ENCODING 10362
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-124567
+ENCODING 10363
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-34567
+ENCODING 10364
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-134567
+ENCODING 10365
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-234567
+ENCODING 10366
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1234567
+ENCODING 10367
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+60
+60
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-8
+ENCODING 10368
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-18
+ENCODING 10369
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-28
+ENCODING 10370
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-128
+ENCODING 10371
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-38
+ENCODING 10372
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-138
+ENCODING 10373
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-238
+ENCODING 10374
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1238
+ENCODING 10375
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-48
+ENCODING 10376
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-148
+ENCODING 10377
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-248
+ENCODING 10378
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1248
+ENCODING 10379
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-348
+ENCODING 10380
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1348
+ENCODING 10381
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2348
+ENCODING 10382
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12348
+ENCODING 10383
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-58
+ENCODING 10384
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-158
+ENCODING 10385
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-258
+ENCODING 10386
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1258
+ENCODING 10387
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-358
+ENCODING 10388
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1358
+ENCODING 10389
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2358
+ENCODING 10390
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12358
+ENCODING 10391
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-458
+ENCODING 10392
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1458
+ENCODING 10393
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2458
+ENCODING 10394
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12458
+ENCODING 10395
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3458
+ENCODING 10396
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13458
+ENCODING 10397
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23458
+ENCODING 10398
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123458
+ENCODING 10399
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-68
+ENCODING 10400
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-168
+ENCODING 10401
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-268
+ENCODING 10402
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1268
+ENCODING 10403
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-368
+ENCODING 10404
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1368
+ENCODING 10405
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2368
+ENCODING 10406
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12368
+ENCODING 10407
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-468
+ENCODING 10408
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1468
+ENCODING 10409
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2468
+ENCODING 10410
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12468
+ENCODING 10411
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3468
+ENCODING 10412
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13468
+ENCODING 10413
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23468
+ENCODING 10414
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123468
+ENCODING 10415
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-568
+ENCODING 10416
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1568
+ENCODING 10417
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2568
+ENCODING 10418
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12568
+ENCODING 10419
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3568
+ENCODING 10420
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13568
+ENCODING 10421
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23568
+ENCODING 10422
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123568
+ENCODING 10423
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-4568
+ENCODING 10424
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-14568
+ENCODING 10425
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-24568
+ENCODING 10426
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-124568
+ENCODING 10427
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-34568
+ENCODING 10428
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-134568
+ENCODING 10429
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-234568
+ENCODING 10430
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1234568
+ENCODING 10431
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+06
+06
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-78
+ENCODING 10432
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-178
+ENCODING 10433
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-278
+ENCODING 10434
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1278
+ENCODING 10435
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-378
+ENCODING 10436
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1378
+ENCODING 10437
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2378
+ENCODING 10438
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12378
+ENCODING 10439
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-478
+ENCODING 10440
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1478
+ENCODING 10441
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2478
+ENCODING 10442
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12478
+ENCODING 10443
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3478
+ENCODING 10444
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13478
+ENCODING 10445
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23478
+ENCODING 10446
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123478
+ENCODING 10447
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-578
+ENCODING 10448
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1578
+ENCODING 10449
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2578
+ENCODING 10450
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12578
+ENCODING 10451
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3578
+ENCODING 10452
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13578
+ENCODING 10453
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23578
+ENCODING 10454
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123578
+ENCODING 10455
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-4578
+ENCODING 10456
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-14578
+ENCODING 10457
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-24578
+ENCODING 10458
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-124578
+ENCODING 10459
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+00
+00
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-34578
+ENCODING 10460
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-134578
+ENCODING 10461
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-234578
+ENCODING 10462
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1234578
+ENCODING 10463
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+60
+60
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-678
+ENCODING 10464
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1678
+ENCODING 10465
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2678
+ENCODING 10466
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12678
+ENCODING 10467
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-3678
+ENCODING 10468
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-13678
+ENCODING 10469
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-23678
+ENCODING 10470
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-123678
+ENCODING 10471
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-4678
+ENCODING 10472
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-14678
+ENCODING 10473
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-24678
+ENCODING 10474
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-124678
+ENCODING 10475
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-34678
+ENCODING 10476
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-134678
+ENCODING 10477
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+00
+00
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-234678
+ENCODING 10478
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1234678
+ENCODING 10479
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+60
+60
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-5678
+ENCODING 10480
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-15678
+ENCODING 10481
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-25678
+ENCODING 10482
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-125678
+ENCODING 10483
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-35678
+ENCODING 10484
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-135678
+ENCODING 10485
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-235678
+ENCODING 10486
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1235678
+ENCODING 10487
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+60
+60
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-45678
+ENCODING 10488
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-145678
+ENCODING 10489
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-245678
+ENCODING 10490
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1245678
+ENCODING 10491
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+06
+06
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-345678
+ENCODING 10492
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-1345678
+ENCODING 10493
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+06
+06
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-2345678
+ENCODING 10494
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+06
+06
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR BRAILLE PATTERN DOTS-12345678
+ENCODING 10495
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+66
+66
+00
+00
+66
+66
+00
+00
+66
+66
+00
+00
+66
+66
+00
+ENDCHAR
+STARTCHAR UPWARDS BLACK ARROW
+ENCODING 11014
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+3C
+7E
+FF
+3C
+3C
+3C
+3C
+3C
+3C
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DOWNWARDS BLACK ARROW
+ENCODING 11015
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+3C
+3C
+3C
+3C
+3C
+3C
+FF
+7E
+3C
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFTWARDS TRIANGLE-HEADED ARROW
+ENCODING 11104
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+20
+60
+FE
+60
+20
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR UPWARDS TRIANGLE-HEADED ARROW
+ENCODING 11105
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+3C
+7E
+18
+18
+18
+18
+18
+18
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR RIGHTWARDS TRIANGLE-HEADED ARROW
+ENCODING 11106
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+08
+0C
+FE
+0C
+08
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR DOWNWARDS TRIANGLE-HEADED ARROW
+ENCODING 11107
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+18
+18
+18
+18
+18
+18
+7E
+3C
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR LEFT RIGHT TRIANGLE-HEADED ARROW
+ENCODING 11108
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+00
+00
+00
+28
+6C
+FE
+6C
+28
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR UP DOWN TRIANGLE-HEADED ARROW
+ENCODING 11109
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+3C
+7E
+18
+18
+18
+18
+7E
+3C
+18
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR char57504
+ENCODING 57504
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+C0
+CC
+DE
+CC
+CC
+CC
+98
+30
+60
+C0
+C0
+C0
+00
+00
+ENDCHAR
+STARTCHAR char57505
+ENCODING 57505
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+40
+40
+40
+40
+40
+38
+00
+12
+1A
+1A
+16
+16
+12
+00
+00
+ENDCHAR
+STARTCHAR char57506
+ENCODING 57506
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+00
+00
+18
+24
+24
+24
+7E
+7E
+66
+66
+7E
+7E
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR char57520
+ENCODING 57520
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+80
+C0
+E0
+F0
+F8
+FC
+FE
+FF
+FF
+FE
+FC
+F8
+F0
+E0
+C0
+80
+ENDCHAR
+STARTCHAR char57521
+ENCODING 57521
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+80
+C0
+60
+30
+18
+0C
+06
+03
+03
+06
+0C
+18
+30
+60
+C0
+80
+ENDCHAR
+STARTCHAR char57522
+ENCODING 57522
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+01
+03
+07
+0F
+1F
+3F
+7F
+FF
+FF
+7F
+3F
+1F
+0F
+07
+03
+01
+ENDCHAR
+STARTCHAR char57523
+ENCODING 57523
+SWIDTH 500 0
+DWIDTH 8 0
+BBX 8 16 0 -4
+BITMAP
+01
+03
+06
+0C
+18
+30
+60
+C0
+C0
+60
+30
+18
+0C
+06
+03
+01
+ENDCHAR
+ENDFONT
diff --git a/crates/ghostty-font/res/spleen-8x16.otb b/crates/ghostty-font/res/spleen-8x16.otb
new file mode 100644
index 0000000..229b7ab
Binary files /dev/null and b/crates/ghostty-font/res/spleen-8x16.otb differ
diff --git a/crates/ghostty-font/res/spleen-8x16.pcf b/crates/ghostty-font/res/spleen-8x16.pcf
new file mode 100644
index 0000000..1c4fbd3
Binary files /dev/null and b/crates/ghostty-font/res/spleen-8x16.pcf differ
diff --git a/crates/ghostty-font/src/backend.rs b/crates/ghostty-font/src/backend.rs
new file mode 100644
index 0000000..dfbc495
--- /dev/null
+++ b/crates/ghostty-font/src/backend.rs
@@ -0,0 +1,91 @@
+//! Font backend selection. Port of `font/backend.zig`.
+//!
+//! The Rust rewrite only targets Linux, so [`OPTIONS`] always selects
+//! [`Backend::FontconfigFreetype`] (fontconfig discovery, FreeType rendering,
+//! HarfBuzz shaping). The other variants are kept for fidelity with the Zig
+//! enum and its helper predicates.
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub enum Backend {
+ /// FreeType for font rendering with no font discovery enabled.
+ Freetype,
+ /// Fontconfig for font discovery and FreeType for font rendering.
+ FontconfigFreetype,
+ /// CoreText for font discovery, rendering, and shaping (macOS).
+ Coretext,
+ /// CoreText for font discovery, FreeType for rendering, and
+ /// HarfBuzz for shaping (macOS).
+ CoretextFreetype,
+ /// CoreText for font discovery and rendering, HarfBuzz for shaping
+ CoretextHarfbuzz,
+ /// CoreText for font discovery and rendering, no shaping.
+ CoretextNoshape,
+ /// Use the browser font system and the Canvas API (wasm).
+ WebCanvas,
+}
+
+impl Backend {
+ /// Returns the default backend for a build environment.
+ pub fn default_for_target() -> Backend {
+ if cfg!(target_os = "macos") {
+ Backend::Coretext
+ } else {
+ Backend::FontconfigFreetype
+ }
+ }
+
+ pub fn has_freetype(self) -> bool {
+ matches!(
+ self,
+ Backend::Freetype | Backend::FontconfigFreetype | Backend::CoretextFreetype
+ )
+ }
+
+ pub fn has_coretext(self) -> bool {
+ matches!(
+ self,
+ Backend::Coretext
+ | Backend::CoretextFreetype
+ | Backend::CoretextHarfbuzz
+ | Backend::CoretextNoshape
+ )
+ }
+
+ pub fn has_fontconfig(self) -> bool {
+ matches!(self, Backend::FontconfigFreetype)
+ }
+
+ pub fn has_harfbuzz(self) -> bool {
+ matches!(
+ self,
+ Backend::Freetype
+ | Backend::FontconfigFreetype
+ | Backend::CoretextFreetype
+ | Backend::CoretextHarfbuzz
+ )
+ }
+}
+
+/// Build options (the `font.options` of Zig).
+#[derive(Debug, Clone, Copy)]
+pub struct Options {
+ pub backend: Backend,
+}
+
+pub const OPTIONS: Options = Options {
+ backend: Backend::FontconfigFreetype,
+};
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn linux_backend_capabilities() {
+ let b = OPTIONS.backend;
+ assert!(b.has_freetype());
+ assert!(b.has_fontconfig());
+ assert!(b.has_harfbuzz());
+ assert!(!b.has_coretext());
+ }
+}
diff --git a/crates/ghostty-font/src/codepoint_map.rs b/crates/ghostty-font/src/codepoint_map.rs
new file mode 100644
index 0000000..29e8e45
--- /dev/null
+++ b/crates/ghostty-font/src/codepoint_map.rs
@@ -0,0 +1,139 @@
+//! CodepointMap is a map of codepoints to a discovery descriptor of a font
+//! to use for that codepoint. If the descriptor doesn't return any matching
+//! font, the codepoint is rendered using the default font.
+//! Port of `font/CodepointMap.zig`.
+
+use std::hash::{DefaultHasher, Hash, Hasher};
+
+use crate::discovery::Descriptor;
+
+#[derive(Debug, Clone)]
+pub struct Entry {
+ /// Unicode codepoint range (inclusive). Asserts range.0 <= range.1.
+ pub range: (u32, u32),
+
+ /// The discovery descriptor of the font to use for this range.
+ pub descriptor: Descriptor,
+}
+
+/// The list of entries.
+///
+/// Note: we just do a linear search because we expect to always have very
+/// few entries, so the overhead of a binary search is not worth it. This is
+/// possible to defeat with some pathological inputs, but there is no realistic
+/// scenario where this will be a problem except people trying to fuck around.
+#[derive(Debug, Clone, Default)]
+pub struct CodepointMap {
+ pub list: Vec,
+}
+
+impl CodepointMap {
+ /// Add an entry to the map.
+ ///
+ /// For conflicting codepoints, entries added later take priority over
+ /// entries added earlier.
+ pub fn add(&mut self, entry: Entry) {
+ assert!(entry.range.0 <= entry.range.1);
+ self.list.push(entry);
+ }
+
+ /// Get a descriptor for a codepoint.
+ pub fn get(&self, cp: u32) -> Option<&Descriptor> {
+ self.list
+ .iter()
+ .rev()
+ .find(|e| e.range.0 <= cp && cp <= e.range.1)
+ .map(|e| &e.descriptor)
+ }
+
+ /// Hash with the given hasher.
+ pub fn hash_into(&self, hasher: &mut H) {
+ self.list.len().hash(hasher);
+ for entry in &self.list {
+ entry.range.hash(hasher);
+ hash_descriptor(&entry.descriptor, hasher);
+ }
+ }
+
+ /// Returns a hash code that can be used to uniquely identify this
+ /// action.
+ pub fn hashcode(&self) -> u64 {
+ let mut hasher = DefaultHasher::new();
+ self.hash_into(&mut hasher);
+ hasher.finish()
+ }
+}
+
+/// Mirrors `Descriptor.hash` of the Zig discovery module (same fields, same
+/// float handling) without depending on how the discovery module exposes it.
+fn hash_descriptor(d: &Descriptor, hasher: &mut H) {
+ d.family.hash(hasher);
+ d.style.hash(hasher);
+ d.codepoint.hash(hasher);
+ d.size.to_bits().hash(hasher);
+ d.bold.hash(hasher);
+ d.italic.hash(hasher);
+ d.monospace.hash(hasher);
+ d.variations.len().hash(hasher);
+ for v in &d.variations {
+ v.id.hash(hasher);
+ // This is not correct, but we don't currently depend on the
+ // hash value being different based on decimal values of variations.
+ (v.value as i64).hash(hasher);
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ fn desc(family: &str) -> Descriptor {
+ Descriptor {
+ family: Some(family.to_string()),
+ ..Default::default()
+ }
+ }
+
+ fn entry(a: u32, b: u32, family: &str) -> Entry {
+ Entry {
+ range: (a, b),
+ descriptor: desc(family),
+ }
+ }
+
+ #[test]
+ fn codepointmap() {
+ let mut m = CodepointMap::default();
+
+ // Exact range
+ assert!(m.get(1).is_none());
+ m.add(entry(1, 1, "A"));
+ assert_eq!("A", m.get(1).unwrap().family.as_deref().unwrap());
+
+ // Later entry takes priority
+ m.add(entry(1, 2, "B"));
+ assert_eq!("B", m.get(1).unwrap().family.as_deref().unwrap());
+
+ // Non-matching
+ assert!(m.get(0).is_none());
+ assert!(m.get(3).is_none());
+
+ m.add(entry(3, 4, "C"));
+ m.add(entry(5, 6, "D"));
+ assert_eq!("C", m.get(3).unwrap().family.as_deref().unwrap());
+ assert_eq!("B", m.get(1).unwrap().family.as_deref().unwrap());
+ }
+
+ #[test]
+ fn hashcode_depends_on_contents() {
+ let mut a = CodepointMap::default();
+ let mut b = CodepointMap::default();
+ assert_eq!(a.hashcode(), b.hashcode());
+ a.add(entry(1, 2, "A"));
+ assert_ne!(a.hashcode(), b.hashcode());
+ b.add(entry(1, 2, "A"));
+ assert_eq!(a.hashcode(), b.hashcode());
+ b.add(entry(3, 3, "B"));
+ assert_ne!(a.hashcode(), b.hashcode());
+ }
+}
diff --git a/crates/ghostty-font/src/codepoint_resolver.rs b/crates/ghostty-font/src/codepoint_resolver.rs
new file mode 100644
index 0000000..c0de211
--- /dev/null
+++ b/crates/ghostty-font/src/codepoint_resolver.rs
@@ -0,0 +1,603 @@
+//! CodepointResolver maps a codepoint to a font. It is more dynamic
+//! than "Collection" since it supports mapping codepoint ranges to
+//! specific fonts, searching for fallback fonts, and more.
+//!
+//! To initialize the codepoint resolver, construct it with
+//! [`CodepointResolver::new`], set the fields you want set, and begin using
+//! the resolver.
+
+#![allow(clippy::collapsible_if, clippy::if_not_else, clippy::float_cmp)]
+
+use std::collections::HashMap;
+
+use crate::collection::{
+ AddOptions, Collection, Entry, GetFaceError, Index, PresentationMode, Special,
+};
+use crate::discovery::Discover;
+use crate::face::{RenderOptions, freetype::RenderError as FaceRenderError};
+use crate::sprite;
+use crate::{Atlas, CodepointMap, Glyph, Presentation, SpriteFace, Style};
+
+/// Packed array of booleans to indicate if a style is enabled or not.
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct StyleStatus([bool; 4]);
+
+impl StyleStatus {
+ /// All styles set to `v`.
+ pub fn init_fill(v: bool) -> StyleStatus {
+ StyleStatus([v; 4])
+ }
+
+ pub fn get(&self, style: Style) -> bool {
+ self.0[style as usize]
+ }
+
+ pub fn set(&mut self, style: Style, v: bool) {
+ self.0[style as usize] = v;
+ }
+}
+
+/// Errors from [`CodepointResolver::render_glyph`].
+#[derive(Debug, thiserror::Error)]
+pub enum RenderGlyphError {
+ #[error(transparent)]
+ GetFace(#[from] GetFaceError),
+ #[error(transparent)]
+ Face(#[from] FaceRenderError),
+ #[error(transparent)]
+ Sprite(#[from] sprite::face::RenderError),
+ /// The sprite face was not configured on the resolver.
+ #[error("sprite face not configured")]
+ SpriteUnavailable,
+}
+
+impl RenderGlyphError {
+ /// True if this error is the atlas-full condition (the caller should
+ /// grow the atlas and retry).
+ pub fn is_atlas_full(&self) -> bool {
+ use crate::atlas::Error::AtlasFull;
+ matches!(
+ self,
+ RenderGlyphError::Face(FaceRenderError::Atlas(AtlasFull))
+ | RenderGlyphError::Sprite(sprite::face::RenderError::Atlas(AtlasFull))
+ )
+ }
+}
+
+pub struct CodepointResolver {
+ /// The underlying collection of fonts. This will be modified as
+ /// new fonts are found via the resolver. The resolver takes ownership
+ /// of the collection.
+ pub collection: Collection,
+
+ /// The set of statuses and whether they're enabled or not. This defaults
+ /// to true. This can be changed at runtime with no ill effect.
+ pub styles: StyleStatus,
+
+ /// If discovery is available, we'll look up fonts where we can't find
+ /// the codepoint. This can be set after initialization.
+ pub discover: Option,
+
+ /// A map of codepoints to font requests for codepoint-level overrides.
+ pub codepoint_map: Option,
+
+ /// The descriptor cache is used to cache the descriptor to font face
+ /// mapping for codepoint maps.
+ descriptor_cache: DescriptorCache,
+
+ /// Set this to a non-null value to enable sprite glyph drawing. If this
+ /// isn't enabled we'll just fall through to trying to use regular fonts
+ /// to render sprite glyphs. But more than likely, if this isn't set then
+ /// terminal rendering will look wrong.
+ pub sprite: Option,
+}
+
+/// Map of descriptors to faces. This is used with manual codepoint maps
+/// to ensure that we don't load the same font multiple times.
+///
+/// Note that the current implementation will load the same font multiple
+/// times if the font used for a codepoint map is identical to a font used
+/// for a regular style. That's just an inefficient choice made now because
+/// the implementation is simpler and codepoint maps matching a regular
+/// font is a rare case.
+///
+/// As in upstream, descriptors are compared by their `hashcode()` only.
+#[derive(Default)]
+struct DescriptorCache(HashMap>);
+
+impl CodepointResolver {
+ /// A resolver with defaults: all styles enabled, no discovery, no
+ /// codepoint map, no sprite face.
+ pub fn new(collection: Collection) -> CodepointResolver {
+ CodepointResolver {
+ collection,
+ styles: StyleStatus::init_fill(true),
+ discover: None,
+ codepoint_map: None,
+ descriptor_cache: DescriptorCache::default(),
+ sprite: None,
+ }
+ }
+
+ /// Looks up the font that should be used for a specific codepoint.
+ /// The font index is valid as long as font faces aren't removed. This
+ /// isn't cached; it is expected that downstream users handle caching if
+ /// that is important.
+ ///
+ /// Optionally, a presentation format can be specified. This presentation
+ /// format will be preferred but if it can't be found in this format,
+ /// any format will be accepted. If presentation is null, the UCD
+ /// (Unicode Character Database) will be used to determine the default
+ /// presentation for the codepoint.
+ ///
+ /// This function cannot error! If an error occurs for any reason,
+ /// the associated functionality is ignored and the
+ /// resolver attempts to use a different method to satisfy the codepoint.
+ /// This behavior is intentional to make the resolver apply best-effort
+ /// logic to satisfy the codepoint since its better to render something
+ /// than nothing.
+ ///
+ /// This logic is relatively complex so the exact algorithm is documented
+ /// here. If this gets out of sync with the code, ask questions.
+ ///
+ /// 1. If a font style is requested that is disabled (i.e. bold),
+ /// we start over with the regular font style. The regular font style
+ /// cannot be disabled, but it can be replaced with a stylized font
+ /// face.
+ ///
+ /// 2. If there is a codepoint override for the codepoint, we satisfy
+ /// that requirement if we can, no matter what style or presentation.
+ ///
+ /// 3. If this is a sprite codepoint (such as an underline), then the
+ /// sprite font always is the result.
+ ///
+ /// 4. If the exact style and presentation request can be satisfied by
+ /// one of our loaded fonts, we return that value. We search loaded
+ /// fonts in the order they're added to the group, so the caller must
+ /// set the priority order.
+ ///
+ /// 5. If the style isn't regular, we restart this process at this point
+ /// but with the regular style. This lets us fall back to regular with
+ /// our loaded fonts before trying a fallback. We'd rather show a regular
+ /// version of a codepoint from a loaded font than find a new font in
+ /// the correct style because styles in other fonts often change
+ /// metrics like glyph widths.
+ ///
+ /// 6. If the style is regular, and font discovery is enabled, we look
+ /// for a fallback font to satisfy our request.
+ ///
+ /// 7. Finally, as a last resort, we fall back to restarting this whole
+ /// process with a regular font face satisfying ANY presentation for
+ /// the codepoint. If this fails, we return null.
+ pub fn get_index(&mut self, cp: u32, style: Style, p: Option) -> Option {
+ // If we've disabled a font style, then fall back to regular.
+ if style != Style::Regular && !self.styles.get(style) {
+ return self.get_index(cp, Style::Regular, p);
+ }
+
+ // Codepoint overrides.
+ if let Some(idx) = self.get_index_codepoint_override(cp) {
+ return Some(idx);
+ }
+
+ // If we have sprite drawing enabled, check if our sprite face can
+ // handle this.
+ if let Some(sprite) = &self.sprite {
+ if sprite.has_codepoint(cp, p) {
+ return Some(Index::init_special(Special::Sprite));
+ }
+ }
+
+ // Build our presentation mode. If we don't have an explicit presentation
+ // given then we use the UCD (Unicode Character Database) to determine
+ // the default presentation. Note there is some inefficiency here because
+ // we'll do this multiple times if we recurse, but this is a cached function
+ // call higher up (GroupCache) so this should be rare.
+ let p_mode = match p {
+ Some(v) => PresentationMode::Explicit(v),
+ None => PresentationMode::Default(if ghostty_unicode::emoji_table::table().get(cp) {
+ Presentation::Emoji
+ } else {
+ Presentation::Text
+ }),
+ };
+
+ // If we can find the exact value, then return that.
+ if let Some(value) = self.collection.get_index(cp, style, p_mode) {
+ return Some(value);
+ }
+
+ // If we're not a regular font style, try looking for a regular font
+ // that will satisfy this request. Blindly looking for unmatched styled
+ // fonts to satisfy one codepoint results in some ugly rendering.
+ if style != Style::Regular {
+ if let Some(value) = self.get_index(cp, Style::Regular, p) {
+ return Some(value);
+ }
+ }
+
+ // If we are regular, try looking for a fallback using discovery.
+ if style == Style::Regular {
+ if let Some(idx) = self.discover_fallback(cp, style, p_mode) {
+ return Some(idx);
+ }
+ }
+
+ // If this is regular with any matching presentation, then we are done
+ // there is nothing more we can do. Otherwise we fall through and do
+ // an any presentation search.
+ if style == Style::Regular && p_mode == PresentationMode::Any {
+ return None;
+ }
+
+ // For non-regular fonts, we fall back to regular with any presentation
+ self.collection
+ .get_index(cp, Style::Regular, PresentationMode::Any)
+ }
+
+ fn discover_fallback(
+ &mut self,
+ cp: u32,
+ style: Style,
+ p_mode: PresentationMode,
+ ) -> Option {
+ log::debug!("searching for a fallback font for cp={cp:X}");
+ let disco = self.discover.as_ref()?;
+ let load_opts = self.collection.load_options.as_ref()?;
+ let desc = crate::discovery::Descriptor {
+ codepoint: cp,
+ size: load_opts.size.points,
+ bold: style == Style::Bold || style == Style::BoldItalic,
+ italic: style == Style::Italic || style == Style::BoldItalic,
+ monospace: false,
+ ..Default::default()
+ };
+ let mut disco_it = disco.discover_fallback(&self.collection, &desc).ok()?;
+
+ loop {
+ let deferred_face = match disco_it.next() {
+ Ok(Some(f)) => f,
+ Ok(None) => break,
+ Err(err) => {
+ log::warn!("fallback search failed with error err={err}");
+ break;
+ }
+ };
+
+ // Discovery is supposed to only return faces that have our
+ // codepoint but we can't search presentation in discovery so
+ // we have to check it here.
+ let entry = Entry {
+ face: crate::collection::AnyFace::Deferred(deferred_face),
+ fallback: true,
+ scale_factor: crate::collection::ScaleFactor::Scale(1.0),
+ };
+ if !entry.has_codepoint(cp, p_mode) {
+ continue;
+ }
+ let crate::collection::AnyFace::Deferred(deferred_face) = entry.face else {
+ unreachable!()
+ };
+
+ log::info!(
+ "found codepoint 0x{cp:X} in fallback face={}",
+ deferred_face
+ .name()
+ .unwrap_or_else(|_| "".to_string())
+ );
+ return self
+ .collection
+ .add_deferred(
+ deferred_face,
+ AddOptions {
+ style,
+ fallback: true,
+ size_adjustment: crate::DEFAULT_FALLBACK_ADJUSTMENT,
+ },
+ )
+ .ok();
+ }
+
+ log::debug!("no fallback face found for cp={cp:X}");
+ None
+ }
+
+ /// Checks if the codepoint is in the map of codepoint overrides,
+ /// finds the override font, and returns it.
+ fn get_index_codepoint_override(&mut self, cp: u32) -> Option {
+ // Get our codepoint map. If we have no map set then we have no
+ // codepoint overrides and we're done.
+ let map = self.codepoint_map.as_ref()?;
+
+ // If the codepoint is in the map, the map returns a descriptor that
+ // can be used with font discovery to search for a matching font.
+ let desc = map.get(cp)?;
+ let key = desc.hashcode();
+
+ // Fast path: the descriptor is already loaded. This means that we
+ // already did the search before and we have an exact font for this
+ // codepoint.
+ let idx_: Option = if let Some(v) = self.descriptor_cache.0.get(&key) {
+ *v
+ } else {
+ // Slow path: we have to find this descriptor and load the font
+ let discover = self.discover.as_ref()?;
+ let mut disco_it = match discover.discover(desc) {
+ Ok(it) => it,
+ Err(err) => {
+ log::warn!("codepoint override failed codepoint={cp} err={err}");
+ return None;
+ }
+ };
+
+ let face = match disco_it.next() {
+ Ok(Some(f)) => f,
+ Ok(None) => {
+ log::warn!(
+ "font lookup for codepoint map failed codepoint={cp} err=FontNotFound"
+ );
+
+ // Add null to the cache so we don't do a lookup again later.
+ self.descriptor_cache.0.insert(key, None);
+ return None;
+ }
+ Err(err) => {
+ log::warn!("codepoint override failed codepoint={cp} err={err}");
+ return None;
+ }
+ };
+
+ // Add the font to our list of fonts so we can get an index for it,
+ // and ensure the index is stored in the descriptor cache for next time.
+ let idx = match self.collection.add_deferred(
+ face,
+ AddOptions {
+ style: Style::Regular,
+ fallback: false,
+ size_adjustment: crate::DEFAULT_FALLBACK_ADJUSTMENT,
+ },
+ ) {
+ Ok(idx) => idx,
+ Err(err) => {
+ log::warn!("codepoint override failed codepoint={cp} err={err}");
+ return None;
+ }
+ };
+ self.descriptor_cache.0.insert(key, Some(idx));
+
+ Some(idx)
+ };
+
+ // The descriptor cache will populate null if the descriptor is not found
+ // to avoid expensive discoveries later, so if it is null then we already
+ // searched and found nothing.
+ let idx = idx_?;
+
+ // We need to verify that this index has the codepoint we want.
+ if self
+ .collection
+ .has_codepoint(idx, cp, PresentationMode::Any)
+ {
+ log::debug!(
+ "codepoint override based on config codepoint={cp} family={}",
+ desc.family.as_deref().unwrap_or("")
+ );
+
+ return Some(idx);
+ }
+
+ None
+ }
+
+ /// Returns the presentation for a specific font index. This is useful for
+ /// determining what atlas is needed.
+ pub fn get_presentation(
+ &mut self,
+ index: Index,
+ glyph_index: u32,
+ ) -> Result {
+ if let Some(sp) = index.special() {
+ return Ok(match sp {
+ Special::Sprite => Presentation::Text,
+ });
+ }
+
+ let face = self.collection.get_face(index)?;
+ Ok(if face.is_color_glyph(glyph_index) {
+ Presentation::Emoji
+ } else {
+ Presentation::Text
+ })
+ }
+
+ /// Render a glyph by glyph index into the given font atlas and return
+ /// metadata about it.
+ ///
+ /// This performs no caching, it is up to the caller to cache calls to this
+ /// if they want. This will also not resize the atlas if it is full.
+ ///
+ /// IMPORTANT: this renders by /glyph index/ and not by /codepoint/. The caller
+ /// is expected to translate codepoints to glyph indexes in some way. The most
+ /// trivial way to do this is to get the Face and call glyph_index. If you're
+ /// doing text shaping, the text shaping library (i.e. HarfBuzz) will automatically
+ /// determine glyph indexes for a text run.
+ pub fn render_glyph(
+ &mut self,
+ atlas: &mut Atlas,
+ index: Index,
+ glyph_index: u32,
+ opts: RenderOptions,
+ ) -> Result {
+ // Special-case fonts are rendered directly.
+ if let Some(sp) = index.special() {
+ match sp {
+ Special::Sprite => {
+ let sprite = self
+ .sprite
+ .as_ref()
+ .ok_or(RenderGlyphError::SpriteUnavailable)?;
+ return Ok(sprite.render_glyph(atlas, glyph_index, opts)?);
+ }
+ }
+ }
+
+ let face = self.collection.get_face(index)?;
+ Ok(face.render_glyph(atlas, glyph_index, opts)?)
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::collection::{LoadOptions, SizeAdjustment};
+ use crate::face::{DesiredSize, Options};
+ use crate::{Face, Library, embedded};
+
+ fn add(c: &mut Collection, lib: &Library, data: &'static [u8], style: Style, pts: f32) {
+ let size = if pts == 12.0 {
+ DesiredSize {
+ points: 12.0,
+ xdpi: 96,
+ ydpi: 96,
+ }
+ } else {
+ DesiredSize::new(pts)
+ };
+ c.add(
+ Face::init(lib, data.into(), Options::new(size)).unwrap(),
+ AddOptions {
+ style,
+ fallback: false,
+ size_adjustment: SizeAdjustment::None,
+ },
+ )
+ .unwrap();
+ }
+
+ #[test]
+ fn get_index() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ c.load_options = Some(LoadOptions::new(lib.clone()));
+
+ add(&mut c, &lib, embedded::REGULAR, Style::Regular, 12.0);
+ add(&mut c, &lib, embedded::EMOJI, Style::Regular, 12.0);
+ add(&mut c, &lib, embedded::EMOJI_TEXT, Style::Regular, 12.0);
+
+ let mut r = CodepointResolver::new(c);
+
+ // Should find all visible ASCII
+ for i in 32u32..127 {
+ let idx = r.get_index(i, Style::Regular, None).unwrap();
+ assert_eq!(Style::Regular, idx.style);
+ assert_eq!(0, idx.idx);
+ }
+
+ // Try emoji
+ {
+ let idx = r.get_index('🥸' as u32, Style::Regular, None).unwrap();
+ assert_eq!(Style::Regular, idx.style);
+ assert_eq!(1, idx.idx);
+ }
+
+ // Try text emoji
+ {
+ let idx = r
+ .get_index(0x270C, Style::Regular, Some(Presentation::Text))
+ .unwrap();
+ assert_eq!(Style::Regular, idx.style);
+ assert_eq!(2, idx.idx);
+ }
+ {
+ let idx = r
+ .get_index(0x270C, Style::Regular, Some(Presentation::Emoji))
+ .unwrap();
+ assert_eq!(Style::Regular, idx.style);
+ assert_eq!(1, idx.idx);
+ }
+
+ // Box glyph should be null since we didn't set a box font
+ assert!(r.get_index(0x1FB00, Style::Regular, None).is_none());
+ }
+
+ #[test]
+ fn get_index_disabled_font_style() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ c.load_options = Some(LoadOptions::new(lib.clone()));
+
+ add(&mut c, &lib, embedded::REGULAR, Style::Regular, 12.0);
+ add(&mut c, &lib, embedded::REGULAR, Style::Bold, 12.0);
+ add(&mut c, &lib, embedded::REGULAR, Style::Italic, 12.0);
+
+ let mut r = CodepointResolver::new(c);
+ r.styles.set(Style::Bold, false); // Disable bold
+
+ // Regular should work fine
+ {
+ let idx = r.get_index('A' as u32, Style::Regular, None).unwrap();
+ assert_eq!(Style::Regular, idx.style);
+ assert_eq!(0, idx.idx);
+ }
+
+ // Bold should go to regular
+ {
+ let idx = r.get_index('A' as u32, Style::Bold, None).unwrap();
+ assert_eq!(Style::Regular, idx.style);
+ assert_eq!(0, idx.idx);
+ }
+
+ // Italic should still work
+ {
+ let idx = r.get_index('A' as u32, Style::Italic, None).unwrap();
+ assert_eq!(Style::Italic, idx.style);
+ assert_eq!(0, idx.idx);
+ }
+ }
+
+ #[test]
+ fn get_index_box_glyph() {
+ let c = Collection::new();
+
+ let mut r = CodepointResolver::new(c);
+ r.sprite = Some(SpriteFace::new(crate::Metrics::calc(
+ crate::metrics::FaceMetrics {
+ px_per_em: 30.0,
+ cell_width: 18.0,
+ ascent: 30.0,
+ descent: -6.0,
+ line_gap: 0.0,
+ ..Default::default()
+ },
+ )));
+
+ // Should find a box glyph
+ let idx = r.get_index(0x2500, Style::Regular, None).unwrap();
+ assert_eq!(Style::Regular, idx.style);
+ assert_eq!(Index::SPECIAL_START, idx.idx);
+ }
+
+ #[test]
+ fn get_presentation_and_render_sprite() {
+ let mut r = CodepointResolver::new(Collection::new());
+ let metrics = crate::Metrics::calc(crate::metrics::FaceMetrics {
+ px_per_em: 30.0,
+ cell_width: 18.0,
+ ascent: 30.0,
+ descent: -6.0,
+ line_gap: 0.0,
+ ..Default::default()
+ });
+ r.sprite = Some(SpriteFace::new(metrics));
+ let sprite_idx = Index::init_special(Special::Sprite);
+ assert_eq!(
+ Presentation::Text,
+ r.get_presentation(sprite_idx, 0x2500).unwrap()
+ );
+ let mut atlas = Atlas::new(256, crate::atlas::Format::Grayscale);
+ let g = r
+ .render_glyph(&mut atlas, sprite_idx, 0x2500, RenderOptions::new(metrics))
+ .unwrap();
+ assert!(g.width > 0 && g.height > 0);
+ }
+}
diff --git a/crates/ghostty-font/src/collection.rs b/crates/ghostty-font/src/collection.rs
new file mode 100644
index 0000000..547f48f
--- /dev/null
+++ b/crates/ghostty-font/src/collection.rs
@@ -0,0 +1,1481 @@
+//! A font collection is a list of faces of different styles. The list is
+//! ordered by priority (per style). All fonts in a collection share the same
+//! size so they can be used interchangeably in cases a glyph is missing in one
+//! and present in another.
+//!
+//! The purpose of a collection is to store a list of fonts by style
+//! and priority order. A collection does not handle searching for font
+//! callbacks, rasterization, etc. For this, see CodepointResolver.
+//!
+//! The collection can contain both loaded and deferred faces. Deferred faces
+//! typically use less memory while still providing some necessary information
+//! such as codepoint support, presentation, etc. This is useful for looking
+//! for fallback fonts as efficiently as possible. For example, when the glyph
+//! "X" is not found, we can quickly search through deferred fonts rather
+//! than loading the font completely.
+
+#![allow(clippy::collapsible_if, clippy::if_not_else, clippy::float_cmp)]
+
+use crate::config_types::{FontSyntheticStyle, FreetypeLoadFlags};
+use crate::face::{self, DesiredSize};
+use crate::metrics::{FaceMetrics, ModifierSet};
+use crate::{DeferredFace, Face, Library, Metrics, Presentation, Style};
+
+/// The available faces we have. This shouldn't be modified manually.
+/// Instead, use the functions available on Collection.
+///
+/// (Zig: `StyleArray`, an enum array of segmented lists. Aliases are
+/// stored as the [`Index`] of the non-alias entry they point to, so there
+/// is no need for pointer stability.)
+type StyleArray = [Vec; 4];
+
+pub struct Collection {
+ /// The available faces we have. This shouldn't be modified manually.
+ /// Instead, use the functions available on Collection.
+ faces: StyleArray,
+
+ /// The metric modifiers to use for this collection.
+ ///
+ /// Call `Collection::update_metrics` to recompute the
+ /// collection's metrics after making changes to these.
+ pub metric_modifiers: ModifierSet,
+
+ /// Metrics for this collection. Call `Collection::update_metrics` to
+ /// (re)compute these after adding a primary font or making changes to
+ /// `metric_modifiers`.
+ pub metrics: Option,
+
+ /// The face metrics for the primary face in the collection.
+ ///
+ /// We keep this around so we don't need to re-compute it when calculating
+ /// the scale factor for additional fonts added to the collection.
+ pub primary_face_metrics: Option,
+
+ /// The load options for deferred faces in the face list. If this
+ /// is not set, then deferred faces will not be loaded. Attempting to
+ /// add a deferred face will result in an error.
+ pub load_options: Option,
+}
+
+impl Default for Collection {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
+/// Options for adding a face to the collection.
+#[derive(Debug, Clone, Copy)]
+pub struct AddOptions {
+ /// What style this face is.
+ pub style: Style,
+ /// What size adjustment to use.
+ pub size_adjustment: SizeAdjustment,
+ /// Whether this is a fallback face.
+ pub fallback: bool,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
+pub enum AddError {
+ /// There's no more room in the collection.
+ #[error("collection is full")]
+ CollectionFull,
+ /// The call to `face.set_size` failed.
+ #[error("set size failed")]
+ SetSizeFailed,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
+pub enum AddDeferredError {
+ /// There's no more room in the collection.
+ #[error("collection is full")]
+ CollectionFull,
+ /// `load_options` is None, can't do deferred loading.
+ #[error("deferred loading unavailable")]
+ DeferredLoadingUnavailable,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
+pub enum EntryError {
+ /// Index represents a special font (built-in) and these don't
+ /// have an associated face. This should be caught upstream and use
+ /// alternate logic.
+ #[error("special font has no face")]
+ SpecialHasNoFace,
+
+ /// Invalid index.
+ #[error("index out of bounds")]
+ IndexOutOfBounds,
+}
+
+/// Errors from [`Collection::get_face`].
+#[derive(Debug, thiserror::Error)]
+pub enum GetFaceError {
+ #[error(transparent)]
+ Entry(#[from] EntryError),
+ #[error("deferred loading unavailable")]
+ DeferredLoadingUnavailable,
+ #[error("face load failed: {0}")]
+ Load(#[from] crate::deferred_face::LoadError),
+ #[error("face error: {0}")]
+ Face(#[from] face::freetype::FaceError),
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
+pub enum CompleteError {
+ #[error("default face unavailable")]
+ DefaultUnavailable,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
+pub enum UpdateMetricsError {
+ #[error("cannot load primary font")]
+ CannotLoadPrimaryFont,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
+pub enum SetSizeError {
+ #[error(transparent)]
+ UpdateMetrics(#[from] UpdateMetricsError),
+ /// `load_options` is `None`.
+ #[error("deferred loading unavailable")]
+ DeferredLoadingUnavailable,
+ /// The call to `face.set_size` failed.
+ #[error("set size failed")]
+ SetSizeFailed,
+}
+
+#[derive(Debug, thiserror::Error)]
+enum SyntheticError {
+ #[error("deferred loading unavailable")]
+ DeferredLoadingUnavailable,
+ #[error(transparent)]
+ GetFace(#[from] GetFaceError),
+ #[error(transparent)]
+ Face(#[from] face::freetype::FaceError),
+}
+
+impl Collection {
+ /// Initialize an empty collection.
+ pub fn new() -> Collection {
+ Collection {
+ faces: [Vec::new(), Vec::new(), Vec::new(), Vec::new()],
+ metric_modifiers: ModifierSet::new(),
+ metrics: None,
+ primary_face_metrics: None,
+ load_options: None,
+ }
+ }
+
+ /// Number of entries (including aliases) for a style.
+ pub fn count(&self, style: Style) -> usize {
+ self.faces[style as usize].len()
+ }
+
+ /// Add a face to the collection. This face will be added next in priority
+ /// if others exist already, i.e. it'll be the _last_ to be searched for a
+ /// glyph in that list.
+ ///
+ /// If no error is encountered then the collection takes ownership of the
+ /// face. (On error the face is dropped.)
+ ///
+ /// When added, the size of the face will be adjusted to match
+ /// `load_options`.
+ ///
+ /// Returns the index for the added face.
+ pub fn add(&mut self, face: Face, opts: AddOptions) -> Result {
+ // We have some special indexes so we must never pass those.
+ let idx = self.faces[opts.style as usize].len();
+ if idx >= usize::from(Index::SPECIAL_START) - 1 {
+ return Err(AddError::CollectionFull);
+ }
+
+ let mut owned_face = face;
+
+ // Scale factor to adjust the size of the added face.
+ let scale_factor = self.scale_factor(&owned_face.get_metrics(), opts.size_adjustment);
+
+ // If we have load options, we update the size to ensure
+ // it's matches and is normalized to the primary if possible.
+ if let Some(load_opts) = &self.load_options {
+ let mut new_opts = load_opts.clone();
+ new_opts.size.points *= scale_factor as f32;
+ owned_face
+ .set_size(new_opts.face_options())
+ .map_err(|_| AddError::SetSizeFailed)?;
+ }
+
+ self.faces[opts.style as usize].push(EntryOrAlias::Entry(Entry {
+ face: AnyFace::Loaded(owned_face),
+ fallback: opts.fallback,
+ scale_factor: ScaleFactor::Scale(scale_factor),
+ }));
+
+ Ok(Index {
+ style: opts.style,
+ idx: idx as u16,
+ })
+ }
+
+ /// Add a deferred face to the collection.
+ ///
+ /// Returns the index for the added face.
+ pub fn add_deferred(
+ &mut self,
+ face: DeferredFace,
+ opts: AddOptions,
+ ) -> Result {
+ if self.load_options.is_none() {
+ return Err(AddDeferredError::DeferredLoadingUnavailable);
+ }
+
+ // We have some special indexes so we must never pass those.
+ let idx = self.faces[opts.style as usize].len();
+ if idx >= usize::from(Index::SPECIAL_START) - 1 {
+ return Err(AddDeferredError::CollectionFull);
+ }
+
+ self.faces[opts.style as usize].push(EntryOrAlias::Entry(Entry {
+ face: AnyFace::Deferred(face),
+ fallback: opts.fallback,
+ scale_factor: ScaleFactor::Adjustment(opts.size_adjustment),
+ }));
+
+ Ok(Index {
+ style: opts.style,
+ idx: idx as u16,
+ })
+ }
+
+ /// Return the Face represented by a given Index. The returned reference
+ /// is only valid as long as this collection is not modified.
+ ///
+ /// This will initialize the face if it is deferred and not yet loaded,
+ /// which can fail.
+ pub fn get_face(&mut self, index: Index) -> Result<&mut Face, GetFaceError> {
+ let resolved = self.resolve(index)?;
+ self.get_face_from_entry(resolved)
+ }
+
+ /// Return the face for an index only if it is already loaded (never
+ /// triggers loading, so it only needs a shared reference). Returns `None`
+ /// for special, out-of-range or still-deferred entries.
+ pub fn get_loaded_face(&self, index: Index) -> Option<&Face> {
+ let resolved = self.resolve(index).ok()?;
+ match &self.entry_at(resolved).face {
+ AnyFace::Loaded(f) => Some(f),
+ AnyFace::Deferred(_) => None,
+ }
+ }
+
+ /// Resolve an index (which might point at an alias) to the index of the
+ /// non-alias entry.
+ fn resolve(&self, index: Index) -> Result {
+ if index.special().is_some() {
+ return Err(EntryError::SpecialHasNoFace);
+ }
+ let list = &self.faces[index.style as usize];
+ match list.get(usize::from(index.idx)) {
+ None => Err(EntryError::IndexOutOfBounds),
+ Some(EntryOrAlias::Entry(_)) => Ok(index),
+ Some(EntryOrAlias::Alias(target)) => Ok(*target),
+ }
+ }
+
+ fn entry_at(&self, resolved: Index) -> &Entry {
+ match &self.faces[resolved.style as usize][usize::from(resolved.idx)] {
+ EntryOrAlias::Entry(e) => e,
+ EntryOrAlias::Alias(_) => unreachable!("alias must point to a non-alias entry"),
+ }
+ }
+
+ fn entry_at_mut(&mut self, resolved: Index) -> &mut Entry {
+ match &mut self.faces[resolved.style as usize][usize::from(resolved.idx)] {
+ EntryOrAlias::Entry(e) => e,
+ EntryOrAlias::Alias(_) => unreachable!("alias must point to a non-alias entry"),
+ }
+ }
+
+ /// Get the unaliased entry from an index
+ pub fn get_entry(&mut self, index: Index) -> Result<&mut Entry, EntryError> {
+ let resolved = self.resolve(index)?;
+ Ok(self.entry_at_mut(resolved))
+ }
+
+ /// Get the unaliased entry from an index (shared).
+ pub fn get_const_entry(&self, index: Index) -> Result<&Entry, EntryError> {
+ let resolved = self.resolve(index)?;
+ Ok(self.entry_at(resolved))
+ }
+
+ /// Get the face from an entry (loading it if deferred).
+ ///
+ /// This entry must not be an alias.
+ fn get_face_from_entry(&mut self, entry: Index) -> Result<&mut Face, GetFaceError> {
+ if matches!(self.entry_at(entry).face, AnyFace::Deferred(_)) {
+ let mut opts = self
+ .load_options
+ .clone()
+ .ok_or(GetFaceError::DeferredLoadingUnavailable)?;
+
+ // Load the face.
+ let mut face = match &mut self.entry_at_mut(entry).face {
+ AnyFace::Deferred(d) => d.load(&opts.library, opts.face_options())?,
+ AnyFace::Loaded(_) => unreachable!(),
+ };
+
+ // Calculate the scale factor for this
+ // entry now that we have a loaded face.
+ let mut scale = self.entry_at(entry).scale_factor;
+ if let ScaleFactor::Adjustment(adj) = scale {
+ let factor = self.scale_factor(&face.get_metrics(), adj);
+ scale = ScaleFactor::Scale(factor);
+ self.entry_at_mut(entry).scale_factor = scale;
+ }
+
+ // If our scale factor is something other
+ // than 1.0 then we need to resize the face.
+ if let ScaleFactor::Scale(s) = scale {
+ if s != 1.0 {
+ opts.size.points *= s as f32;
+ face.set_size(opts.face_options())?;
+ }
+ }
+
+ // Set the loaded face on the entry (dropping the deferred face).
+ self.entry_at_mut(entry).face = AnyFace::Loaded(face);
+ }
+
+ match &mut self.entry_at_mut(entry).face {
+ AnyFace::Loaded(f) => Ok(f),
+ AnyFace::Deferred(_) => unreachable!(),
+ }
+ }
+
+ /// Return the index of the font in this collection that contains
+ /// the given codepoint, style, and presentation. If no font is found,
+ /// None is returned.
+ ///
+ /// This does not trigger font loading; deferred fonts can be
+ /// searched for codepoints.
+ pub fn get_index(&self, cp: u32, style: Style, p_mode: PresentationMode) -> Option {
+ for (i, entry_or_alias) in self.faces[style as usize].iter().enumerate() {
+ if self.const_entry(entry_or_alias).has_codepoint(cp, p_mode) {
+ return Some(Index {
+ style,
+ idx: i as u16,
+ });
+ }
+ }
+
+ // Not found
+ None
+ }
+
+ fn const_entry<'a>(&'a self, e: &'a EntryOrAlias) -> &'a Entry {
+ match e {
+ EntryOrAlias::Entry(e) => e,
+ EntryOrAlias::Alias(i) => self.entry_at(*i),
+ }
+ }
+
+ /// Check if a specific font index has a specific codepoint. This does not
+ /// necessarily force the font to load. The presentation value "p" will
+ /// verify the Emoji representation matches if it is non-null. If "p" is
+ /// null then any presentation will be accepted.
+ pub fn has_codepoint(&self, index: Index, cp: u32, p_mode: PresentationMode) -> bool {
+ let list = &self.faces[index.style as usize];
+ match list.get(usize::from(index.idx)) {
+ None => false,
+ Some(e) => self.const_entry(e).has_codepoint(cp, p_mode),
+ }
+ }
+
+ /// Ensure we have an option for all styles in the collection, such
+ /// as italic and bold by synthesizing them if necessary from the
+ /// first regular face that has text glyphs.
+ ///
+ /// If there is no regular face that has text glyphs, then this
+ /// does nothing.
+ pub fn complete_styles(
+ &mut self,
+ synthetic_config: FontSyntheticStyle,
+ ) -> Result<(), CompleteError> {
+ // If every style has at least one entry then we're done!
+ // This is the most common case.
+ if self.faces.iter().all(|l| !l.is_empty()) {
+ return Ok(());
+ }
+
+ // Find the first regular face that has non-colorized text glyphs.
+ // This is the font we want to fallback to. This may not be index zero
+ // if a user configures something like an Emoji font first.
+ let regular_entry: Index = 'entry: {
+ let count = self.faces[Style::Regular as usize].len();
+ if count == 0 {
+ return Ok(());
+ }
+
+ // Find our first regular face that has text glyphs.
+ for i in 0..count {
+ // Load our face. If we fail to load it, we just skip it and
+ // continue on to try the next one.
+ let index = Index {
+ style: Style::Regular,
+ idx: i as u16,
+ };
+ let resolved = self.resolve(index).expect("index in range");
+ let face = match self.get_face_from_entry(resolved) {
+ Ok(f) => f,
+ Err(err) => {
+ log::warn!("error loading regular entry={i} err={err}");
+ continue;
+ }
+ };
+
+ // We have two conditionals here. The color check is obvious:
+ // we want to auto-italicize a normal text font. The second
+ // check is less obvious... for mixed color/non-color fonts, we
+ // accept the regular font if it has basic ASCII. This may not
+ // be strictly correct (especially with international fonts) but
+ // it's a reasonable heuristic and the first case will match 99%
+ // of the time.
+ if !face.has_color() || face.glyph_index('A' as u32).is_some() {
+ break 'entry resolved;
+ }
+ }
+
+ // No regular text face found. We can't provide any fallback.
+ return Err(CompleteError::DefaultUnavailable);
+ };
+
+ // If we don't have italic, attempt to create a synthetic italic face.
+ // If we can't create a synthetic italic face, we'll just use the regular
+ // face for italic.
+ let have_italic = !self.faces[Style::Italic as usize].is_empty();
+ if !have_italic {
+ if !synthetic_config.italic {
+ log::info!("italic style not available and synthetic italic disabled");
+ self.faces[Style::Italic as usize].push(EntryOrAlias::Alias(regular_entry));
+ } else {
+ match self.synthetic_italic(regular_entry) {
+ Ok(synthetic) => {
+ log::info!("synthetic italic face created");
+ self.faces[Style::Italic as usize].push(EntryOrAlias::Entry(Entry {
+ face: AnyFace::Loaded(synthetic),
+ fallback: false,
+ scale_factor: ScaleFactor::Scale(1.0),
+ }));
+ }
+ Err(err) => {
+ log::warn!(
+ "failed to create synthetic italic, italic style will not be available err={err}"
+ );
+ self.faces[Style::Italic as usize].push(EntryOrAlias::Alias(regular_entry));
+ }
+ }
+ }
+ }
+
+ // If we don't have bold, use the regular font.
+ let have_bold = !self.faces[Style::Bold as usize].is_empty();
+ if !have_bold {
+ if !synthetic_config.bold {
+ log::info!("bold style not available and synthetic bold disabled");
+ self.faces[Style::Bold as usize].push(EntryOrAlias::Alias(regular_entry));
+ } else {
+ match self.synthetic_bold(regular_entry) {
+ Ok(synthetic) => {
+ log::info!("synthetic bold face created");
+ self.faces[Style::Bold as usize].push(EntryOrAlias::Entry(Entry {
+ face: AnyFace::Loaded(synthetic),
+ fallback: false,
+ scale_factor: ScaleFactor::Scale(1.0),
+ }));
+ }
+ Err(err) => {
+ log::warn!(
+ "failed to create synthetic bold, bold style will not be available err={err}"
+ );
+ self.faces[Style::Bold as usize].push(EntryOrAlias::Alias(regular_entry));
+ }
+ }
+ }
+ }
+
+ // If we don't have bold italic, we attempt to synthesize a bold variant
+ // of the italic font. If we can't do that, we'll use the italic font.
+ if self.faces[Style::BoldItalic as usize].is_empty() {
+ self.complete_bold_italic(synthetic_config, regular_entry, have_bold);
+ }
+
+ Ok(())
+ }
+
+ fn complete_bold_italic(
+ &mut self,
+ synthetic_config: FontSyntheticStyle,
+ regular_entry: Index,
+ have_bold: bool,
+ ) {
+ let bi = Style::BoldItalic as usize;
+ if !synthetic_config.bold_italic {
+ log::info!("bold italic style not available and synthetic bold italic disabled");
+ self.faces[bi].push(EntryOrAlias::Alias(regular_entry));
+ return;
+ }
+
+ // Prefer to synthesize on top of the face we already had. If we
+ // have bold then we try to synthesize italic on top of bold.
+ if have_bold {
+ let base_entry = self
+ .resolve(Index {
+ style: Style::Bold,
+ idx: 0,
+ })
+ .expect("bold entry exists");
+ if let Ok(synthetic) = self.synthetic_italic(base_entry) {
+ log::info!("synthetic bold italic face created from bold");
+ self.faces[bi].push(EntryOrAlias::Entry(Entry {
+ face: AnyFace::Loaded(synthetic),
+ fallback: false,
+ scale_factor: ScaleFactor::Scale(1.0),
+ }));
+ return;
+ }
+
+ // If synthesizing italic failed, then we try to synthesize
+ // bold on whatever italic font we have.
+ }
+
+ let base_entry = self
+ .resolve(Index {
+ style: Style::Italic,
+ idx: 0,
+ })
+ .expect("italic entry exists");
+ if let Ok(synthetic) = self.synthetic_bold(base_entry) {
+ log::info!("synthetic bold italic face created from italic");
+ self.faces[bi].push(EntryOrAlias::Entry(Entry {
+ face: AnyFace::Loaded(synthetic),
+ fallback: false,
+ scale_factor: ScaleFactor::Scale(1.0),
+ }));
+ return;
+ }
+
+ log::warn!("bold italic style not available, using italic font");
+ self.faces[bi].push(EntryOrAlias::Alias(base_entry));
+ }
+
+ /// Create a synthetic bold font face from the given entry and return it.
+ fn synthetic_bold(&mut self, entry: Index) -> Result {
+ // We require loading options to create a synthetic bold face.
+ let opts = self
+ .load_options
+ .clone()
+ .ok_or(SyntheticError::DeferredLoadingUnavailable)?;
+
+ // Try to bold it.
+ let regular = self.get_face_from_entry(entry)?;
+
+ // NOTE: upstream computes a `face_opts` with the size inherited from
+ // the regular face but then (accidentally) passes `opts.faceOptions()`
+ // instead; we mirror that behaviour.
+ let face = regular.synthetic_bold(opts.face_options())?;
+
+ log::info!("font synthetic bold created family={}", face.name());
+
+ Ok(face)
+ }
+
+ /// Create a synthetic italic font face from the given entry and return it.
+ fn synthetic_italic(&mut self, entry: Index) -> Result {
+ // We require loading options to create a synthetic italic face.
+ let opts = self
+ .load_options
+ .clone()
+ .ok_or(SyntheticError::DeferredLoadingUnavailable)?;
+
+ // Try to italicize it.
+ let regular = self.get_face_from_entry(entry)?;
+
+ // See the NOTE in `synthetic_bold`.
+ let face = regular.synthetic_italic(opts.face_options())?;
+
+ log::info!("font synthetic italic created family={}", face.name());
+
+ Ok(face)
+ }
+
+ /// Update the size of all faces in the collection. This will
+ /// also update the size in the load options for future deferred
+ /// face loading.
+ ///
+ /// This requires load options to be set.
+ pub fn set_size(&mut self, size: DesiredSize) -> Result<(), SetSizeError> {
+ // Get our options so we can modify the size.
+ let opts = {
+ let opts = self
+ .load_options
+ .as_mut()
+ .ok_or(SetSizeError::DeferredLoadingUnavailable)?;
+ opts.size = size;
+ opts.clone()
+ };
+
+ let primary_entry = self
+ .resolve(Index {
+ style: Style::Regular,
+ idx: 0,
+ })
+ .ok();
+
+ // Resize all our faces that are loaded
+ for style in Style::ALL {
+ for i in 0..self.faces[style as usize].len() {
+ // Resize all faces. We skip entries that are aliases, since
+ // the underlying face will have a non-alias entry somewhere.
+ if matches!(self.faces[style as usize][i], EntryOrAlias::Alias(_)) {
+ continue;
+ }
+ let this = Index {
+ style,
+ idx: i as u16,
+ };
+
+ let entry = self.entry_at_mut(this);
+ let scale = entry.scale_factor;
+ if let AnyFace::Loaded(face) = &mut entry.face {
+ // If this isn't our primary face, we scale
+ // the size appropriately before setting it.
+ //
+ // If we don't have a primary face we also don't.
+ let mut new_opts = opts.clone();
+ if primary_entry.is_some() && Some(this) != primary_entry {
+ if let ScaleFactor::Scale(s) = scale {
+ new_opts.size.points *= s as f32;
+ }
+ }
+ face.set_size(new_opts.face_options())
+ .map_err(|_| SetSizeError::SetSizeFailed)?;
+ }
+ }
+ }
+
+ Ok(self.update_metrics()?)
+ }
+
+ /// Calculate a factor by which to scale the provided face to match
+ /// it with the primary face, depending on the specified adjustment.
+ ///
+ /// If this encounters any problems loading the primary face or its
+ /// metrics then it just returns `1.0`.
+ ///
+ /// This functions very much like the `font-size-adjust` CSS property.
+ /// ref: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size-adjust
+ fn scale_factor(&mut self, face_metrics: &FaceMetrics, adjustment: SizeAdjustment) -> f64 {
+ // If there's no adjustment, the scale is 1.0
+ if adjustment == SizeAdjustment::None {
+ return 1.0;
+ }
+
+ // If we haven't calculated our primary face metrics yet, do so now.
+ if self.primary_face_metrics.is_none() {
+ // If we can't load the primary face, just use 1.0 as the scale factor.
+ let Ok(primary_face) = self.get_face(Index::default()) else {
+ return 1.0;
+ };
+ self.primary_face_metrics = Some(primary_face.get_metrics());
+ }
+
+ let primary_metrics = self.primary_face_metrics.expect("set above");
+
+ // We normalize the metrics values which are expressed in px to instead
+ // be in ems, so that it doesn't matter what size the faces actually are.
+ let primary_scale = 1.0 / primary_metrics.px_per_em;
+ let face_scale = 1.0 / face_metrics.px_per_em;
+
+ // We get the target metrics from the primary face and this face depending
+ // on the specified `adjustment`. If this face doesn't explicitly define a
+ // metric, or if the value it defines is invalid, we fall through to other
+ // options in the order below.
+ //
+ // In order to make sure the value is valid, we compare it with the result
+ // of the estimator function, which rules out both null and invalid values.
+ let mut adj = adjustment;
+ let (primary_metric, face_metric) = loop {
+ match adj {
+ SizeAdjustment::IcWidth => {
+ if face_metrics.ic_width != Some(face_metrics.ic_width()) {
+ adj = SizeAdjustment::ExHeight;
+ continue;
+ }
+ break (
+ primary_metrics.ic_width() * primary_scale,
+ face_metrics.ic_width() * face_scale,
+ );
+ }
+ SizeAdjustment::ExHeight => {
+ if face_metrics.ex_height != Some(face_metrics.ex_height()) {
+ adj = SizeAdjustment::CapHeight;
+ continue;
+ }
+ break (
+ primary_metrics.ex_height() * primary_scale,
+ face_metrics.ex_height() * face_scale,
+ );
+ }
+ SizeAdjustment::CapHeight => {
+ if face_metrics.cap_height != Some(face_metrics.cap_height()) {
+ adj = SizeAdjustment::LineHeight;
+ continue;
+ }
+ break (
+ primary_metrics.cap_height() * primary_scale,
+ face_metrics.cap_height() * face_scale,
+ );
+ }
+ SizeAdjustment::LineHeight => {
+ break (
+ primary_metrics.line_height() * primary_scale,
+ face_metrics.line_height() * face_scale,
+ );
+ }
+ SizeAdjustment::None => unreachable!(),
+ }
+ };
+
+ primary_metric / face_metric
+ }
+
+ /// Update the cell metrics for this collection, based on
+ /// the primary font and the modifiers in `metric_modifiers`.
+ ///
+ /// This requires a primary font (index `0`) to be present.
+ pub fn update_metrics(&mut self) -> Result<(), UpdateMetricsError> {
+ let primary_face = self
+ .get_face(Index::default())
+ .map_err(|_| UpdateMetricsError::CannotLoadPrimaryFont)?;
+
+ let fm = primary_face.get_metrics();
+ self.primary_face_metrics = Some(fm);
+
+ let mut metrics = Metrics::calc(fm);
+
+ metrics.apply(&self.metric_modifiers);
+
+ self.metrics = Some(metrics);
+ Ok(())
+ }
+}
+
+/// Options for adjusting the size of a face relative to the primary face.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub enum SizeAdjustment {
+ /// Don't adjust the size for this face, use the original point size.
+ None,
+ /// Match ideograph character width with the primary face.
+ IcWidth,
+ /// Match ex height with the primary face.
+ ExHeight,
+ /// Match cap height with the primary face.
+ CapHeight,
+ /// Match line height with the primary face.
+ LineHeight,
+}
+
+/// Load options are used to configure all the details a Collection
+/// needs to load deferred faces.
+#[derive(Clone)]
+pub struct LoadOptions {
+ /// The library to use for loading faces. This is not owned by
+ /// the collection and can be used by multiple collections.
+ pub library: Library,
+
+ /// The desired font size for all loaded faces.
+ pub size: DesiredSize,
+
+ /// Freetype Load Flags to use when loading glyphs. This is a list of
+ /// bitfield constants that controls operations to perform during glyph
+ /// loading. Only a subset is exposed for configuration, for the whole set
+ /// of flags see `pkg.freetype.face.LoadFlags`.
+ pub freetype_load_flags: FreetypeLoadFlags,
+}
+
+impl LoadOptions {
+ /// Options with the default size (12 points) and load flags.
+ pub fn new(library: Library) -> LoadOptions {
+ LoadOptions {
+ library,
+ size: DesiredSize::new(12.0),
+ freetype_load_flags: face::FREETYPE_LOAD_FLAGS_DEFAULT,
+ }
+ }
+
+ /// The options to use for loading faces.
+ pub fn face_options(&self) -> face::Options {
+ face::Options {
+ size: self.size,
+ freetype_load_flags: self.freetype_load_flags,
+ }
+ }
+}
+
+pub enum AnyFace {
+ /// Not yet loaded.
+ Deferred(DeferredFace),
+
+ /// Loaded.
+ Loaded(Face),
+}
+
+/// Factor to multiply the collection size by for a face, or else the size
+/// adjustment that should be used to calculate it once the face is loaded.
+#[derive(Debug, Clone, Copy, PartialEq)]
+pub enum ScaleFactor {
+ Adjustment(SizeAdjustment),
+ Scale(f64),
+}
+
+/// A entry in a collection can be deferred or loaded. A deferred face
+/// is not yet fully loaded and only represents the font descriptor
+/// and usually uses less resources. A loaded face is fully parsed,
+/// ready to rasterize, and usually uses more resources than a
+/// deferred version.
+///
+/// A face can also be a "fallback" variant that is still either
+/// deferred or loaded. Today, there is only one difference between
+/// fallback and non-fallback (or "explicit") faces: the handling
+/// of emoji presentation.
+///
+/// For explicit faces, when an explicit emoji presentation is
+/// not requested, we will use any glyph for that codepoint found
+/// even if the font presentation does not match the UCD
+/// (Unicode Character Database) value. When an explicit presentation
+/// is requested (via either VS15/V16), that is always honored.
+/// The reason we do this is because we assume that if a user
+/// explicitly chosen a font face (hence it is "explicit" and
+/// not "fallback"), they want to use any glyphs possible within that
+/// font face. Fallback fonts on the other hand are picked as a
+/// last resort, so we should prefer exactness if possible.
+pub struct Entry {
+ pub face: AnyFace,
+
+ /// Whether this face is a fallback face, see
+ /// main doc comment on Entry for more info.
+ pub fallback: bool,
+
+ /// Factor to multiply the collection size by for this face, or
+ /// else the size adjustment that should be used to calculate
+ /// once the face is loaded.
+ ///
+ /// This is computed when the face is loaded, based on a scale
+ /// factor computed for an adjustment from the primary face to
+ /// this one, which allows fallback fonts to be harmonized with
+ /// the primary font by matching one of the metrics between them.
+ pub scale_factor: ScaleFactor,
+}
+
+impl Entry {
+ /// If this face is loaded, then this returns the `Face`,
+ /// otherwise returns None.
+ pub fn get_loaded(&mut self) -> Option<&mut Face> {
+ match &mut self.face {
+ AnyFace::Deferred(_) => None,
+ AnyFace::Loaded(face) => Some(face),
+ }
+ }
+
+ /// True if the entry is deferred.
+ pub fn is_deferred(&self) -> bool {
+ matches!(self.face, AnyFace::Deferred(_))
+ }
+
+ /// True if this face satisfies the given codepoint and presentation.
+ pub fn has_codepoint(&self, cp: u32, p_mode: PresentationMode) -> bool {
+ let mut mode = p_mode;
+ loop {
+ match mode {
+ PresentationMode::Default(p) => {
+ mode = if self.fallback {
+ // Fallback fonts require explicit presentation matching.
+ PresentationMode::Explicit(p)
+ } else {
+ // Non-fallback fonts do not.
+ PresentationMode::Any
+ };
+ }
+ PresentationMode::Explicit(p) => {
+ return match &self.face {
+ AnyFace::Deferred(v) => v.has_codepoint(cp, Some(p)),
+ AnyFace::Loaded(face) => {
+ let Some(index) = face.glyph_index(cp) else {
+ return false;
+ };
+ match p {
+ Presentation::Text => !face.is_color_glyph(index),
+ Presentation::Emoji => face.is_color_glyph(index),
+ }
+ }
+ };
+ }
+ PresentationMode::Any => {
+ return match &self.face {
+ AnyFace::Deferred(v) => v.has_codepoint(cp, None),
+ AnyFace::Loaded(face) => face.glyph_index(cp).is_some(),
+ };
+ }
+ }
+ }
+ }
+}
+
+pub enum EntryOrAlias {
+ Entry(Entry),
+
+ /// An alias to another entry. This is used to share the same face,
+ /// avoid memory duplication. An alias must point to a non-alias entry.
+ Alias(Index),
+}
+
+/// The requested presentation for a codepoint.
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub enum PresentationMode {
+ /// The codepoint has an explicit presentation that is required,
+ /// i.e. VS15/V16.
+ Explicit(Presentation),
+
+ /// The codepoint has no explicit presentation and we should use
+ /// the presentation from the UCD.
+ Default(Presentation),
+
+ /// The codepoint can be any presentation.
+ Any,
+}
+
+/// The special-case fonts that we support.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+#[repr(u16)]
+pub enum Special {
+ /// Sprite drawing, this is rendered JIT using 2D graphics APIs.
+ Sprite = Index::SPECIAL_START,
+}
+
+/// This represents a specific font in the collection.
+///
+/// The Zig version is a `packed struct(u16)` with a 3 bit style and 13 bit
+/// index (up to 8192 fonts per style). Here the two parts are separate
+/// fields, with [`Index::int`] producing the packed representation.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct Index {
+ pub style: Style,
+ pub idx: u16,
+}
+
+impl Default for Index {
+ fn default() -> Self {
+ Index {
+ style: Style::Regular,
+ idx: 0,
+ }
+ }
+}
+
+impl Index {
+ /// The number of bits we use for the index.
+ pub const IDX_BITS: u32 = 13;
+
+ /// We start all special fonts at this index so they can be detected
+ /// (`maxInt(IndexInt)`).
+ pub const SPECIAL_START: u16 = (1 << Self::IDX_BITS) - 1;
+
+ /// Initialize a special font index.
+ pub const fn init_special(v: Special) -> Index {
+ Index {
+ style: Style::Regular,
+ idx: v as u16,
+ }
+ }
+
+ /// Convert to the packed int (style in the low 3 bits).
+ pub fn int(self) -> u16 {
+ (self.style as u16) | (self.idx << 3)
+ }
+
+ /// Returns Some if this is a "special" index which doesn't map to
+ /// a real font face. We can still render it but there is no face for
+ /// this font.
+ pub fn special(self) -> Option {
+ if self.idx < Self::SPECIAL_START {
+ return None;
+ }
+ Some(Special::Sprite)
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::embedded;
+ use crate::face::{DesiredSize, Options};
+
+ fn opts_96(points: f32) -> Options {
+ Options::new(DesiredSize {
+ points,
+ xdpi: 96,
+ ydpi: 96,
+ })
+ }
+
+ fn add_opts(style: Style, adj: SizeAdjustment) -> AddOptions {
+ AddOptions {
+ style,
+ fallback: false,
+ size_adjustment: adj,
+ }
+ }
+
+ fn approx(a: f64, b: f64) -> bool {
+ (a - b).abs() < 1e-3
+ }
+
+ fn assert_metrics_approx(expected: &Metrics, actual: &Metrics) {
+ assert_eq!(expected.cell_width, actual.cell_width);
+ assert_eq!(expected.cell_height, actual.cell_height);
+ assert_eq!(expected.cell_baseline, actual.cell_baseline);
+ assert_eq!(expected.underline_position, actual.underline_position);
+ assert_eq!(expected.underline_thickness, actual.underline_thickness);
+ assert_eq!(
+ expected.strikethrough_position,
+ actual.strikethrough_position
+ );
+ assert_eq!(
+ expected.strikethrough_thickness,
+ actual.strikethrough_thickness
+ );
+ assert_eq!(expected.overline_position, actual.overline_position);
+ assert_eq!(expected.overline_thickness, actual.overline_thickness);
+ assert_eq!(expected.box_thickness, actual.box_thickness);
+ assert_eq!(expected.cursor_height, actual.cursor_height);
+ assert!(
+ approx(expected.icon_height, actual.icon_height),
+ "icon_height"
+ );
+ assert!(
+ approx(expected.icon_height_single, actual.icon_height_single),
+ "icon_height_single"
+ );
+ assert!(approx(expected.face_width, actual.face_width), "face_width");
+ assert!(
+ approx(expected.face_height, actual.face_height),
+ "face_height"
+ );
+ assert!(approx(expected.face_y, actual.face_y), "face_y");
+ }
+
+ #[test]
+ fn index_layout() {
+ // We never want to take up more than a u16 since font indexes are
+ // everywhere. The maximum number of fonts for a style is 13 bits.
+ assert_eq!(2, std::mem::size_of::());
+ assert_eq!(13, Index::IDX_BITS);
+ assert_eq!(8191, Index::SPECIAL_START);
+ let sprite = Index::init_special(Special::Sprite);
+ assert_eq!(Some(Special::Sprite), sprite.special());
+ assert_eq!(None, Index::default().special());
+ assert_eq!(Index::SPECIAL_START << 3, sprite.int());
+ }
+
+ #[test]
+ fn init() {
+ let c = Collection::new();
+ drop(c);
+ }
+
+ #[test]
+ fn add_full() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+
+ for _ in 0..(usize::from(Index::SPECIAL_START) - 1) {
+ c.add(
+ Face::init(&lib, embedded::REGULAR.into(), opts_96(12.0)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+ }
+
+ let face = Face::init(&lib, embedded::REGULAR.into(), opts_96(12.0)).unwrap();
+ assert_eq!(
+ Err(AddError::CollectionFull),
+ c.add(face, add_opts(Style::Regular, SizeAdjustment::None))
+ );
+ }
+
+ #[test]
+ fn add_deferred_without_loading_options() {
+ let mut c = Collection::new();
+ // The deferred face can be anything since it should never be accessed.
+ let deferred = DeferredFace::default();
+ assert_eq!(
+ Err(AddDeferredError::DeferredLoadingUnavailable),
+ c.add_deferred(deferred, add_opts(Style::Regular, SizeAdjustment::None))
+ );
+ }
+
+ #[test]
+ fn get_face() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ let idx = c
+ .add(
+ Face::init(&lib, embedded::REGULAR.into(), opts_96(12.0)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ let p1 = std::ptr::from_ref::(c.get_face(idx).unwrap());
+ let p2 = std::ptr::from_ref::(c.get_face(idx).unwrap());
+ assert_eq!(p1, p2);
+ }
+
+ #[test]
+ fn get_index() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ c.add(
+ Face::init(&lib, embedded::REGULAR.into(), opts_96(12.0)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ // Should find all visible ASCII
+ for i in 32u32..127 {
+ assert!(
+ c.get_index(i, Style::Regular, PresentationMode::Any)
+ .is_some()
+ );
+ }
+
+ // Should not find emoji
+ assert!(
+ c.get_index('🥸' as u32, Style::Regular, PresentationMode::Any)
+ .is_none()
+ );
+ }
+
+ #[test]
+ fn complete_styles() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ c.load_options = Some(LoadOptions::new(lib.clone()));
+
+ c.add(
+ Face::init(&lib, embedded::REGULAR.into(), opts_96(12.0)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ let a = 'A' as u32;
+ assert!(c.get_index(a, Style::Bold, PresentationMode::Any).is_none());
+ assert!(
+ c.get_index(a, Style::Italic, PresentationMode::Any)
+ .is_none()
+ );
+ assert!(
+ c.get_index(a, Style::BoldItalic, PresentationMode::Any)
+ .is_none()
+ );
+ c.complete_styles(FontSyntheticStyle::default()).unwrap();
+ assert!(c.get_index(a, Style::Bold, PresentationMode::Any).is_some());
+ assert!(
+ c.get_index(a, Style::Italic, PresentationMode::Any)
+ .is_some()
+ );
+ assert!(
+ c.get_index(a, Style::BoldItalic, PresentationMode::Any)
+ .is_some()
+ );
+ }
+
+ #[test]
+ fn complete_styles_synthetic_disabled_uses_aliases() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ c.load_options = Some(LoadOptions::new(lib.clone()));
+ c.add(
+ Face::init(&lib, embedded::REGULAR.into(), opts_96(12.0)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ c.complete_styles(FontSyntheticStyle {
+ bold: false,
+ italic: false,
+ bold_italic: false,
+ })
+ .unwrap();
+ for style in [Style::Bold, Style::Italic, Style::BoldItalic] {
+ assert_eq!(1, c.count(style));
+ let idx = c
+ .get_index('A' as u32, style, PresentationMode::Any)
+ .unwrap();
+ // The alias resolves to the regular entry's face.
+ let p1 = std::ptr::from_ref::(c.get_face(idx).unwrap());
+ let p2 = std::ptr::from_ref::(c.get_face(Index::default()).unwrap());
+ assert_eq!(p1, p2);
+ }
+ }
+
+ #[test]
+ fn set_size() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ c.load_options = Some(LoadOptions::new(lib.clone()));
+
+ c.add(
+ Face::init(&lib, embedded::REGULAR.into(), opts_96(12.0)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ assert_eq!(12.0, c.load_options.as_ref().unwrap().size.points);
+ c.set_size(DesiredSize::new(24.0)).unwrap();
+ assert_eq!(24.0, c.load_options.as_ref().unwrap().size.points);
+ }
+
+ #[test]
+ fn has_codepoint() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ c.load_options = Some(LoadOptions::new(lib.clone()));
+
+ let idx = c
+ .add(
+ Face::init(&lib, embedded::REGULAR.into(), opts_96(12.0)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ assert!(c.has_codepoint(idx, 'A' as u32, PresentationMode::Any));
+ assert!(!c.has_codepoint(idx, '🥸' as u32, PresentationMode::Any));
+ }
+
+ #[test]
+ fn has_codepoint_emoji_default_graphical() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ c.load_options = Some(LoadOptions::new(lib.clone()));
+
+ let idx = c
+ .add(
+ Face::init(&lib, embedded::EMOJI.into(), opts_96(12.0)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ assert!(!c.has_codepoint(idx, 'A' as u32, PresentationMode::Any));
+ assert!(c.has_codepoint(idx, '🥸' as u32, PresentationMode::Any));
+ // TODO(fontmem): test explicit/implicit
+ }
+
+ #[test]
+ fn metrics() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ let size = DesiredSize {
+ points: 12.0,
+ xdpi: 96,
+ ydpi: 96,
+ };
+ let mut lo = LoadOptions::new(lib.clone());
+ lo.size = size;
+ c.load_options = Some(lo);
+
+ c.add(
+ Face::init(&lib, embedded::INCONSOLATA.into(), Options::new(size)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ c.update_metrics().unwrap();
+
+ let base = Metrics {
+ cell_width: 8,
+ // The cell height is 17 px because the calculation is
+ //
+ // ascender - descender + gap
+ //
+ // which, for inconsolata is
+ //
+ // 859 - -190 + 0
+ //
+ // font units, at 1000 units per em that works out to 1.049 em,
+ // and 1em should be the point size * dpi scale, so 12 * (96/72)
+ // which is 16, and 16 * 1.049 = 16.784, which finally is rounded
+ // to 17.
+ //
+ // The icon height is (2 * cap_height + face_height) / 3
+ // = (2 * 623 + 1049) / 3 = 765, and 16 * 0.765 = 12.24.
+ cell_height: 17,
+ cell_baseline: 3,
+ underline_position: 17,
+ underline_thickness: 1,
+ strikethrough_position: 10,
+ strikethrough_thickness: 1,
+ overline_position: 0,
+ overline_thickness: 1,
+ box_thickness: 1,
+ cursor_height: 17,
+ icon_height: 16.784,
+ icon_height_single: 12.24,
+ face_width: 8.0,
+ face_height: 16.784,
+ face_y: -0.04,
+ cursor_thickness: 1,
+ };
+ assert_metrics_approx(&base, &c.metrics.unwrap());
+
+ // Resize should change metrics
+ c.set_size(DesiredSize {
+ points: 24.0,
+ xdpi: 96,
+ ydpi: 96,
+ })
+ .unwrap();
+ let big = Metrics {
+ cell_width: 16,
+ cell_height: 34,
+ cell_baseline: 6,
+ underline_position: 34,
+ underline_thickness: 2,
+ strikethrough_position: 19,
+ strikethrough_thickness: 2,
+ overline_position: 0,
+ overline_thickness: 2,
+ box_thickness: 2,
+ cursor_height: 34,
+ icon_height: 33.568,
+ icon_height_single: 24.48,
+ face_width: 16.0,
+ face_height: 33.568,
+ face_y: -0.08,
+ cursor_thickness: 1,
+ };
+ assert_metrics_approx(&big, &c.metrics.unwrap());
+ }
+
+ // TODO: Also test CJK fallback sizing, we don't currently have a CJK test font.
+ #[test]
+ fn adjusted_sizes() {
+ let lib = Library::init().unwrap();
+ let mut c = Collection::new();
+ let size = DesiredSize {
+ points: 12.0,
+ xdpi: 96,
+ ydpi: 96,
+ };
+ let mut lo = LoadOptions::new(lib.clone());
+ lo.size = size;
+ c.load_options = Some(lo);
+
+ // Add our primary face.
+ c.add(
+ Face::init(&lib, embedded::INCONSOLATA.into(), Options::new(size)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ c.update_metrics().unwrap();
+
+ for metric in [SizeAdjustment::ExHeight, SizeAdjustment::CapHeight] {
+ let pick = |m: &FaceMetrics| match metric {
+ SizeAdjustment::ExHeight => m.ex_height.unwrap(),
+ SizeAdjustment::CapHeight => m.cap_height.unwrap(),
+ _ => unreachable!(),
+ };
+
+ // Add the fallback face with the chosen adjustment metric.
+ let fallback_idx = c
+ .add(
+ Face::init(&lib, embedded::MONASPACE_NEON.into(), Options::new(size)).unwrap(),
+ add_opts(Style::Regular, metric),
+ )
+ .unwrap();
+
+ // The chosen metric should match.
+ {
+ let pm = c.get_face(Index::default()).unwrap().get_metrics();
+ let fm = c.get_face(fallback_idx).unwrap().get_metrics();
+ // We accept anything within half a pixel.
+ assert!((pick(&pm) - pick(&fm)).abs() <= 0.5);
+ }
+
+ // Resize should keep that relationship.
+ c.set_size(DesiredSize {
+ points: 37.0,
+ xdpi: 96,
+ ydpi: 96,
+ })
+ .unwrap();
+ {
+ let pm = c.get_face(Index::default()).unwrap().get_metrics();
+ let fm = c.get_face(fallback_idx).unwrap().get_metrics();
+ assert!((pick(&pm) - pick(&fm)).abs() <= 0.5);
+ }
+
+ // Reset size for the next iteration
+ c.set_size(size).unwrap();
+ }
+
+ {
+ // A reference metric of "none" should leave the size unchanged.
+ let fallback_idx = c
+ .add(
+ Face::init(&lib, embedded::MONASPACE_NEON.into(), Options::new(size)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::None),
+ )
+ .unwrap();
+
+ let primary_points = c.get_face(Index::default()).unwrap().size.points;
+ assert_eq!(
+ primary_points,
+ c.get_face(fallback_idx).unwrap().size.points
+ );
+
+ // Resize should keep that.
+ c.set_size(DesiredSize {
+ points: 37.0,
+ xdpi: 96,
+ ydpi: 96,
+ })
+ .unwrap();
+
+ let primary_points = c.get_face(Index::default()).unwrap().size.points;
+ assert_eq!(
+ primary_points,
+ c.get_face(fallback_idx).unwrap().size.points
+ );
+
+ // Reset collection size
+ c.set_size(size).unwrap();
+ }
+
+ // Add the symbol face.
+ let symbol_idx = c
+ .add(
+ Face::init(&lib, embedded::SYMBOLS_NERD_FONT.into(), Options::new(size)).unwrap(),
+ add_opts(Style::Regular, SizeAdjustment::ExHeight),
+ )
+ .unwrap();
+
+ // Test fallback to line_height() (ex_height and cap_height not defined
+ // in symbols font).
+ {
+ let pm = c.get_face(Index::default()).unwrap().get_metrics();
+ let sm = c.get_face(symbol_idx).unwrap().get_metrics();
+ // We accept anything within half a pixel.
+ assert!((pm.line_height() - sm.line_height()).abs() <= 0.5);
+ }
+ }
+}
diff --git a/crates/ghostty-font/src/config_types.rs b/crates/ghostty-font/src/config_types.rs
new file mode 100644
index 0000000..30b6f43
--- /dev/null
+++ b/crates/ghostty-font/src/config_types.rs
@@ -0,0 +1,59 @@
+//! Small local mirrors of the `ghostty-config` types that the font engine
+//! consumes.
+//!
+//! TODO(integration): `ghostty-config` should map its own
+//! `FreetypeLoadFlags`, `FontSyntheticStyle` and `FontShapingBreak` onto
+//! these (or this crate should re-export the config ones once the config
+//! crate exists in the dependency graph).
+
+/// See `freetype-load-flags` in the config. Defaults match upstream.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct FreetypeLoadFlags {
+ pub hinting: bool,
+ pub force_autohint: bool,
+ pub monochrome: bool,
+ pub autohint: bool,
+ pub light: bool,
+}
+
+impl Default for FreetypeLoadFlags {
+ fn default() -> Self {
+ Self {
+ hinting: true,
+ force_autohint: false,
+ monochrome: false,
+ autohint: true,
+ light: true,
+ }
+ }
+}
+
+/// See `font-synthetic-style` in the config.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct FontSyntheticStyle {
+ pub bold: bool,
+ pub italic: bool,
+ pub bold_italic: bool,
+}
+
+impl Default for FontSyntheticStyle {
+ fn default() -> Self {
+ Self {
+ bold: true,
+ italic: true,
+ bold_italic: true,
+ }
+ }
+}
+
+/// See `font-shaping-break` in the config.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct FontShapingBreak {
+ pub cursor: bool,
+}
+
+impl Default for FontShapingBreak {
+ fn default() -> Self {
+ Self { cursor: true }
+ }
+}
diff --git a/crates/ghostty-font/src/deferred_face.rs b/crates/ghostty-font/src/deferred_face.rs
new file mode 100644
index 0000000..d00b5fb
--- /dev/null
+++ b/crates/ghostty-font/src/deferred_face.rs
@@ -0,0 +1,170 @@
+//! A deferred face represents a single font face with all the information
+//! necessary to load it, but defers loading the full face until it is
+//! needed.
+//!
+//! This allows us to have many fallback fonts to look for glyphs, but
+//! only load them if they're really needed.
+//!
+//! Port of `font/DeferredFace.zig` (fontconfig variant only).
+
+use crate::face::{self, Options, Variation};
+use crate::fontconfig as fc;
+use crate::{Face, Library, Presentation};
+
+#[derive(Debug, thiserror::Error)]
+pub enum LoadError {
+ #[error(transparent)]
+ Fontconfig(#[from] fc::Error),
+ #[error(transparent)]
+ Face(#[from] face::freetype::FaceError),
+}
+
+/// Fontconfig specific data. This is only present if building with fontconfig.
+pub struct Fontconfig {
+ /// The pattern for this font. This must be the "render prepared" pattern.
+ /// (i.e. call FcFontRenderPrepare). The charset and langset used for
+ /// quick codepoint / presentation lookups are read from this pattern.
+ pub pattern: fc::Pattern,
+
+ /// Variations to apply to this font.
+ pub variations: Vec,
+}
+
+#[derive(Default)]
+pub struct DeferredFace {
+ /// Fontconfig
+ pub fc: Option,
+}
+
+impl DeferredFace {
+ pub fn from_fontconfig(fc: Fontconfig) -> DeferredFace {
+ DeferredFace { fc: Some(fc) }
+ }
+
+ /// Returns the family name of the font.
+ pub fn family_name(&self) -> Result {
+ if let Some(fc) = &self.fc {
+ return Ok(fc.pattern.get_string(fc::Property::Family, 0)?);
+ }
+ Ok(String::new())
+ }
+
+ /// Returns the name of this face.
+ pub fn name(&self) -> Result {
+ if let Some(fc) = &self.fc {
+ return Ok(fc.pattern.get_string(fc::Property::FullName, 0)?);
+ }
+ Ok(String::new())
+ }
+
+ /// Load the deferred font face.
+ pub fn load(&mut self, lib: &Library, opts: Options) -> Result {
+ let fc = self
+ .fc
+ .as_ref()
+ .expect("deferred face has no fontconfig data");
+
+ // Filename and index for our face so we can load it
+ let filename = fc.pattern.get_string(fc::Property::File, 0)?;
+ let face_index = fc.pattern.get_integer(fc::Property::Index, 0)?;
+
+ let mut face = Face::init_file(lib, &filename, face_index, opts)?;
+ face.set_variations(&fc.variations, opts)?;
+ Ok(face)
+ }
+
+ /// Returns true if this face can satisfy the given codepoint and
+ /// presentation. If presentation is null, then it just checks if the
+ /// codepoint is present at all.
+ ///
+ /// This does not require the face to be loaded (fontconfig metadata is
+ /// used).
+ pub fn has_codepoint(&self, cp: u32, p: Option) -> bool {
+ // If we are using fontconfig, use the fontconfig metadata to
+ // avoid loading the face.
+ let Some(fc) = &self.fc else {
+ // This is unreachable because discovery mechanisms terminate, and
+ // if we're not using a discovery mechanism, the face MUST be loaded.
+ unreachable!("deferred face without fontconfig data");
+ };
+
+ // Check if char exists
+ if !fc.pattern.charset_has_char(cp).unwrap_or(false) {
+ return false;
+ }
+
+ // If we have a presentation, check it matches
+ if let Some(desired) = p {
+ let emoji_lang = "und-zsye";
+ let actual = if fc.pattern.langset_has_lang(emoji_lang).unwrap_or(false) {
+ Presentation::Emoji
+ } else {
+ Presentation::Text
+ };
+
+ return desired == actual;
+ }
+
+ true
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::discovery::{Descriptor, Fontconfig};
+
+ // NOTE: this test needs the real FreeType `Face` (agent A); it cannot
+ // run while `Face` is a stub.
+ #[test]
+ fn fontconfig() {
+ // Load freetype
+ let lib = Library::init().unwrap();
+
+ // Get a deferred face from fontconfig
+ let mut def = {
+ let fc = Fontconfig::init();
+ let mut it = fc
+ .discover(&Descriptor {
+ family: Some("monospace".into()),
+ size: 12.0,
+ ..Default::default()
+ })
+ .unwrap();
+ it.next().unwrap().unwrap()
+ };
+
+ // Verify we can get the name
+ let n = def.name().unwrap();
+ assert_ne!("", n);
+
+ // Load it and verify it works
+ let face = def
+ .load(&lib, Options::new(face::DesiredSize::new(12.0)))
+ .unwrap();
+ assert!(face.glyph_index(' ' as u32).is_some());
+ }
+
+ #[test]
+ fn family_name_and_presentation_from_fontconfig() {
+ let fc = Fontconfig::init();
+ let mut it = fc
+ .discover(&Descriptor {
+ family: Some("monospace".into()),
+ size: 12.0,
+ ..Default::default()
+ })
+ .unwrap();
+ let def = it.next().unwrap().unwrap();
+ assert_ne!("", def.family_name().unwrap());
+ // A monospace text font is not an emoji-presentation font.
+ assert!(!def.has_codepoint('A' as u32, Some(Presentation::Emoji)));
+ }
+
+ #[test]
+ fn empty_deferred_face_has_empty_names() {
+ let def = DeferredFace::default();
+ assert_eq!("", def.family_name().unwrap());
+ assert_eq!("", def.name().unwrap());
+ }
+}
diff --git a/crates/ghostty-font/src/discovery.rs b/crates/ghostty-font/src/discovery.rs
new file mode 100644
index 0000000..7ed1821
--- /dev/null
+++ b/crates/ghostty-font/src/discovery.rs
@@ -0,0 +1,278 @@
+//! Font discovery. Port of `font/discovery.zig` (fontconfig backend only;
+//! the CoreText discoverer is macOS-only and out of scope).
+
+use std::hash::{Hash, Hasher};
+use std::sync::Arc;
+
+use crate::collection::Collection;
+use crate::deferred_face::{DeferredFace, Fontconfig as DeferredFontconfig};
+use crate::face::Variation;
+use crate::fontconfig as fc;
+
+/// Discover implementation for the compile options.
+pub type Discover = Fontconfig;
+
+/// Descriptor is used to search for fonts. The only required field
+/// is "family". The rest are ignored unless they're set to a non-zero
+/// value.
+#[derive(Debug, Clone, Default)]
+pub struct Descriptor {
+ /// Font family to search for. This can be a fully qualified font
+ /// name such as "Fira Code", "monospace", "serif", etc.
+ ///
+ /// On systems that use fontconfig (Linux), this can be a full
+ /// fontconfig pattern, such as "Fira Code-14:bold".
+ pub family: Option,
+
+ /// Specific font style to search for. This will filter the style
+ /// string the font advertises. The "bold/italic" booleans later in this
+ /// struct filter by the style trait the font has, not the string, so
+ /// these can be used in conjunction or not.
+ pub style: Option,
+
+ /// A codepoint that this font must be able to render.
+ pub codepoint: u32,
+
+ /// Font size in points that the font should support. For conversion
+ /// to pixels, we will use 72 DPI for Mac and 96 DPI for everything else.
+ /// (If pixel conversion is necessary, i.e. emoji fonts)
+ pub size: f32,
+
+ /// True if we want to search specifically for a font that supports
+ /// specific styles.
+ pub bold: bool,
+ pub italic: bool,
+ pub monospace: bool,
+
+ /// Variation axes to apply to the font. This also impacts searching
+ /// for fonts since fonts with the ability to set these variations
+ /// will be preferred, but not guaranteed.
+ pub variations: Vec,
+}
+
+impl Hash for Descriptor {
+ /// Hash the descriptor with the given hasher. Covers the same fields
+ /// as the Zig implementation.
+ fn hash(&self, state: &mut H) {
+ self.family.hash(state);
+ self.style.hash(state);
+ self.codepoint.hash(state);
+ self.size.to_bits().hash(state);
+ self.bold.hash(state);
+ self.italic.hash(state);
+ self.monospace.hash(state);
+ self.variations.len().hash(state);
+ for variation in &self.variations {
+ variation.id.hash(state);
+
+ // This is not correct, but we don't currently depend on the
+ // hash value being different based on decimal values of variations.
+ (variation.value as i64).hash(state);
+ }
+ }
+}
+
+impl Descriptor {
+ /// Returns a hash code that can be used to uniquely identify this
+ /// action.
+ pub fn hashcode(&self) -> u64 {
+ // `DefaultHasher::new()` uses fixed keys, so this is deterministic.
+ let mut hasher = std::collections::hash_map::DefaultHasher::new();
+ self.hash(&mut hasher);
+ hasher.finish()
+ }
+
+ /// Convert to Fontconfig pattern to use for lookup. The pattern does
+ /// not have defaults filled/substituted (Fontconfig thing) so callers
+ /// must still do this.
+ pub fn to_fc_pattern(&self) -> fc::Pattern {
+ let mut pat = fc::Pattern::create();
+ if let Some(family) = &self.family {
+ assert!(pat.add_string(fc::Property::Family, family));
+ }
+ if let Some(style) = &self.style {
+ assert!(pat.add_string(fc::Property::Style, style));
+ }
+ if self.codepoint > 0 {
+ let mut cs = fc::CharSet::create();
+ assert!(cs.add_char(self.codepoint));
+ assert!(pat.add_charset(fc::Property::Charset, &cs));
+ }
+ if self.size > 0.0 {
+ assert!(pat.add_integer(fc::Property::Size, self.size.round() as i32));
+ }
+ if self.bold {
+ assert!(pat.add_integer(fc::Property::Weight, fc::Weight::Bold as i32));
+ }
+ if self.italic {
+ assert!(pat.add_integer(fc::Property::Slant, fc::Slant::Italic as i32));
+ }
+
+ // For fontconfig, we always add monospace in the pattern. Since
+ // fontconfig sorts by closeness to the pattern, this doesn't fully
+ // exclude non-monospace but helps prefer it.
+ assert!(pat.add_integer(fc::Property::Spacing, fc::Spacing::Mono as i32));
+
+ pat
+ }
+}
+
+pub struct Fontconfig {
+ fc_config: Arc,
+}
+
+#[derive(Debug, thiserror::Error)]
+pub enum DiscoverError {
+ #[error("fontconfig failed")]
+ FontConfigFailed,
+ #[error(transparent)]
+ Fontconfig(#[from] fc::Error),
+}
+
+impl Fontconfig {
+ pub fn init() -> Fontconfig {
+ // safe to call multiple times and concurrently
+ fc::init();
+ Fontconfig {
+ fc_config: Arc::new(
+ fc::Config::init_load_config_and_fonts()
+ .expect("FcInitLoadConfigAndFonts returned null"),
+ ),
+ }
+ }
+
+ /// Discover fonts from a descriptor. This returns an iterator that can
+ /// be used to build up the deferred fonts.
+ pub fn discover(&self, desc: &Descriptor) -> Result {
+ // Build our pattern that we'll search for
+ let mut pat = desc.to_fc_pattern();
+ assert!(self.fc_config.substitute_with_pat_pattern(&mut pat));
+ pat.default_substitute();
+
+ // Search
+ let set = self
+ .fc_config
+ .font_sort(&mut pat, false)
+ .map_err(|_| DiscoverError::FontConfigFailed)?;
+
+ Ok(DiscoverIterator {
+ config: Arc::clone(&self.fc_config),
+ pattern: pat,
+ set,
+ variations: desc.variations.clone(),
+ i: 0,
+ })
+ }
+
+ pub fn discover_fallback(
+ &self,
+ _collection: &Collection,
+ desc: &Descriptor,
+ ) -> Result {
+ self.discover(desc)
+ }
+}
+
+pub struct DiscoverIterator {
+ config: Arc,
+ pattern: fc::Pattern,
+ set: fc::FontSet,
+ variations: Vec,
+ i: usize,
+}
+
+impl DiscoverIterator {
+ #[allow(clippy::should_implement_trait)]
+ pub fn next(&mut self) -> Result