Page MenuHomePhabricator

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
This document is not UTF8. It was detected as ISO-8859-1 (Latin 1) and converted to UTF8 for display.
diff --git a/externals/figlet/.gitignore b/externals/figlet/.gitignore
new file mode 100644
index 0000000000..dc65b3c3eb
--- /dev/null
+++ b/externals/figlet/.gitignore
@@ -0,0 +1,8 @@
+chkfont
+figlet
+tags
+*.o
+core
+*~
+tests.log
+*.tar.gz
diff --git a/externals/figlet/CHANGES b/externals/figlet/CHANGES
new file mode 100644
index 0000000000..4f2d6e9edb
--- /dev/null
+++ b/externals/figlet/CHANGES
@@ -0,0 +1,205 @@
+Changes in FIGlet 2.2.5
+-----------------------
+
+FIGlet 2.2.5 is a revision of FIGlet 2.2.4 containing updated andproperly
+licensed ISO8859 map files. The full list of changes is:
+
+o Add regression tests for uskata and jis0201 control files
+
+o Properly escape minus signs in figlist(6) man page (Jonathan
+ McCrohan)
+
+o Fix chkfont coredump on invalid input (Kenneth Davies and
+ Jonathan McCrohan)
+
+o Update ISO8859 map files to fix licensing issue raised in Debian
+ bugs 673096 and 674844
+
+o Re-add missing figmagic and getopt.c files which were left out
+ of releases 2.2.3 and 2.2.4
+
+o Fix output of test script in MacOS X
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+31 May 2012
+
+Changes in FIGlet 2.2.4
+-----------------------
+
+FIGlet 2.2.4 is a revision of FIGlet 2.2.3 featuring bugfixes and support
+to tlf2 fonts. The full list of changes is:
+
+o Add support to Sam Hocevar's TOIlet TLF fonts containing UTF-8
+ encoded Unicode characters.
+
+o Add infocode 5 to list supported font formats
+
+o Fix rendering error caused by the previous attempt to fix invalid
+ memory accesses when smushing at start of line
+
+o New environment variable FIGLET_FONTDIR can be used to specify
+ the path to search for fonts
+
+o Add regression tests
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+26 January 2011
+
+Changes in FIGlet 2.2.3
+-----------------------
+
+FIGlet 2.2.3 is a revision of FIGlet 2.2.2 featuring minor bugfixes and
+important licensing changes in the zipio files. The full list of
+changes is:
+
+o License changed from "Academic Free License" to "New BSD License"
+ (3-clause) as agreed by FIGlet authors
+
+o New JIS X 0201 control file (Micah Cowan)
+
+o Fix behavior of JIS0201 SHIFT-OUT and SHIFT-IN that were previouly
+ inverted (Micah Cowan)
+
+o Fix memory violation when smushing at line start
+
+o Fix handling of memory allocation errors
+
+o Relicense Ed Hamrick zipio under the MIT license. This should
+ eliminate any concerns about redistribution of FIGlet as libre
+ software.
+
+o Update Makefile to meet modern standards in variable naming, using
+ BINDIR as the pathname for binary files and reservind DESTDIR
+ as the extra prefix commonly used in package building.
+
+o Add a Turbo C makefile, just because I had the compiler. (this
+ also tests portability to old compilers and foreign platforms)
+
+o Add Jonathon Abbott's man pages for figlist, showfigfonts and
+ chkfont originally contributed to the Debian Project
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+12 January 2011
+
+Changes in FIGlet 2.2.2
+-----------------------
+
+License changed from "Artistic License" to "Academic Free
+License" as agreed by FIGlet authors. 05 July 2005
+
+Changes in FIGlet 2.2.1
+-----------------------
+
+FIGlet 2.2.1 is a minor revision of FIGlet 2.2. The files
+README, Makefile, figfont.txt, figlet.c and figlet.6 have been
+changed to reflect changes in documentation, official contact
+details etc. FTP-NOTE merged into README. FAQ and CHANGES
+added to the distribution.
+
+All other files are identical with the 2.2 release.
+
+These changes were made by Christiaan Keet <keet@plig.net>
+
+Changes in FIGlet 2.2
+---------------------
+
+FIGlet 2.2 is a moderate revision of FIGlet 2.1.2. The new features are:
+
+o font files and control files can be compressed using ``zip'', and
+ will be automatically decompressed
+
+o new commands in controlfiles provide support for
+ single-byte (default), double-byte, HZ, Shift-JIS, and Unicode
+ UTF-8 encodings of the input
+
+o ISO 2022 escape sequences are decoded and interpreted
+
+o control files can now have the format of Unicode Consortium
+ mapping tables (two columns of numbers representing
+ input character and output character, no ranges, # comments)
+
+o new options -s (smush, same as -m-2), -k (kern, same as -m0),
+ -S (forced smushing), and -W (full width, same as -m-1) make
+ -m option unnecessary except for font designers. The -S option
+ works even if the font's smushmode is 0 or -1, in which case
+ the smushmode is read from a new parameter in the
+ font's first line, or does universal overlapping if no such parameter
+ exists
+
+o universal smushing (-o option to force it, but -S will use it
+ if no smush rules are available) makes FIGcharacters overlap by
+ one place independent of how they are constructed
+ more fonts smushable.
+
+o file "figmagic" can be appended to your system magic number
+ file to make the "file" command recognize FIGlet files
+
+o file "figfont.txt" is an implementation-independent specification
+ for FIGlet fonts and control files
+
+o integrated support for extended characters (extended Latin in
+ "standard", Greek in "big", katakana in "banner", Hebrew in new
+ "ivrit" fonts) with appropriate controlfiles
+
+o smushing rule 16 has changed slightly: "/\" now smushes
+ into "|" and "\/" smushes into "Y"; "><" still smushes
+ into "X" and "<>" is still not smushed at all.
+
+o -A option introduced in FIGlet 2.1.2 is now optional;
+ if any words appear on the command line after the options,
+ they are formatted, and the standard input is not read.
+
+These changes were made by John Cowan <cowan@ccil.org>.
+
+Changes in FIGlet 2.1.2
+------------------------
+
+FIGlet 2.1.2 is a minor revision of FIGlet 2.1.1. The files
+README, FTP-NOTE, figlet.c and figlet.6 have been changed. All other
+files are identical with the 2.1.1 release.
+
+o The only new option is -A, which causes FIGlet to read input
+ from the command line.
+
+These changes were made by Gilbert Healton <ghealton@nmia.com> as Glenn
+Chappell is now busy as a new professor of Mathematics.
+
+Changes in FIGlet 2.1
+----------------------
+
+A number of minor bugs and major incompatibility problems have been
+fixed. FIGlet 2.1 should compile correctly on many operating systems for
+which FIGlet 2.0 did not.
+
+o The "-F" command line option, which used to list all the available
+ fonts, has been removed, since it made FIGlet incompatible with some
+ operating systems. It has been replaced by the "figlist" script. The
+ "showfigfonts" script has been updated so that it no longer requires
+ the "-F" option to be available.
+
+o The FIGlet font file format has been extended to allow an arbitrarily
+ large number of characters. The ISO Latin-1 character set, which
+ includes many accented letters and special symbols, has been added to
+ most standard fonts.
+
+o FIGlet can now print right-to-left. This can be specified on the
+ command line ("-R") or in the font file. Thus, for example, Hebrew and
+ Arabic fonts can be handled more easily.
+
+o FIGlet can now right justify its output. This is the default when
+ right-to-left printing is selected. It can also be specified on the
+ command line ("-r").
+
+o FIGlet now supports "control files". These can be used to change which
+ character FIGlet will print when it sees a certain input character --
+ sort of an expanded version of the "-D" option. For example, a control
+ file could convert lower-case letters to upper-case or map certain
+ ASCII characters to accented letters. Control file names end with the
+ suffix ".flc". Select a control file by using "-C controlfile" on the
+ command line. Several controlfiles can be used at once by giving
+ muliple "-C" options.
+
+o There is now a way for programs that use FIGlet to get various
+ information from FIGlet, for example, what version of FIGlet is being
+ used or the name of the default font directory. This information is
+ gotten through the "-I" option. See the man page for details.
diff --git a/externals/figlet/FAQ b/externals/figlet/FAQ
new file mode 100644
index 0000000000..8e8ca43163
--- /dev/null
+++ b/externals/figlet/FAQ
@@ -0,0 +1,63 @@
+ _____ _____ _____ __ __ _____ _____ _____
+| __| | __| |____| |_ | __| _ | | This FIGlet FAQ is
+| __|- -| | | | - _| _| | __| | | | posted once a month
+|__| |_____|_____|__|____|__| |__| |__|__|__ _| on figlet@figlet.org
+ info@figlet.org http://www.figlet.org/ |__| [FIGlet FAQ v0.91]
+
+===========================================================================
+The latest version of FIGlet is 2.2.5 and can be downloaded from
+ftp://ftp.figlet.org/pub/figlet/program
+===========================================================================
+
+1 What is FIGlet?
+2 Where can I get FIGlet from?
+3 Where can I get more fonts for FIGlet?
+4 Where can I hear about regular FIGlet program and font updates?
+5 How can I contribute?
+6 Why am I getting this mail and can you make it stop?
+7 Where does the name FIGlet come from?
+
+===========================================================================
+
+1. What is FIGlet?
+ FIGlet is a program for making large letters out of ordinary text
+ _ _ _ _ _ _
+ | (_) | _____ | |_| |__ (_)___
+ | | | |/ / _ \ | __| '_ \| / __|
+ | | | < __/ | |_| | | | \__ \
+ |_|_|_|\_\___| \__|_| |_|_|___/
+
+2. Where can I get FIGlet from?
+ From the official FIGlet website at http://www.figlet.org/
+ or from the FIGlet FTP site at ftp://ftp.figlet.org/pub/figlet/
+
+3. Where can I get more fonts for FIGlet?
+ From the FTP site at ftp://ftp.figlet.org/pub/figlet/fonts/
+ There are currently over 400 fonts available for download
+
+4 Where can I hear about regular FIGlet program and font updates?
+ There is a mailing list for FIGlet for general discussions about
+ FIGlet and a place where you can ask questions or share ideas
+ with other FIGlet users. It is also the place where we will publish
+ news about new fonts, new software updates etc.
+
+ To subscribe or unsubscribe from the FIGlet mailing list,
+ please send email to figlet-subscribe@figlet.org or visit the
+ following web page: http://www.figlet.org/mailman/listinfo/figlet
+
+5. How can I contribute?
+ To contribute new fonts, software or information, please contact
+ us at info@figlet.org
+
+6. Why am I getting this mail and can you make it stop?
+ If you received this email it is probably because you are subscribed
+ to the FIGlet mailing list. Please see Question 4 of this FAQ on how
+ to unsubscribe from the FIGlet list.
+
+7. Where does the name FIGlet come from?
+ "Frank, Ian and Glen's letters"
+
+
+= FAQ Maintainer ==========================================================
+Christiaan Keet keet@plig.net July 2005
+===========================================================================
diff --git a/externals/figlet/LICENSE b/externals/figlet/LICENSE
new file mode 100644
index 0000000000..a841aeaa0a
--- /dev/null
+++ b/externals/figlet/LICENSE
@@ -0,0 +1,30 @@
+Copyright (C) 1991, 1993, 1994 Glenn Chappell and Ian Chai
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+Copyright (C) 2002 Christiaan Keet
+Copyright (C) 2011 Claudio Matsuoka
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. 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.
+3. Neither the name of the copyright holders nor the names of their
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+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 HOLDERS 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/externals/figlet/Makefile b/externals/figlet/Makefile
new file mode 100644
index 0000000000..e92bcaf582
--- /dev/null
+++ b/externals/figlet/Makefile
@@ -0,0 +1,122 @@
+# Makefile for figlet version 2.2.4 (26 Jan 2011)
+# adapted from Makefile for figlet version 2.2.2 (05 July 2005)
+# adapted from Makefile for figlet version 2.2 (15 Oct 1996)
+# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+# Copyright 2002 Christiaan Keet
+# Copyright 2011 Claudio Matsuoka
+
+# Please notice that to follow modern standards and ease third-party
+# package creation, binaries are now installed under BINDIR, and DESTDIR
+# is reserved for the installation pathname prefix.
+#
+# Please make sure BINDIR, MANDIR, DEFAULTFONTDIR and
+# DEFAULTFONTFILE are defined to reflect the situation
+# on your computer. See README for details.
+
+# Don't change this even if your shell is different. The only reason
+# for changing this is if sh is not in the same place.
+SHELL = /bin/sh
+
+# The C compiler and linker to use
+CC = gcc
+CFLAGS = -g -O2 -Wall -Wno-unused-value
+LD = gcc
+LDFLAGS =
+
+# Feature flags:
+# define TLF_FONTS to use TOIlet TLF fonts
+XCFLAGS = -DTLF_FONTS
+
+# Where to install files
+prefix = /usr/local
+
+# Where the executables should be put
+BINDIR = $(prefix)/bin
+
+# Where the man page should be put
+MANDIR = $(prefix)/man
+
+# Where figlet will search first for fonts (the ".flf" files).
+DEFAULTFONTDIR = $(prefix)/share/figlet
+# Use this definition if you can't put things in $(prefix)/share/figlet
+#DEFAULTFONTDIR = fonts
+
+# The filename of the font to be used if no other is specified,
+# without suffix.(standard is recommended, but any other can be
+# used). This font file should reside in the directory specified
+# by DEFAULTFONTDIR.
+DEFAULTFONTFILE = standard
+
+##
+## END OF CONFIGURATION SECTION
+##
+
+VERSION = 2.2.5
+DIST = figlet-$(VERSION)
+OBJS = figlet.o zipio.o crc.o inflate.o utf8.o
+BINS = figlet chkfont figlist showfigfonts
+MANUAL = figlet.6 chkfont.6 figlist.6 showfigfonts.6
+DFILES = Makefile Makefile.tc $(MANUAL) $(OBJS:.o=.c) chkfont.c getopt.c \
+ figlist showfigfonts CHANGES FAQ README LICENSE figfont.txt \
+ crc.h inflate.h zipio.h utf8.h run-tests.sh figmagic
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(XCFLAGS) -DDEFAULTFONTDIR=\"$(DEFAULTFONTDIR)\" \
+ -DDEFAULTFONTFILE=\"$(DEFAULTFONTFILE)\" -o $*.o $<
+
+all: $(BINS)
+
+figlet: $(OBJS)
+ $(LD) $(LDFLAGS) -o $@ $(OBJS)
+
+chkfont: chkfont.o
+ $(LD) $(LDFLAGS) -o $@ chkfont.o
+
+clean:
+ rm -f *.o *~ core figlet chkfont
+
+install: all
+ mkdir -p $(DESTDIR)$(BINDIR)
+ mkdir -p $(DESTDIR)$(MANDIR)/man6
+ mkdir -p $(DESTDIR)$(DEFAULTFONTDIR)
+ cp $(BINS) $(DESTDIR)$(BINDIR)
+ cp $(MANUAL) $(DESTDIR)$(MANDIR)/man6
+ cp fonts/*.flf $(DESTDIR)$(DEFAULTFONTDIR)
+ cp fonts/*.flc $(DESTDIR)$(DEFAULTFONTDIR)
+
+dist:
+ rm -Rf $(DIST) $(DIST).tar.gz
+ mkdir $(DIST)/
+ cp $(DFILES) $(DIST)/
+ mkdir $(DIST)/fonts
+ cp fonts/*.fl[fc] $(DIST)/fonts
+ mkdir $(DIST)/tests
+ cp tests/*txt tests/emboss.tlf $(DIST)/tests
+ tar cvf - $(DIST) | gzip -9c > $(DIST).tar.gz
+ rm -Rf $(DIST)
+ tar xf $(DIST).tar.gz
+ (cd $(DIST); make all check vercheck)
+ @rm -Rf $(DIST)
+ @echo
+ @ls -l $(DIST).tar.gz
+
+check:
+ @echo "Run tests in `pwd`"
+ @./run-tests.sh fonts
+ @echo
+
+vercheck:
+ @printf "Infocode: "; ./figlet -I1
+ @./figlet -v|sed -n '/Version/s/.*\(Version\)/\1/p'
+ @printf "README: "; head -1 < README|sed 's/.*) //'
+ @printf "FAQ: "; grep latest FAQ|sed 's/ and can.*//'
+ @grep -h "^\.TH" *.6
+
+$(OBJS) chkfont.o getopt.o: Makefile
+chkfont.o: chkfont.c
+crc.o: crc.c crc.h
+figlet.o: figlet.c zipio.h
+getopt.o: getopt.c
+inflate.o: inflate.c inflate.h
+zipio.o: zipio.c zipio.h inflate.h crc.h
diff --git a/externals/figlet/Makefile.tc b/externals/figlet/Makefile.tc
new file mode 100644
index 0000000000..435fc580c9
--- /dev/null
+++ b/externals/figlet/Makefile.tc
@@ -0,0 +1,42 @@
+# Turbo C makefile for figlet
+# adapted from Makefile for figlet version 2.3.0 (11 Jan 2011)
+# adapted from Makefile for figlet version 2.2.2 (05 July 2005)
+# adapted from Makefile for figlet version 2.2 (15 Oct 1996)
+# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+# Copyright 2002 Christiaan Keet
+# Copyright 2011 Claudio Matsuoka
+
+# The C compiler and linker to use
+CC = tcc
+CFLAGS = -mc -I\tc\include
+LD = tcc
+LDFLAGS = -mc -L\tc\lib
+
+# Use this definition if you can't put things in /usr/local/share/figlet
+DEFAULTFONTDIR = fonts
+
+# The filename of the font to be used if no other is specified
+# (standard.flf is recommended, but any other can be used).
+# This font file should reside in the directory specified by
+# DEFAULTFONTDIR.
+DEFAULTFONTFILE = standard.flf
+
+##
+## END OF CONFIGURATION SECTION
+##
+
+OBJS = figlet.obj zipio.obj crc.obj inflate.obj getopt.obj
+BINS = figlet.exe chkfont.exe
+
+.c.obj:
+ $(CC) -c $(CFLAGS) -DDEFAULTFONTDIR="$(DEFAULTFONTDIR)" \
+ -DDEFAULTFONTFILE="$(DEFAULTFONTFILE)" -o$*.obj $<
+
+all: $(BINS)
+
+figlet.exe: $(OBJS)
+ $(LD) $(LDFLAGS) -o$@ $(OBJS)
+
+chkfont.exe: chkfont.obj
+ $(LD) $(LDFLAGS) -o$@ chkfont.obj
diff --git a/externals/figlet/README b/externals/figlet/README
new file mode 100644
index 0000000000..f6f2c752d0
--- /dev/null
+++ b/externals/figlet/README
@@ -0,0 +1,242 @@
+About FIGlet (Frank, Ian & Glenn's Letters) release 2.2.5, 31 May 2012
+--------------------------------------------------------------------------
+FIGlet is a program that creates large characters out of ordinary
+screen characters
+ _ _ _ _ _ _
+| (_) | _____ | |_| |__ (_)___
+| | | |/ / _ \ | __| '_ \| / __|
+| | | < __/ | |_| | | | \__ \_
+|_|_|_|\_\___| \__|_| |_|_|___(_)
+
+(This is meant to be viewed in a monospaced font.) FIGlet can create
+characters in many different styles and can kern and "smush" these
+characters together in various ways. FIGlet output is generally
+reminiscent of the sort of "signatures" many people like to put at the
+end of e-mail and UseNet messages.
+
+If you like FIGlet (hey, even if you *hate* FIGlet), please send an
+e-mail message to <info@figlet.org>
+
+The official FIGlet web page: http://www.figlet.org/
+
+Files -- Unix version
+---------------------
+
+README -- This file.
+figlet.c -- The FIGlet source code.
+zipio.h, -- A package for reading ZIP archives
+zipio.c,
+inflate.c,
+crc.c
+utf8.h, -- A package to convert strings between UTF-8 and UCS-4.
+utf8.c
+getopt.c -- Source for the standard "getopt" routine, in case you
+ don't have it in your C library. Not used by default.
+Makefile -- The FIGlet makefile. Used by the make command.
+figlet.6 -- The FIGlet man(ual) page.
+figlist -- Script that lists available fonts and control files.
+showfigfonts -- Script that gives a sample of each available font.
+chkfont.c -- Source code for chkfont: a program that checks FIGlet
+ fonts for formatting errors. You can ignore this file
+ unless you intend to design or edit fonts.
+figfont.txt -- Text file that explains the format of FIGlet fonts.
+ You can ignore this file unless you intend to design
+ or edit fonts.
+fonts -- Directory containing fonts and control files.
+<xxx>.flf -- All files ending in ".flf" are FIGlet font files.
+<xxx>.flc -- All files ending in ".flc" are FIGlet control files.
+
+Files -- DOS version
+--------------------
+
+README -- This file
+figlet.exe -- The FIGlet program.
+figlet.man -- The FIGlet man(ual) page.
+showall.bat -- Batch file that lists available fonts and samples of each.
+chkfont.exe -- A program that checks FIGlet fonts for formatting errors.
+ You can ignore this file unless you intend to design
+ or edit fonts.
+figfont.txt -- Text file that explains the format of FIGlet fonts.
+ You can ignore this file unless you intend to design
+ or edit fonts.
+fonts -- Directory containing fonts and control files.
+<xxx>.flf -- All files ending in ".flf" are FIGlet font files.
+<xxx>.flc -- All files ending in ".flc" are FIGlet control files.
+
+
+Installing FIGlet --- Unix version
+----------------------------------
+
+First decide in which directories FIGlet and the FIGlet font files
+(the ".flf" files) will be stored (we recommend "/usr/games" and
+"/usr/games/lib/figlet.dir", respectively) and which will be the
+default font (we recommend "standard.flf").
+
+Edit "Makefile", and set the variables DEFAULTFONTDIR and
+DEFAULTFONTFILE to the appropriate values. Set DEFAULTFONTDIR to be
+the full pathname of the directory in which you will keep the FIGlet
+font files. Set DEFAULTFONTFILE to be the filename of the default
+font.
+
+At this point, you have two choices:
+
+(1) Just compile FIGlet. To go this, go into the directory containing
+the FIGlet source, and type "make figlet". Then copy the various files
+to the proper locations. The executable (figlet), along with figlist
+and showfigfonts, goes wherever you keep your executables. The fonts
+(<xxx>.flf) and control files (<xxx>.flc) go in the default font
+directory. The man page (figlet.6) goes in section 6 (usually
+/usr/man/man6). If you cannot, or do not want to, install the man page,
+you can probably still read it using
+
+ nroff -man figlet.6 | more
+
+(2) Do a complete installation. To do the this, set the variables
+BINDIR and MANDIR in Makefile to the appropriate values. BINDIR
+should be the full pathname of the directory in which the executable
+files should be put (we recommend "/usr/games"); MANDIR should be the
+full pathname of the directory in which the figlet man page should be
+put, generally "/usr/man/man6". Once DEFAULTFONTDIR, DEFAULTFONTFILE,
+BINDIR and MANDIR have been set, in the directory containing the FIGlet
+source, type "make install".
+
+If space is a problem, the only files you absolutely must have to run
+figlet are "figlet" (the executable) and at least one font (preferably
+the one you chose to be the default font).
+
+Installing FIGlet -- DOS version
+--------------------------------
+
+Unpack the ZIPfile using PKUNZIP, Info-Zip UNZIP, WinUnzip, or any other
+ZIP-compatible program. Be sure to use the -d option with PKUNZIP
+in order to preserve the directory structure. We recommend that you
+unpack the archive into C:\FIGLET, but any directory will do.
+
+If you unpack the archive on top of an older version of FIGlet, be
+sure to delete the file FIGLET.COM. The executable program in this
+release is named FIGLET.EXE. You can keep your old fonts by putting
+them in a FONTS subdirectory before unpacking. (There are upgraded
+versions of the standard fonts in the archive.)
+
+Using FIGlet
+------------
+
+(Note: FIGlet needs a good thorough tutorial. Currently I don't have
+the time to write one, but if anyone wants to do so, go right ahead.
+I'd be glad to help out a little. Write us at <ianchai@usa.net> if
+you're interested. -GGC-)
+
+At the shell prompt, type "figlet". Then type, say, "Hello, world!"
+and press return. "Hello, world!" in nice, big, designer characters
+should appear on your screen. If you chose standard.flf to be the
+default font, you should see
+ _ _ _ _ _ _ _
+| | | | ___| | | ___ __ _____ _ __| | __| | |
+| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
+| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
+|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
+ |/
+Then type something else, or type an EOF (typically control-D) to quit
+FIGlet.
+
+Now you can send the output of figlet to a file (e.g., "figlet > file")
+and e-mail it to your friends (who will probably say, "Wow! It must
+have taken you hours to put that together!")
+
+To use other fonts, use the "-f" command line option. For example, if
+you had said "figlet -f smslant" above, you would have seen
+ __ __ ____ __ ____
+ / // /__ / / /__ _ _____ ____/ /__/ / /
+ / _ / -_) / / _ \_ | |/|/ / _ \/ __/ / _ /_/
+/_//_/\__/_/_/\___( ) |__,__/\___/_/ /_/\_,_(_)
+ |/
+
+Here are some other useful command line options:
+
+-c center -- centers the output of FIGlet.
+-k tells FIGlet to kern characters without smushing them together.
+-t terminal -- FIGlet asks your terminal how wide it is, and uses
+ this to determine when to break lines. Normally, FIGlet assumes
+ 80 columns so that people with wide terminals won't annoy the
+ people they e-mail FIGlet output to.
+-p paragraph mode -- eliminates some spurious line breaks when piping
+ a multi-line file through FIGlet.
+-v version -- prints information about your copy of FIGlet.
+
+For in-depth explanations of these and other options, see the man page.
+DOS users, see figlet.man.
+
+
+Other Fonts & Mailing List
+--------------------------
+
+A good number of FIGlet fonts have been developed, most of which are
+not included in the standard FIGlet package. Many of these can be
+obtained from http://www.figlet.org/ Some non-Roman fonts are
+available at this site. As of this writing, we have Hebrew, Cyrillic
+(Russian) and Greek.
+
+There are 3 mailing lists available for FIGlet:
+ figlet@figlet.org General discussion of FIGlet
+ figletfonts@figlet.org Announcements about fonts
+ figletsoftware@figlet.org Announcements about software
+ (The last two lists are moderated)
+
+To subscribe or unsubscribe from the FIGlet mailing lists, please visit
+the corresponding URL:
+ http://www.figlet.org/mailman/listinfo/figlet
+ http://www.figlet.org/mailman/listinfo/figletfonts
+ http://www.figlet.org/mailman/listinfo/figletsoftware
+
+Also, for those who maintain archives of figlet fonts, please note that
+all of the standard fonts have been changed, as of release 2.1, to
+include non-ASCII characters. These fonts are the following:
+
+big.flf (also contains Greek)
+banner.flf (also contains Cyrillic and Japanese katakana)
+block.flf
+bubble.flf
+digital.flf
+ivrit.flf (right-to-left, also contains Hebrew)
+lean.flf
+mini.flf
+script.flf
+shadow.flf
+slant.flf
+small.flf
+smscript.flf
+smshadow.flf
+smslant.dld
+standard.flf
+term.flf
+
+The new versions of these fonts can be identified by the words "figlet
+release 2.1" somewhere in the first few lines.
+
+
+Other Stuff
+-----------
+
+FIGlet is available for operating systems other than Unix.
+Please see ftp://ftp.figlet.org/program/
+
+Although you don't have to design your own fonts to use FIGlet, we'd
+certainly like it if lots of people did make up new FIGlet fonts. If
+you feel like giving it a try, see the "FONT FILE FORMAT" section of
+the man page. If you do design a font, please let us know by mailing us
+at <info@figlet.org>
+
+See "Other Things to Try" in the EXAMPLES section of the man page
+for... well... other things to try.
+
+
+Authors
+-------
+
+FIGlet was written mostly by Glenn Chappell <c486scm@semovm.semo.edu>. The
+author not being an e-mail fanatic, most correspondence (bug reports, rave
+reviews, etc.) used to be handled to his secretary (who is definitely
+an e-mail fanatic), Ian Chai <ianchai@usa.net> and has since moved on to
+another FIGlet enthusiast, Christiaan Keet <info@figlet.org>. Current
+maintenance is conducted by Claudio Matsuoka <cmatsuoka@gmail.com>.
+
diff --git a/externals/figlet/chkfont.6 b/externals/figlet/chkfont.6
new file mode 100644
index 0000000000..681d6ad556
--- /dev/null
+++ b/externals/figlet/chkfont.6
@@ -0,0 +1,52 @@
+.\" chkfont
+.\" By Glenn Chappell <ggc@uiuc.edu>
+.\"
+.\" This program checks figlet 2.0/2.1 font files for format errors.
+.\" It also looks for signs of common problems and gives warnings.
+.\" chkfont does not modify font files.
+.\"
+.\" Usage: chkfont fontfile ...
+.\"
+.\" Note: This is very much a spare-time project. It's probably
+.\" full o' bugs.
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH CHKFONT 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+chkfont \- checks figlet 2.0 and up font files for format errors
+
+.SH SYNOPSIS
+.B chkfont
+[
+.I fontfile
+]
+
+.SH DESCRIPTION
+This program checks figlet 2.0 and up font files for format errors.
+It also looks for signs of common problems and gives warnings.
+chkfont does not modify font files.
+
+.SH EXAMPLES
+To use
+.B chkfont
+on the "big" font
+.RS
+
+.B example% chkfont /usr/share/figlet/big.flf
+
+.RE
+
+.SH BUGS
+Doesn't work on compressed font files.
+
+.SH AUTHORS
+chkfont was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR showfigfonts (6),
+.BR figlist (6)
diff --git a/externals/figlet/chkfont.c b/externals/figlet/chkfont.c
new file mode 100644
index 0000000000..63bf381b31
--- /dev/null
+++ b/externals/figlet/chkfont.c
@@ -0,0 +1,476 @@
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#ifdef __STDC__
+#include <stdlib.h>
+#endif
+
+#define DATE "20 Feb 1996"
+#define VERSION "2.2"
+
+/*
+ chkfont
+ By Glenn Chappell <ggc@uiuc.edu>
+
+ This program checks figlet 2.0/2.1 font files for format errors.
+ It also looks for signs of common problems and gives warnings.
+ chkfont does not modify font files.
+
+ Usage: chkfont fontfile ...
+
+ Note: This is very much a spare-time project. It's probably
+ full o' bugs ....
+*/
+
+/* #define CHECKBLANKS */
+#define FONTFILESUFFIX ".flf"
+#define FONTFILEMAGICNUMBER "flf2"
+char posshardblanks[9] = { '!', '@', '#', '$', '%', '&', '*', 0x7f, 0 };
+
+char *myname,*fontfilename;
+FILE *fontfile;
+char hardblank;
+int charheight,upheight,maxlen=0,old_layout;
+int spectagcnt;
+char *fileline;
+int maxlinelength=0,currline;
+int ec,wc;
+
+int incon_endmarkwarn,endmark_countwarn,nonincrwarn;
+int bigcodetagwarn,deutschcodetagwarn,asciicodetagwarn;
+int codetagcnt;
+int gone;
+
+void weregone(really)
+int really;
+{
+if (!really && 2*ec+wc<=40) {
+ return;
+ }
+if (ec+wc>0) printf("*******************************************************************************\n");
+if (!really) {
+ printf("%s: Too many errors/warnings.\n",fontfilename);
+ }
+printf("%s: Errors: %d, Warnings: %d\n",fontfilename,ec,wc);
+if (currline>1 && maxlen!=maxlinelength) {
+ printf("%s: maxlen: %d, actual max line length: %d\n",
+ fontfilename,maxlen,maxlinelength);
+ if (codetagcnt>0 && spectagcnt==-1) {
+ printf("%s: Code-tagged characters: %d\n",fontfilename,codetagcnt);
+ }
+ }
+printf("-------------------------------------------------------------------------------\n");
+gone=1;
+}
+
+char *my_alloc(size)
+int size;
+{
+char *ptr;
+
+ptr=(char *)malloc(size);
+if (ptr==NULL) {
+ fprintf(stderr,"%s: Out of memory\n",myname);
+ exit(1);
+ }
+return(ptr);
+}
+
+int badsuffix(path,suffix)
+char *path;
+char *suffix;
+{
+ char ucsuffix[10];
+ char *s;
+
+ strcpy(ucsuffix,suffix);
+ for (s = ucsuffix; *s; s++) {
+ *s = toupper(*s);
+ }
+
+ if (strlen(path)<strlen(suffix)) return 1;
+ s = path + strlen(path) - strlen(suffix);
+ if (strcmp(s,suffix) == 0) return 0;
+ if (strcmp(s,ucsuffix) == 0) return 0;
+ return 1;
+}
+
+void usageerr()
+{
+fprintf(stderr,"chkfont by Glenn Chappell <ggc@uiuc.edu>\n");
+fprintf(stderr,"Version: %s, date: %s\n",VERSION,DATE);
+fprintf(stderr,"Checks figlet 2.0/2.1 font files for format errors.\n");
+fprintf(stderr,"(Does not modify font files.)\n");
+fprintf(stderr,"Usage: %s fontfile ...\n",myname);
+exit(1);
+}
+
+void readchar()
+{
+int i,expected_width,k,len,newlen,diff,l;
+char endmark,expected_endmark;
+int leadblanks,minleadblanks,trailblanks,mintrailblanks;
+char *ret;
+
+expected_width = expected_endmark = 0; /* prevent compiler warning */
+for (i=0;i<charheight;i++) {
+ ret = fgets(fileline,maxlen+1000,fontfile);
+ if (ret == NULL) {
+ printf("%s: ERROR (fatal)- Unexpected read error after line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+ if (feof(fontfile)) {
+ printf("%s: ERROR (fatal)- Unexpected end of file after line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+ currline++;
+ len=strlen(fileline)-1;
+ if (len>maxlinelength) {
+ maxlinelength=len;
+ }
+ if (len>maxlen) {
+ printf("%s: ERROR- Line length > maxlen in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ k=len;
+ endmark=k<0?'\0':(k==0||fileline[k]!='\n')?fileline[k]:fileline[k-1];
+ for(;k>=0?(fileline[k]=='\n' || fileline[k]==endmark):0;k--) {
+ fileline[k]='\0';
+ }
+ newlen=strlen(fileline);
+ for (l=0;l<newlen ? fileline[l]==' ' : 0;l++) ;
+ leadblanks = l;
+ for (l=newlen-1;l>=0 ? fileline[l]==' ' : 0;l--) ;
+ trailblanks = newlen-1-l;
+ if (i==0) {
+ expected_endmark = endmark;
+ expected_width = newlen;
+ minleadblanks = leadblanks;
+ mintrailblanks = trailblanks;
+ if (endmark==' ') {
+ printf("%s: Warning- Blank endmark in line %d.\n",
+ fontfilename,currline);
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ }
+ else {
+ if (leadblanks<minleadblanks) minleadblanks = leadblanks;
+ if (trailblanks<mintrailblanks) mintrailblanks = trailblanks;
+ if (endmark!=expected_endmark && !incon_endmarkwarn) {
+ printf("%s: Warning- Inconsistent endmark in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ incon_endmarkwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ if (newlen!=expected_width) {
+ printf("%s: ERROR- Inconsistent character width in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ }
+ diff=len-newlen;
+ if (diff>2) {
+ printf("%s: ERROR- Too many endmarks in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ else if (charheight>1 && (diff!=(i==charheight-1)+1)) {
+ if (!endmark_countwarn) {
+ printf("%s: Warning- Endchar count convention violated in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ endmark_countwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ }
+ }
+#ifdef CHECKBLANKS
+if (minleadblanks+mintrailblanks>0 && old_layout>=0) {
+ printf("%s: Warning- Leading/trailing blanks in char. ending at line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning only given when old_layout > -1.)\n",
+ fontfilename);
+ wc++;
+ weregone(0); if (gone) return;
+ }
+#endif /* #ifdef CHECKBLANKS */
+}
+
+
+void checkit()
+{
+int i,k,cmtcount,numsread,ffrighttoleft,have_layout,layout;
+char magicnum[5],cha;
+long oldord,theord;
+int tmpcnt,len;
+
+ec=0;wc=0;
+incon_endmarkwarn=0; endmark_countwarn=0; nonincrwarn=0;
+bigcodetagwarn=0; deutschcodetagwarn=0;
+asciicodetagwarn=0;
+codetagcnt=0;
+gone=0;
+if (!strcmp(fontfilename,"-")) {
+ fontfilename="(stdin)";
+ fontfile=stdin;
+ }
+else {
+ fontfile=fopen(fontfilename,"r");
+ if (fontfile == NULL) {
+ fprintf(stderr,"%s: Could not open file '%s'\n",myname,fontfilename);
+ exit(1);
+ }
+ }
+
+if (fontfile!=stdin) {
+ if (badsuffix(fontfilename,FONTFILESUFFIX)) {
+ printf("%s: ERROR- Filename does not end with '%s'.\n",
+ fontfilename,FONTFILESUFFIX);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ }
+numsread=fscanf(fontfile,"%4s",magicnum);
+if (numsread == EOF) {
+ printf("%s: ERROR- can't read magic number.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (strcmp(magicnum,FONTFILEMAGICNUMBER)) {
+ printf("%s: ERROR- Incorrect magic number.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+cha=getc(fontfile);
+if (cha!='a') {
+ printf("%s: Warning- Sub-version character is not 'a'.\n",fontfilename);
+ wc++;
+ weregone(0); if (gone) return;
+ }
+fileline=(char*)my_alloc(sizeof(char)*(1001));
+if (fgets(fileline,1001,fontfile)==NULL) {
+ fileline[0] = '\0';
+ }
+if (strlen(fileline)>0 ? fileline[strlen(fileline)-1]!='\n' : 0) {
+ while(k=getc(fontfile),k!='\n'&&k!=EOF) ; /* Advance to end of line */
+ }
+numsread=sscanf(fileline,"%c %d %d %d %d %d %d %d %d",
+ &hardblank,&charheight,&upheight,&maxlen,&old_layout,&cmtcount,
+ &ffrighttoleft,&layout,&spectagcnt);
+free(fileline);
+fileline = NULL;
+if (numsread<7) {
+ ffrighttoleft=0;
+ }
+if (numsread<9) {
+ spectagcnt=-1;
+ }
+have_layout = (numsread>=8);
+if (6>numsread) {
+ printf("%s: ERROR (fatal)- First line improperly formatted.\n",fontfilename);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+if (!strchr(posshardblanks,hardblank)) {
+ printf("%s: Warning- Unusual hardblank.\n",fontfilename);
+ wc++;
+ weregone(0); if (gone) return;
+ }
+if (charheight<1) {
+ printf("%s: ERROR (fatal)- charheight not positive.\n",fontfilename);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+if (upheight>charheight || upheight<1) {
+ printf("%s: ERROR- up_height out of bounds.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (maxlen<1) {
+ printf("%s: ERROR (fatal)- maxlen not positive.\n",fontfilename);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+if (old_layout<-1) {
+ printf("%s: ERROR- old_layout < -1.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (old_layout>63) {
+ printf("%s: ERROR- old_layout > 63.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout && layout<0) {
+ printf("%s: ERROR- layout < 0.\n", fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout &&layout>32767) {
+ printf("%s: ERROR- layout > 32767.\n", fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout && old_layout == -1 && (layout & 192)) {
+ printf("%s: ERROR- layout %d is inconsistent with old_layout -1.\n",
+ fontfilename,layout);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout && old_layout == 0 && (layout & 192) != 64 &&
+ (layout & 255) != 128) {
+ printf("%s: ERROR- layout %d is inconsistent with old_layout 0.\n",
+ fontfilename,layout);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout && old_layout > 0 &&
+ (!(layout & 128) || old_layout != (layout & 63))) {
+ printf("%s: ERROR- layout %d is inconsistent with old_layout %d.\n",
+ fontfilename,layout,old_layout);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (cmtcount<0) {
+ printf("%s: ERROR- cmt_count is negative.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (ffrighttoleft<0 || ffrighttoleft>1) {
+ printf("%s: ERROR- rtol out of bounds.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+
+for (i=1;i<=cmtcount;i++) {
+ while(k=getc(fontfile),k!='\n'&&k!=EOF) ; /* Advance to end of line */
+ }
+
+maxlinelength = 0;
+currline=cmtcount+1;
+fileline=(char*)my_alloc(sizeof(char)*(maxlen+1001));
+for (i=0;i<102;i++) {
+ readchar();
+ if (gone) return;
+ }
+
+oldord=0;
+while(fgets(fileline,maxlen+1000,fontfile)!=NULL) {
+ currline++;
+ len=strlen(fileline)-1;
+ if (len-100>maxlinelength) {
+ maxlinelength=len-100;
+ }
+ if (len>maxlen+100) {
+ printf("%s: ERROR- Code tag line way too long in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ tmpcnt=sscanf(fileline,"%li",&theord);
+ if (tmpcnt<1) {
+ printf("%s: Warning- Extra chars after font in line %d.\n",
+ fontfilename,currline);
+ wc++;
+ weregone(0); if (gone) return;
+ break;
+ }
+ codetagcnt++;
+ if (theord>65535 && !bigcodetagwarn) {
+ printf("%s: Warning- Code tag > 65535 in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ bigcodetagwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ if (theord==-1) {
+ printf("%s: ERROR- Code tag -1 (unusable) in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ break;
+ }
+ if (theord>=-255 && theord<=-249 &&!deutschcodetagwarn) {
+ printf("%s: Warning- Code tag in old Deutsch area in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ deutschcodetagwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ if (theord<127 && theord>31 && !asciicodetagwarn) {
+ printf("%s: Warning- Code tag in ASCII range in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ asciicodetagwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ else if (theord<=oldord && theord>=0 && oldord>=0 && !nonincrwarn) {
+ printf("%s: Warning- Non-increasing code tag in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ nonincrwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ oldord=theord;
+ readchar();
+ if (gone) return;
+ }
+
+if (spectagcnt!=-1 && spectagcnt!=codetagcnt) {
+ printf("%s: ERROR- Inconsistent Codetag_Cnt value %d\n",
+ fontfilename, spectagcnt);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+
+if (fontfile!=stdin) fclose(fontfile);
+
+weregone(1); if (gone) return;
+}
+
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+int arg;
+
+if ((myname=strrchr(argv[0],'/'))!=NULL) {
+ myname++;
+ }
+else {
+ myname = argv[0];
+ }
+if (argc<2) {
+ usageerr();
+ }
+for (arg=1;arg<argc;arg++) {
+ fontfilename=argv[arg];
+ fileline=NULL;
+ checkit();
+ if (fileline!=NULL) free(fileline);
+ }
+return 0;
+}
diff --git a/externals/figlet/crc.c b/externals/figlet/crc.c
new file mode 100644
index 0000000000..b1491fc21d
--- /dev/null
+++ b/externals/figlet/crc.c
@@ -0,0 +1,129 @@
+/*
+ * crc.c - CRC calculation routine
+ *
+ * Version 1.0.1
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.0 to 1.0.1:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+#include "crc.h"
+
+/* This is a pre-computed table to make crc computations efficient */
+static unsigned long crctable[] = {
+ 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL,
+ 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L,
+ 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L,
+ 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L,
+ 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
+ 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L,
+ 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL,
+ 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L,
+ 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L,
+ 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
+ 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L,
+ 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L,
+ 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L,
+ 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL,
+ 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
+ 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL,
+ 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL,
+ 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L,
+ 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L,
+ 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
+ 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL,
+ 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L,
+ 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL,
+ 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L,
+ 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
+ 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL,
+ 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L,
+ 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L,
+ 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L,
+ 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
+ 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L,
+ 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL,
+ 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL,
+ 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L,
+ 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
+ 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L,
+ 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL,
+ 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L,
+ 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL,
+ 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
+ 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L,
+ 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL,
+ 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L,
+ 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L,
+ 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
+ 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL,
+ 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L,
+ 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL,
+ 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL,
+ 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
+ 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L,
+ 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L,
+ 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL,
+ 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L,
+ 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
+ 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L,
+ 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L,
+ 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL,
+ 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L,
+ 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
+ 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L,
+ 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL,
+ 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L,
+ 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL
+};
+
+/*
+ * This CRC algorithm is the same as that used in zip. Normally it
+ * should be initialized with 0xffffffff, and the final CRC stored
+ * should be crc ^ 0xffffffff.
+ *
+ * It implements the polynomial:
+ *
+ * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
+ */
+
+unsigned long CrcUpdate( /* returns updated crc */
+ unsigned long crc, /* starting crc */
+ unsigned char *buffer, /* buffer to use to update crc */
+ long length /* length of buffer */
+)
+{
+ long i;
+
+ for (i=0; i<length; i++)
+ {
+ crc = crctable[buffer[i] ^ ((unsigned char) crc)] ^ (crc >> 8);
+ }
+
+ return crc;
+}
diff --git a/externals/figlet/crc.h b/externals/figlet/crc.h
new file mode 100644
index 0000000000..bd7c5361f8
--- /dev/null
+++ b/externals/figlet/crc.h
@@ -0,0 +1,62 @@
+/*
+ * crc.h - CRC calculation routine
+ *
+ * Version 1.0.1
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.0 to 1.0.1:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * This CRC algorithm is the same as that used in zip. Normally it
+ * should be initialized with 0xffffffff, and the final CRC stored
+ * should be crc ^ 0xffffffff.
+ *
+ * It implements the polynomial:
+ *
+ * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
+ */
+
+#ifndef __CRC_H
+#define __CRC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+unsigned long CrcUpdate( /* returns updated crc */
+ unsigned long crc, /* starting crc */
+ unsigned char *buffer, /* buffer to use to update crc */
+ long length /* length of buffer */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/figlet/figfont.txt b/externals/figlet/figfont.txt
new file mode 100644
index 0000000000..8cbe6ea7b5
--- /dev/null
+++ b/externals/figlet/figfont.txt
@@ -0,0 +1,1695 @@
+ _____ ___ ____ __ _
+ | ___||_ _|/ ___| / _| ___ _ __ | |_ ___ _
+ | |_ | || | _ | |_ / _ \ | '_ \ | __|/ __|(_)
+ | _| | || |_| || _|| (_) || | | || |_ \__ \ _
+ |_| |___|\____||_| \___/ |_| |_| \__||___/(_)
+
+ The FIGfont Version 2 FIGfont and FIGdriver Standard
+ === ======= ======= = ======= === ========= ========
+ Draft 2.0 Copyright 1996, 1997
+ by John Cowan and Paul Burton
+ Portions Copyright 1991, 1993, 1994
+ by Glenn Chappell and Ian Chai
+ May be freely copied and distributed.
+
+ Figlet lives at: http://www.figlet.org/
+
+ _____ __ __
+ / ___/__ ___ / /____ ___ / /____
+/ /__/ _ \/ _ \/ __/ -_) _ \/ __(_-<
+\___/\___/_//_/\__/\__/_//_/\__/___/
+
+ INTRODUCTION
+ BASIC DEFINITIONS AND CONCEPTS
+ "FIGfont"
+ "FIGcharacters" and "Sub-characters"
+ "FIGdriver"
+ "FIGure"
+ "FIG"
+ "Layout Modes"
+ "Smushing Rules"
+ "Hardblanks"
+ CREATING FIGFONTS
+ The Header Line
+ Interpretation of Layout Parameters
+ Setting Layout Parameters Step-by-Step
+ FIGfont Comments
+ FIGcharacter Data
+ - Basic Data Structure
+ - Character Codes
+ - Required FIGcharacters
+ - Code Tagged FIGcharacters
+ NOTES - AVOIDING ERRORS AND GENERAL ADVICE
+ CONTROL FILES
+ Standard Format
+ Extended Commands
+ STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS
+ CHART OF CAPABILITIES OF FIGLET 2.2.2 AND FIGWIN 1.0
+
+
+INTRODUCTION
+============
+
+This document specifies the format of font files, and the associated control
+files, used by the FIGlet and FIGWin programs (FIGdrivers). It is written
+for designers who wish to build fonts (FIGfonts) usable by either program,
+and also serves as a standard for development of future versions or similar
+FIGdrivers. Some features explained here are not supported by both programs.
+See separate documentation to learn how to use FIGlet or FIGWin.
+
+NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows
+1.0, which is just that. It does not require a complete understanding of
+this document to create FIGfonts. However it is a good idea to become
+familiar with the "BASIC DEFINITIONS AND CONCEPTS" information before using
+it.
+
+If you design a FIGfont, please send an e-mail announcement to
+<figletfonts@figlet.org>, the FIGlet fonts mailing list, and email a copy
+to info@figlet.org for us to put it on the ftp site (ftp://ftp.figlet.org/)
+
+BASIC DEFINITIONS AND CONCEPTS
+===== =========== === ========
+
+"FIGfont"
+
+A FIGfont is a file which represents the graphical arrangement of characters
+representing larger characters. Since a FIGfont file is a text file, it can
+be created with any text editing program on any platform. The filename of a
+FIGfont file must end with ".flf", which stands for "<F>IG<L>ettering
+<F>ont".
+
+
+"FIGcharacters" and "Sub-characters"
+
+Because FIGfonts describe large characters which consist of smaller
+characters, confusion can result when descussing one or the other.
+Therefore, the terms "FIGcharacter" and "sub-character" are used,
+respectively.
+
+
+"FIGdriver"
+
+The term FIGdriver is used in this document to encompass FIGlet, FIGWin, and
+any future programs which use FIGfonts.
+
+
+"FIGure"
+
+A FIGure (thusly capitalized) is an image created by a FIGdriver.
+
+
+"FIG"
+
+A bit of history:
+
+In Spring 1991, inspired by the Email signature of a friend named Frank, and
+goaded on by Ian Chai, Glenn Chappell wrote a nifty little 170-line "C"
+program called "newban", which would create large letters out of ordinary
+text characters. At the time, it was only compiled for UNIX. In hindsight,
+we now call it "FIGlet 1.0". FIGlet stands for <F>rank, <I>an, and <G>lenn's
+<let>ters. In various incarnations, newban circulated around the net for a
+couple of years. It had one font, which included only lowercase letters.
+
+In early 1993, Ian decided newban was due for a few changes, so together Ian
+and Glenn added the full ASCII character set, to start with. First, though,
+Ian had to find a copy of the source, since Glenn had tossed it away as not
+worth the disk space. Ian and Glenn discussed what could be done with it,
+decided on a general re-write, and, 7 months later, ended up with 888 lines
+of code, 13 FIGfonts and documentation. This was FIGlet 2.0, the first real
+release.
+
+To their great surprise, FIGlet took the net by storm. They received floods
+of "FIGlet is great!" messages and a new contributed FIGfont about once a
+week. To handle all the traffic, Ian quickly set up a mailing list, Daniel
+Simmons kindly offered space for an FTP site, several people volunteered to
+port FIGlet to non-Unix operating systems, ...and bug reports poured in.
+
+Because of these, and the need to make FIGlet more "international", Ian and
+Glenn released a new version of FIGlet which could handle non-ASCII character
+sets and right-to-left printing. This was FIGlet 2.1, which, in a couple of
+weeks, became figlet 2.1.1. This weighed in at 1314 lines, and there were
+over 60 FIGfonts.
+
+By late 1996, FIGlet had quite a following of fans subscribing to its mailing
+list. It had been ported to MS-DOS, Macintosh, Amiga, Apple II GS, Atari ST,
+Acorn and OS/2. FIGlet had been further updated, and there were nearly 200
+FIGfonts.
+
+John Cowan and Paul Burton are two FIGlet fans who decided to create new
+versions. While John wrote FIGlet version 2.2 using C, Paul wrote FIGWin
+1.0, the first true GUI (Windows) implementation of FIGlet, using Visual
+Basic. John and Paul worked together to add new features to FIGfont files
+which could be read by both programs, and together wrote this document, which
+we hope helps to establish consistency in FIGfonts and help with the creation
+of future FIGdrivers. FIGlet 2.2 has about 4800 lines of code, of which
+over half is a support library for reading compressed files.
+
+Three years later, in July 2005, FIGlet 2.2.2 was released under a new License
+(the ``Academic Free License 2.1''). This version has proved to be very
+stable, and persisted for more five years until minor bugfixes and another
+license change resulted in the release of FIGlet 2.2.3 in January 2011. All
+license concerns involving contributed code were solved and FIGlet is now
+distributed under the ``New BSD License''. Contributed fonts amounted to more
+than 400.
+
+FIGlet 2.2 and FIGWin 1.0 both allow greater flexibility by use of new
+information which can be contained in FIGfont files without interfering with
+the function of older FIGdrivers.
+
+NOTE: The Macintosh version of FIGlet is still command-line driven as of this
+writing, and a GUI version is very much in demand. The FIGlet C code is
+written to be easily plugged in to a GUI shell, so it will be a relatively
+easy task for a Macintosh developer.
+
+
+
+
+"Layout Modes"
+
+A FIGdriver may arrange FIGcharacters using one of three "layout modes",
+which define the spacing between FIGcharacters. The layout mode for the
+horizontal axis may differ from the layout mode for the vertical axis. A
+default choice is defined for each axis by every FIGfont.
+
+The three layout modes are:
+
+ Full Size (Separately called "Full Width" or "Full Height".)
+
+ Represents each FIGcharacter occupying the full width or
+ height of its arrangement of sub-characters as designed.
+
+ Fitting Only (Separately called "Kerning or "Vertical Fitting".)
+
+ Moves FIGcharacters closer together until they touch.
+ Typographers use the term "kerning" for this phenomenon
+ when applied to the horizontal axis, but fitting also
+ includes this as a vertical behavior, for which there is
+ apparently no established typographical term.
+
+ Smushing (Same term for both axes.)
+
+ Moves FIGcharacters one step closer after they touch, so that
+ they partially occupy the same space. A FIGdriver must decide
+ what sub-character to display at each junction. There are two
+ ways of making these decisions: by controlled smushing or by
+ universal smushing.
+
+ Controlled smushing uses a set of "smushing rules" selected by
+ the designer of a FIGfont. (See "Smushing Rules" below.)
+ Each rule is a comparison of the two sub-characters which must
+ be joined to yield what to display at the junction.
+ Controlled smushing will not always allow smushing to occur,
+ because the compared sub-characters may not correspond to any
+ active rule. Wherever smushing cannot occur, fitting occurs
+ instead.
+
+ Universal smushing simply overrides the sub-character from the
+ earlier FIGcharacter with the sub-character from the later
+ FIGcharacter. This produces an "overlapping" effect with some
+ FIGfonts, wherin the latter FIGcharacter may appear to be "in
+ front".
+
+ A FIGfont which does not specify any smushing rules for a
+ particular axis indicates that universal smushing is to occur
+ when smushing is requested. Therefore, it is not possible for
+ a FIGfont designer to "forbid" smushing. However there are
+ ways to ensure that smushing does not cause a FIGfont to be
+ illegible when smushed. This is especially important for
+ smaller FIGfonts. (See "Hardblanks" for details.)
+
+For vertical fitting or smushing, entire lines of output FIGcharacters are
+"moved" as a unit.
+
+Not all FIGdrivers do vertical fitting or smushing. At present, FIGWin 1.0
+does, but FIGlet 2.2 does not. Further, while FIGlet 2.2 allows the user to
+override the FIGfont designer's set of smushing rules, FIGWin 1.0 does not.
+
+NOTE: In the documentation of FIGlet versions prior to 2.2, the term
+"smushmode" was used to mean the layout mode, and this term further included
+the smushing rules (if any) to be applied. However, since the layout mode
+may or may not involve smushing, we are straying from the use of this
+somewhat misleading term.
+
+
+"Smushing Rules"
+
+Again, smushing rules are for controlled smushing. If none are defined to be
+active in a FIGfont, universal smushing occurs instead.
+
+Generally, if a FIGfont is "drawn at the borders" using sub-characters
+"-_|/\[]{}()<>", you will want to use controlled smushing by selecting from
+the rules below. Otherwise, if your FIGfont uses a lot of other
+sub-characters, do not select any rules and universal smushing will occur
+instead. (See "Hardblanks" below if your FIGfont is very small and would
+become illegible if smushed.) Experimentation is the best way to make these
+decisions.
+
+There are six possible horizontal smushing rules and five possible vertical
+smushing rules. Below is a description of all of the rules.
+
+NOTE: Ignore the "code values" for now. They are explained later.
+
+ The Six Horizontal Smushing Rules
+
+ Rule 1: EQUAL CHARACTER SMUSHING (code value 1)
+
+ Two sub-characters are smushed into a single sub-character
+ if they are the same. This rule does not smush
+ hardblanks. (See "Hardblanks" below.)
+
+ Rule 2: UNDERSCORE SMUSHING (code value 2)
+
+ An underscore ("_") will be replaced by any of: "|", "/",
+ "\", "[", "]", "{", "}", "(", ")", "<" or ">".
+
+ Rule 3: HIERARCHY SMUSHING (code value 4)
+
+ A hierarchy of six classes is used: "|", "/\", "[]", "{}",
+ "()", and "<>". When two smushing sub-characters are
+ from different classes, the one from the latter class
+ will be used.
+
+ Rule 4: OPPOSITE PAIR SMUSHING (code value 8)
+
+ Smushes opposing brackets ("[]" or "]["), braces ("{}" or
+ "}{") and parentheses ("()" or ")(") together, replacing
+ any such pair with a vertical bar ("|").
+
+ Rule 5: BIG X SMUSHING (code value 16)
+
+ Smushes "/\" into "|", "\/" into "Y", and "><" into "X".
+ Note that "<>" is not smushed in any way by this rule.
+ The name "BIG X" is historical; originally all three pairs
+ were smushed into "X".
+
+ Rule 6: HARDBLANK SMUSHING (code value 32)
+
+ Smushes two hardblanks together, replacing them with a
+ single hardblank. (See "Hardblanks" below.)
+
+
+ The Five Vertical Smushing Rules
+
+ Rule 1: EQUAL CHARACTER SMUSHING (code value 256)
+
+ Same as horizontal smushing rule 1.
+
+ Rule 2: UNDERSCORE SMUSHING (code value 512)
+
+ Same as horizontal smushing rule 2.
+
+ Rule 3: HIERARCHY SMUSHING (code value 1024)
+
+ Same as horizontal smushing rule 3.
+
+ Rule 4: HORIZONTAL LINE SMUSHING (code value 2048)
+
+ Smushes stacked pairs of "-" and "_", replacing them with
+ a single "=" sub-character. It does not matter which is
+ found above the other. Note that vertical smushing rule 1
+ will smush IDENTICAL pairs of horizontal lines, while this
+ rule smushes horizontal lines consisting of DIFFERENT
+ sub-characters.
+
+ Rule 5: VERTICAL LINE SUPERSMUSHING (code value 4096)
+
+ This one rule is different from all others, in that it
+ "supersmushes" vertical lines consisting of several
+ vertical bars ("|"). This creates the illusion that
+ FIGcharacters have slid vertically against each other.
+ Supersmushing continues until any sub-characters other
+ than "|" would have to be smushed. Supersmushing can
+ produce impressive results, but it is seldom possible,
+ since other sub-characters would usually have to be
+ considered for smushing as soon as any such stacked
+ vertical lines are encountered.
+
+
+"Hardblanks"
+
+A hardblank is a special sub-character which is displayed as a blank (space)
+in rendered FIGures, but is treated more like a "visible" sub-character when
+fitting or smushing horizontally. Therefore, hardblanks keep adjacent
+FIGcharacters a certain distance apart.
+
+NOTE: Hardblanks act the same as blanks for vertical operations.
+
+Hardblanks have three purposes:
+
+ 1) Hardblanks are used to create the blank (space) FIGcharacter.
+
+ Usually the space FIGcharacter is simply one or two vertical
+ columns of hardblanks. Some slanted FIGfonts as shown below
+ have a diagonal arrangement of hardblanks instead.
+
+ 2) Hardblanks can prevent "unreasonable" fitting or smushing.
+
+ Normally when fitting or smushing, the blank (space)
+ sub-character is considered "vacant space". In the following
+ example, a capital "C" FIGcharacter is smushed with a "minus"
+ FIGcharacter.
+ ______ ______
+ / ____/ / ____/
+ / / ____ >>-Becomes-> / / ____
+ / /___ /___/ / /__/___/
+ \____/ \____/
+
+ The FIGure above looks like a capital G. To prevent this, a
+ FIGfont designer might place a hardblank in the center of the
+ capital C. In the following example, the hardblank is
+ represented as a "$":
+ ______ ______
+ / ____/ / ____/
+ / / $ ____ >>-Becomes-> / / ____
+ / /___ /___/ / /___/___/
+ \____/ \____/
+
+ Using hardblanks in this manner ensures that FIGcharacters
+ with a lot of empty space will not be unreasonably "invaded"
+ by adjacent FIGcharacters. Generally, FIGcharacters such as
+ capital C, L or T, or small punctuation marks such as commas,
+ may contain hardblanks, since they may contain a lot of vacant
+ space which is "accessible" from either side.
+
+ 3) Hardblanks can prevent smushing from making FIGfonts illegible.
+
+ This legitimate purpose of hardblanks is often overused. If a
+ FIGfont designer is absolutely sure that smushing "visible"
+ sub-characters would make their FIGfont illegible, hardblanks
+ may be positioned at the end of each row of sub-characters,
+ against the visible sub-characters, creating a barrier.
+
+ With older FIGdrivers, using hardblanks for this purpose meant
+ that FIGcharacters would have to be separated by at least one
+ blank in output FIGures, since only a hardblank could smush
+ with another hardblank. However with the advent of universal
+ smushing, this is no longer necessary. Hardblanks ARE
+ overriden by any visible sub-character when performing
+ universal smushing. Hardblanks still represent a "stopping
+ point", but only AFTER their locations are occupied.
+
+ NOTE: Earlier it was stated that universal smushing overrides
+ the sub-character from the former FIGcharacter with the
+ sub-character from the latter FIGcharacter. Hardblanks (and
+ blanks or spaces) are the exception to this rule; they will
+ always be overriden by visible sub-characters, regardless of
+ which FIGcharacter contains the hardblank. This ensures that
+ no visible sub-characters "disappear".
+
+ Therefore, one can design a FIGfont with a default behavior of
+ universal smushing, while the output FIGure would LOOK like
+ the effect of fitting, or even full size if additional
+ hardblanks are used. If a user "scales down" the layout mode
+ to fitting, the result would look like "extra spacing" between
+ FIGcharacters.
+
+ Taking this concept further, a FIGcharacter may also include
+ extra blanks (spaces) on the left side of each FIGcharacter,
+ which would define the FIGcharacter's width as slightly larger
+ than required for the visible sub-characters and hardblanks.
+ With such a FIGfont, a user who further "scales down" the
+ layout mode to full size would see even greater spacing.
+
+ These techniques prevent horizontal smushing from causing a
+ FIGfont to become illegible, while offering greater
+ flexibility of output to users.
+
+ NOTE: These techniques cannot be used to prevent vertical
+ smushing of visible sub-characters, since hardblanks are not
+ respected in the vertical axis. Although it is possible to
+ select only one vertical smushing rule which involves only
+ sub-characters which are not used in your FIGfont, it is
+ recommend that you do NOT do so. In our opinion, most users
+ would prefer to get what they ask for, rather than being
+ told, in effect: "I, the FIGfont designer, have decided that
+ you wouldn't like the results of vertical smushing, so I have
+ prevented you from trying it." Instead, we recommend setting
+ the default behavior to either fitting or full height, and
+ either allowing universal smushing, or selecting vertical
+ smushing rules which seem most appropriate. A user of your
+ FIGfont will quickly see why you did not choose smushing as
+ the default vertical layout mode, and will agree with you.
+
+
+"Character Sets" and "Character Codes"
+
+When you type using your keyboard, you are actually sending your computer a
+series of numbers. Each number must be interpreted by your computer so that
+it knows what character to display. The computer uses a list of definitions,
+called a "character set". The numbers which represent each character are
+ called "character codes".
+
+There are many character sets, most of which are internationally accepted as
+standards. By far, the most common character set is ASCII, which stands for
+"American Standard Code for Information Interchange". ASCII identifies its
+characters with codes ranging from 0 to 127.
+
+NOTE: The term "ASCII art" has become well-understood to mean artistic images
+which consist of characters on your screen (such as FIGures).
+
+For a list of the printable ASCII characters with the corresponding codes,
+see the section "REQUIRED CHARACTERS" below. The other ASCII codes in the
+range of 0 through 31 are "control characters" such as carriage-return
+(code 13), linefeed/newline (code 10), tab (code 9), backspace (code 8) or
+null (code 0). Code 127 is a delete in ASCII.
+
+Getting more technical for just a moment: A byte consisting of 8 bits (eight
+ 1's or 0's) may represent a number from 0 to 255. Therefore, most computers
+have DIRECT access to 256 characters at any given time. A character set
+which includes 256 characters is called an 8-bit character set.
+
+For Latin-based languages, ASCII is almost always the first half of a larger
+8-bit character set. Latin-1 is the most common example of an 8-bit
+character set. Latin-1 includes all of ASCII, and adds characters with codes
+from 128 to 255 which include umlauted ("double-dotted") letters and
+characters with various other accents. In the United States, Windows and
+most Unix systems have Latin-1 directly available.
+
+Most modern systems allow the possibility of changing 8-bit character sets.
+On Windows systems, character sets are referred to as "code pages". There
+are many other character sets which are not mentioned here. DOS has its own
+character set (which also has international variants) that includes graphics
+characters for drawing lines. It is also an extension of ASCII.
+
+For some languages, 8-bit character sets are insufficient, particularly on
+East Asian systems. Therefore, some systems allow 2 bytes for each
+character, which multiplies the 256 possibilties by 256, resulting in 65536
+possible characters. (Much more than the world will ever need.)
+
+Unicode is a character set standard which is intended to fulfill the
+worldwide need for a single character set which includes all characters used
+worldwide. Unicode includes character codes from 0 to 65535, although at
+present, only about 22,000 characters have been officially assigned and named
+by the Unicode Consortium. The alphabets and other writing systems
+representable with Unicode include all Latin-alphabet systems, Greek,
+Russian and other Cyrillic-alphabet systems, Hebrew, Arabic, the various
+languages of India, Chinese, Japanese, Korean, and others. The existing
+Unicode symbols include chess pieces, astrological signs, gaming symbols,
+telephones, pointing fingers, etc. --- just about any type of FIGcharacter
+you may wish to create. Unicode is constantly (but slowly) being extended
+to handle new writing systems and symbols. Information on Unicode is
+available at http://www.unicode.org and at ftp://unicode.org .
+
+Unicode, Latin-1, and ASCII all specify the same meanings for overlapping
+character codes: ASCII 65 = Latin-1 65 = Unicode 65 = "A", formally known
+as "LATIN CAPITAL LETTER A".
+
+Since a keyboard usually has only about 100 keys, your computer may contain
+a program called a "keyboard map", which will interpret certain keystrokes
+or combinations of keystrokes as different character codes. Keyboard maps
+use "mapping tables" to make these determinations. The appropriate keyboard
+activity for a given character code may involve several keystrokes. Almost
+all systems are capable of handling at least 8-bit character sets (containing
+256 characters), so there is always an active keyboard map, at least for
+those characters which are not actually painted on the keys. (United States
+users may not even know that their computer can interpret special keystrokes.
+Such keystrokes may be something similar to holding down the ALT key while
+typing a character code on the numeric keypad. Try it!)
+
+Below are characters 160 through 255, AS REPRESENTED ON YOUR SYSTEM.
+
+  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ
+ ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
+
+IMPORTANT NOTE: Depending on which character set is active on your system,
+you may see different characters. This document (like all computer
+documents) does not contains characters per se, only bytes. What you see
+above is your particular computer's representation of these byte values.
+In other words, your active character set. However, if it is Latin-1, the
+first visible character is an inverted "!", and the last is an umlauted "y".
+Although we can safely assume your computer has ASCII, it does not
+necessarily have the Latin-1 character set active.
+
+What does all this have to do with FIGfonts???
+
+First, it should be evident that it is best to use only ASCII characters for
+sub-characters when possible. This will ensure portability to different
+platforms.
+
+FIGlet has gained international popularity, but early versions were made to
+handle only FIGcharacters with assigned character codes corresponding to
+ASCII. So, over the years there have been four methods used to create
+"virtual mapping tables" within the program itself:
+
+ The first method was simply to create FIGcharacters which do not
+ look like the ASCII character set implies. For example, a
+ FIGfont might contain Greek letters, and within its comments, it
+ may say, "If you type A, you'll get a Greek Alpha" etc. With
+ the advent of newer features, it is preferable not to use this
+ method. Instead, when possible, add new FIGcharacters to
+ existing FIGfonts or create new FIGfonts with FIGcharacters coded
+ to match the expectations of ASCII/Latin-1/Unicode, and create an
+ appropriate control file. (See "CONTROL FILES" below.) Remember
+ that Unicode includes almost any character for which you may want
+ to create a FIGcharacter.
+
+ The second method was very specific, to accommodate the German
+ audience. A special option was added to the FIGlet program
+ which would re-route input characters "[", "\", and "]" to
+ umlauted A, O and U, while "{", "|", and "}" would become the
+ respective lowercase versions of these. Also, "~" was made to
+ become the s-z character when this special option was used. This
+ was called "the -D option." The addition of this feature meant
+ that all compatible FIGfonts must contain these Deutsch (German)
+ FIGcharacters, in addition to the ASCII FIGcharacters. Although
+ this option is still available in the most recent version, it is
+ no longer necessary, as the same result can be achieved by the
+ newer features described below. However, the requirement for
+ Deutsch FIGcharacters remains for backward compatibility. (Or at
+ least zero-width FIGcharacters in their place.)
+
+ Later, FIGlet was made to accept control files, which are quite
+ literally a form of mapping table. (See "CONTROL FILES" below.)
+ This was a significant advance for internationalization.
+
+ FIGlet 2.2 can now accept specially encoded formats of input
+ text which imply more than one byte per character.
+
+
+CREATING FIGFONTS
+======== ========
+
+NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows
+1.0, which is just that. There is no need to read further if you intend to
+use it. However, the section "CONTROL FILES" below is still relevant.
+
+Since a FIGfont file is a text file, it can be created with any text editing
+program on any platform, and will still be compatible with FIGdrivers on all
+operating systems, except that the bytes used to indicate the end of each
+text line may vary. (PC's use carriage return and linefeed at the end of
+each line, Macintosh uses carriage return only, and UNIX uses linefeed only.)
+
+This minor difference among operating systems is handled easily by setting
+your FTP program to ASCII mode during upload or download. So there is no
+need to be concerned about this as long as you remember to do this during
+file transfer.
+
+The filename of a FIGfont file must end with ".flf", which stands for
+"<F>IG<L>ettering <F>ont". The first part of the filename should contain
+only letters, and should be lowercase on operating systems which permit case
+sensitive filenames. The filename should be unique in the first 8
+characters, since some older file systems truncate longer filenames.
+
+It is easier to modify an existing FIGfont than it is to create a new one
+from scratch. The first step is to read and understand this document.
+You may want to load "standard.flf" or another FIGfont into a text editor as
+an example while you read.
+
+A FIGfont file contains three portions: a header line, comments, and
+FIGcharacter data.
+
+
+THE HEADER LINE
+
+The header line gives information about the FIGfont. Here is an example
+showing the names of all parameters:
+
+ flf2a$ 6 5 20 15 3 0 143 229 NOTE: The first five characters in
+ | | | | | | | | | | the entire file must be "flf2a".
+ / / | | | | | | | \
+ Signature / / | | | | | \ Codetag_Count
+ Hardblank / / | | | \ Full_Layout*
+ Height / | | \ Print_Direction
+ Baseline / \ Comment_Lines
+ Max_Length Old_Layout*
+
+ * The two layout parameters are closely related and fairly complex.
+ (See "INTERPRETATION OF LAYOUT PARAMETERS".)
+
+For those desiring a quick explanation, the above line indicates that this
+FIGfont uses "$" to represent the hardblank in FIGcharacter data, it has
+FIGcharacters which are 6 lines tall, 5 of which are above the baseline, no
+line in the FIGfont data is more than 20 columns wide, the default horizontal
+layout is represented by the number 15, there are 3 comment lines, the
+default print direction for this FIGfont is left-to-right, a complete
+description of default and possible horizontal and vertical layouts is
+represented by the number 143, and there are 229 code-tagged characters.
+
+The first seven parameters are required. The last three (Direction,
+Full_Layout, and Codetag_Count, are not. This allows for backward
+compatibility with older FIGfonts, but a FIGfont without these parameters would
+force a FIGdriver to "guess" (by means not described in this document) the
+information it would expect to find in Full_Layout. For this reason, inclusion
+of all parameters is strongly recommended.
+
+Future versions of this standard may add more parameters after Codetag_Count.
+
+A description of each parameter follows:
+
+ Signature
+
+The signature is the first five characters: "flf2a". The first four
+characters "flf2" identify the file as compatible with FIGlet version 2.0 or
+later (and FIGWin 1.0). The "a" is currently ignored, but cannot be omitted.
+Different characters in the "a" location may mean something in future
+versions of this standard. If so, you can be sure your FIGfonts will still
+work if this character is "a".
+
+ Hardblank
+
+Immediately following the signature is the hardblank character. The
+hardblank character in the header line defines which sub-character will be
+used to represent hardblanks in the FIGcharacter data.
+
+By convention, the usual hardblank is a "$", but it can be any character
+except a blank (space), a carriage-return, a newline (linefeed) or a null
+character. If you want the entire printable ASCII set available to use, make
+the hardblank a "delete" character (character code 127). With the exception
+of delete, it is inadvisable to use non-printable characters as a hardblank.
+
+ Height
+
+The Height parameter specifies the consistent height of every FIGcharacter,
+measured in sub-characters. Note that ALL FIGcharacters in a given FIGfont
+have the same height, since this includes any empty space above or below.
+This is a measurement from the top of the tallest FIGcharacter to the bottom
+of the lowest hanging FIGcharacter, such as a lowercase g.
+
+ Baseline
+
+The Baseline parameter is the number of lines of sub-characters from the
+baseline of a FIGcharacter to the top of the tallest FIGcharacter. The
+baseline of a FIGfont is an imaginary line on top of which capital letters
+would rest, while the tails of lowercase g, j, p, q, and y may hang below.
+In other words, Baseline is the height of a FIGcharacter, ignoring any
+descenders.
+
+This parameter does not affect the output of FIGlet 2.2 or FIGWin 1.0, but
+future versions or other future FIGdrivers may use it. The Baseline
+parameter should be correctly set to reflect the true baseline as described
+above. It is an error for Baseline to be less than 1 or greater than the
+Height parameter.
+
+ Max_Length
+
+The Max_Length parameter is the maximum length of any line describing a
+FIGcharacter. This is usually the width of the widest FIGcharacter, plus 2
+(to accommodate endmarks as described later.) However, you can (and probably
+should) set Max_Length slightly larger than this as a safety measure in case
+your FIGfont is edited to include wider FIGcharacters. FIGlet (but not
+FIGWin 1.0) uses this number to minimize the memory taken up by a FIGfont,
+which is important in the case of FIGfonts with many FIGcharacters.
+
+ Old_Layout
+
+(See "INTERPRETATION OF LAYOUT PARAMETERS" below.)
+
+ Comment_Lines
+
+Between the first line and the actual FIGcharacters of the FIGfont are the
+comment lines. The Comment_Lines parameter specifies how many lines there
+are. Comments are optional, but recommended to properly document the origin
+of a FIGfont.
+
+ Print_Direction
+
+The Print_Direction parameter tells which direction the font is to be
+printed by default. A value of 0 means left-to-right, and 1 means
+right-to-left. If this parameter is absent, 0 (left-to-right) is assumed.
+Print_Direction may not specify vertical print, although FIGdrivers are
+capable of vertical print. Versions of FIGlet prior to 2.1 ignore this
+parameter.
+
+ Full_Layout
+
+(See "INTERPRETATION OF LAYOUT PARAMETERS" just below.)
+
+ Codetag_Count
+
+Indicates the number of code-tagged (non-required) FIGcharacters in this
+FIGfont. This is always equal to the total number of FIGcharacters in the font
+minus 102. This parameter is typically ignored by FIGdrivers, but can be
+used to verify that no characters are missing from the end of the FIGfont.
+The chkfont program will display the number of codetagged characters
+in the FIGfont on which it is run, making it easy to insert this parameter
+after a FIGfont is written.
+
+
+INTERPRETATION OF LAYOUT PARAMETERS
+
+Full_Layout describes ALL information about horizontal and vertical layout:
+the default layout modes and potential smushing rules, even when smushing is
+not a default layout mode.
+
+Old_Layout does not include all of the information desired by the most
+recent FIGdrivers, which is the inspiration for the creation of the new
+Full_Layout parameter. Old_Layout is still required for backward
+compatibility, and FIGdrivers must be able to interpret FIGfonts which do not
+have the Full_Layout parameter. (See "STANDARDIZED CAPABILITIES OF CURRENT
+AND FUTURE FIGDRIVERS".)
+
+Versions of FIGlet prior to 2.2 do not recognize the Full_Layout parameter.
+Documentation accompanying FIGlet versions prior to 2.2 refer to Old_Layout
+as "smushmode", which is somewhat misleading since it can indicate layout
+modes other than smushing.
+
+Old_Layout and Full_Layout must contain some redundant information.
+
+Setting the layout parameters is a matter of adding numbers together ("code
+values"). What follows is a chart of the meanings of all code values.
+(You may skip down to "SETTING LAYOUT PARAMETERS STEP BY STEP" if you prefer,
+or if you find this portion confusing.)
+
+Full_Layout: (Legal values 0 to 32767)
+
+ 1 Apply horizontal smushing rule 1 when smushing
+ 2 Apply horizontal smushing rule 2 when smushing
+ 4 Apply horizontal smushing rule 3 when smushing
+ 8 Apply horizontal smushing rule 4 when smushing
+ 16 Apply horizontal smushing rule 5 when smushing
+ 32 Apply horizontal smushing rule 6 when smushing
+ 64 Horizontal fitting (kerning) by default
+ 128 Horizontal smushing by default (Overrides 64)
+ 256 Apply vertical smushing rule 1 when smushing
+ 512 Apply vertical smushing rule 2 when smushing
+ 1024 Apply vertical smushing rule 3 when smushing
+ 2048 Apply vertical smushing rule 4 when smushing
+ 4096 Apply vertical smushing rule 5 when smushing
+ 8192 Vertical fitting by default
+ 16384 Vertical smushing by default (Overrides 8192)
+
+When no smushing rules are included in Full_Layout for a given axis, the
+meaning is that universal smushing shall occur, either by default or when
+requested.
+
+Old_Layout: (Legal values -1 to 63)
+
+ -1 Full-width layout by default
+ 0 Horizontal fitting (kerning) layout by default*
+ 1 Apply horizontal smushing rule 1 by default
+ 2 Apply horizontal smushing rule 2 by default
+ 4 Apply horizontal smushing rule 3 by default
+ 8 Apply horizontal smushing rule 4 by default
+ 16 Apply horizontal smushing rule 5 by default
+ 32 Apply horizontal smushing rule 6 by default
+
+* When Full_Layout indicates UNIVERSAL smushing as a horizontal default
+(i.e., when none of the code values of horizontal smushing rules are included
+and code value 128 is included in Full_Layout) Old_Layout must be set to 0
+(zero). Older FIGdrivers which cannot read the Full_Layout parameter are
+also incapable of universal smushing. Therefore they would be directed to
+the "next best thing", which is horizontal fitting (kerning).
+
+NOTE: You should NOT add the -1 value to any positive code value for
+Old_Layout. This would be a logical contradiction.
+
+See "STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS" for the
+behavior of a FIGdriver when the Full_Layout parameter is absent (presumably
+in an older FIGfont).
+
+The following rules establish consistency between Old_Layout and Full_Layout.
+
+ If full width is to be the horizontal default:
+ Old_Layout must be -1.
+ Full_Layout must NOT include code values 64 nor 128.
+
+ If horizontal fitting (kerning) is to be default:
+ Old_Layout must be 0.
+ Full_Layout must include code value 64.
+ Full_Layout must NOT include code value 128.
+
+ If CONTROLLED smushing is to be the horizontal default:
+ Old_Layout must be a positive number, represented by the added
+ code values of all desired horizontal smushing rules.
+ Full_Layout must include the code values for the SAME set of
+ horizontal smushing rules as included in Old_Layout.
+ Full_Layout must include code value 128.
+
+ If UNIVERSAL smushing is to be the horizontal default:
+ Old_Layout must be 0.
+ Full_Layout must include code value 128.
+ Full_Layout must NOT include any code value under 64.
+
+In general terms, if Old_Layout specifies horizontal smushing rules,
+Full_Layout must specify the same set of horizontal rules, and both must
+indicate the same horizontal default layout mode.
+
+
+SETTING LAYOUT PARAMETERS STEP-BY-STEP
+
+The following step-by-step process will yield correct and consistent values
+for the two layout parameters. You may skip this if you find the
+explanations above easier to use.
+
+Step 1: Start with 0 for both numbers.
+
+ Write "Old_Layout" and "Full_Layout" on a piece of paper.
+ Write the number 0 next to each.
+ The number 0 may be crossed out and changed several times below.
+ Go to step 2.
+
+Step 2: Set the DEFAULT HORIZONTAL LAYOUT MODE.
+
+ If you want to use FULL WIDTH as the default
+ Make Old_Layout -1
+ Go to step 3.
+ If you want to use HORIZONTAL FITTING (kerning) as the default
+ Make Full_Layout 64
+ Go to step 3.
+ If you want to use HORIZONTAL SMUSHING as the default
+ Make Full_Layout 128
+ Go to step 3.
+
+Step 3: Specify HOW TO SMUSH HORIZONTALLY WHEN SMUSHING.
+
+ If you want to use UNIVERSAL smushing for the horizontal axis
+ Go to step 4.
+ If you want to use CONTROLLED smushing for the horizontal axis
+ Add together the code values for all the horizontal smushing
+ rules you want from the list below to get the horizontal
+ smushing rules total.
+
+ EQUAL CHARACTER SMUSHING 1
+ UNDERSCORE SMUSHING 2
+ HIERARCHY SMUSHING 4
+ OPPOSITE PAIR SMUSHING 8
+ BIG X SMUSHING 16
+ HARDBLANK SMUSHING 32
+
+ Horizontal smushing rules total: ___
+
+ If Full_Layout is currently 128
+ Change Old_Layout to the horizontal smushing rules total.
+ Increase Full_Layout by the horizontal smushing rules total.
+ Go to Step 4.
+ If Full_Layout is currently 0 or 64
+ Increase Full_Layout by the horizontal smusing rules total.
+ Go to Step 4.
+
+Step 4: Set the DEFAULT VERTICAL LAYOUT MODE.
+
+ If you want to use FULL HEIGHT as the default
+ Go to step 5.
+ If you want to use VERTICAL FITTING as the default
+ Increase Full_Layout by 8192.
+ Go to step 5.
+ If you want to use VERTICAL SMUSHING as the default
+ Increase Full_Layout by 16384.
+ Go to step 5.
+
+Step 5: Specify HOW TO SMUSH VERTICALLY WHEN SMUSHING.
+
+ If you want to use UNIVERSAL smushing for the vertical axis
+ Go to step 6.
+ If you want to use CONTROLLED smushing for the vertical axis
+ Add together the code values for all the vertical smushing
+ rules you want from the list below to get the vertical
+ smushing rules total.
+
+ EQUAL CHARACTER SMUSHING 256
+ UNDERSCORE SMUSHING 512
+ HIERARCHY SMUSHING 1024
+ HORIZONTAL LINE SMUSHING 2048
+ VERTICAL LINE SUPERSMUSHING 4096
+
+ Vertical smushing rules total: ____
+
+ Increase Full_Layout by the vertical smushing rules total.
+ Go to step 6.
+
+Step 6: You're done.
+
+The resulting value of Old_Layout will be a number from -1 to 63.
+The resulting value of Full_Layout will be a number from 0 and 32767.
+
+
+FIGFONT COMMENTS
+
+After the header line are FIGfont comments. The comments can be as many
+lines as you like, but should at least include your name and Email address.
+Here is an example which also shows the header line.
+
+ flf2a$ 6 5 20 15 3 0 143
+ Example by Glenn Chappell <ggc@uiuc.edu> 8/94
+ Permission is hereby given to modify this font, as long as the
+ modifier's name is placed on a comment line.
+
+Comments are not required, but they are appreciated. Please comment your
+FIGfonts.
+
+Remember to adjust the Comment_Lines parameter as you add lines to your
+comments. Don't forget that blank lines DO count.
+
+
+FIGCHARACTER DATA
+============ ====
+
+The FIGcharacter data begins on the next line after the comments and
+continues to the end of the file.
+
+BASIC DATA STRUCTURE
+
+The sub-characters in the file are given exactly as they should be output,
+with two exceptions:
+
+ 1) Hardblanks should be the hardblank character specified in the
+ header line, not a blank (space).
+
+ 2) Every line has one or two endmark characters, whose column
+ locations define the width of each FIGcharacter.
+
+In most FIGfonts, the endmark character is either "@" or "#". The FIGdriver
+will eliminate the last block of consecutive equal characters from each line
+of sub-characters when the font is read in. By convention, the last line of
+a FIGcharacter has two endmarks, while all the rest have one. This makes it
+easy to see where FIGcharacters begin and end. No line should have more
+than two endmarks.
+
+Below is an example of the first few FIGcharacters, taken from small.flf.
+
+NOTE: The line drawn below consisting of "|" represents the left margin of
+your editor. It is NOT part of the FIGfont. Also note that hardblanks are
+represented as "$" in this FIGfont, as would be described in the header line.
+
+ |$@
+ |$@
+ blank/space |$@
+ |$@
+ |$@@
+ | _ @
+ || |@
+ exclamation point ||_|@
+ |(_)@
+ | @@
+ | _ _ @
+ |( | )@
+ double quote | V V @
+ | $ @
+ | @@
+ | _ _ @
+ | _| | |_ @
+ number sign ||_ . _|@
+ ||_ _|@
+ | |_|_| @@
+ | @
+ | ||_@
+ dollar sign |(_-<@
+ |/ _/@
+ | || @@
+
+Notice that each FIGcharacter occupies the same number of lines (6 lines, in
+this case), which must also be expressed in the header line as the Height
+parameter.
+
+Also notice that for every FIGcharacter, there must be a consistent width
+(length) for each line once the endmarks are removed. To do otherwise would
+be an error.
+
+Be aware of the vertical alignment of each FIGcharacter within its height,
+so that all FIGcharacters will be properly lined up when printed.
+
+If one of the last sub-characters in a particular FIGcharacter is "@", you
+should use another character for the endmark in that FIGcharacter so that
+the intended "@" is not interpreted as an endmark. "#" is a common
+alternative.
+
+Load a few existing FIGfonts into your favorite text editor for other
+examples.
+
+
+REQUIRED FIGCHARACTERS
+
+Some FIGcharacters are required, and must be represented in a specific order.
+Specifically: all of the printable character codes from ASCII shown in the
+table below, in order, plus character codes 196, 214, 220, 228, 246, 252,
+and 223, in that order. In Latin-1, these extra 7 characters represent the
+following German characters: umlauted "A", "O", "U", "a", "o" and "u"; and
+also "ess-zed".
+
+ Printable portion of the ASCII character set:
+
+ 32 (blank/space) 64 @ 96 `
+ 33 ! 65 A 97 a
+ 34 " 66 B 98 b
+ 35 # 67 C 99 c
+ 36 $ 68 D 100 d
+ 37 % 69 E 101 e
+ 38 & 70 F 102 f
+ 39 ' 71 G 103 g
+ 40 ( 72 H 104 h
+ 41 ) 73 I 105 i
+ 42 * 74 J 106 j
+ 43 + 75 K 107 k
+ 44 , 76 L 108 l
+ 45 - 77 M 109 m
+ 46 . 78 N 110 n
+ 47 / 79 O 111 o
+ 48 0 80 P 112 p
+ 49 1 81 Q 113 q
+ 50 2 82 R 114 r
+ 51 3 83 S 115 s
+ 52 4 84 T 116 t
+ 53 5 85 U 117 u
+ 54 6 86 V 118 v
+ 55 7 87 W 119 w
+ 56 8 88 X 120 x
+ 57 9 89 Y 121 y
+ 58 : 90 Z 122 z
+ 59 ; 91 [ 123 {
+ 60 < 92 \ 124 |
+ 61 = 93 ] 125 }
+ 62 > 94 ^ 126 ~
+ 63 ? 95 _
+
+ Additional required Deutsch FIGcharacters, in order:
+
+ 196 (umlauted "A" -- two dots over letter "A")
+ 214 (umlauted "O" -- two dots over letter "O")
+ 220 (umlauted "U" -- two dots over letter "U")
+ 228 (umlauted "a" -- two dots over letter "a")
+ 246 (umlauted "o" -- two dots over letter "o")
+ 252 (umlauted "u" -- two dots over letter "u")
+ 223 ("ess-zed" -- see FIGcharacter illustration below)
+ ___
+ / _ \
+ | |/ /
+ Ess-zed >>---> | |\ \
+ | ||_/
+ |_|
+
+If you do not wish to define FIGcharacters for all of those required above,
+you MAY create "empty" FIGcharacters in their place by placing endmarks flush
+with the left margin. The Deutsch FIGcharacters are commonly created as
+empty. If your FIGfont includes only capital letters, please copy them to
+the appropriate lowercase locations, rather than leaving lowercase letters
+empty. A FIGfont which does not include at least all ASCII letters, a space,
+and a few basic punctuation marks will probably frustrate some users. (For
+example "@" is more frequently desired as a FIGcharacter than you may think,
+since Email addresses may be written as FIGures.)
+
+
+CODE TAGGED FIGCHARACTERS
+
+After the required FIGcharacters, you may create FIGcharacters with any
+character code in the range of -2147483648 to +2147483647. (Over four
+billion possibilities, which is "virtual infinity" for this purpose.)
+One exception: character code -1 is NOT allowed for technical reasons.
+It is advisable to assign character codes such that the appearance of your
+FIGcharacters matches the expectations of ASCII/Latin-1/Unicode, with a few
+exceptions:
+
+ 1) If a FIGcharacter with code 0 is present, it is treated
+ specially. It is a FIGfont's "missing character". Whenever
+ the FIGdriver is told to print a character which doesn't exist
+ in the current FIGfont, it will print FIGcharacter 0. If there
+ is no FIGcharacter 0, nothing will be printed.
+
+ 2) If a FIGfont contains a non-Latin alphabet in character codes
+ in the ASCII range 32-126 (which is discouraged), we have found
+ it helpful to include a human-readable translation table as one
+ of the FIGcharacters instead of a "glyph". Typically, the "~"
+ would contain this table. The translation table FIGcharacter
+ would contain a list of all the special characters in the
+ FIGfont, along with the ASCII characters to which they
+ correspond. Keep this table no more than 79 columns wide.
+ (Thanks to Gedaliah Friedenberg for this idea.)
+
+ 3) In more extensive Unicode fonts, you can assign a negative
+ character code (other than -1) to one or more translation
+ tables, similar to #2 above. (All Unicode character codes are
+ positive.) And, you will most likely suggest within the
+ comments that a user access one of several control files (See
+ "CONTROL FILES" below) to gain access to Latin-2, Latin-3, or
+ other 8-bit standardized character sets. The control files may
+ redirect the "~" character to one of the negative character codes so
+ that the translation table would display the table when "~" is
+ given for input. Doing this allows you to still have a "~"
+ FIGcharacter for those who do not use a control file.
+
+Those FIGcharacters which are not required must have an explicit character
+code in a separate line preceding them, called a "code tag". A code tag
+contains the value of the character code, followed by whitespace (a few
+spaces), and perhaps an optional comment. The comment is usually the name of
+the FIGcharacter. The Unicode Consortium has assigned formal names to all
+officially accepted characters, and these may be used. An entire code tag,
+including the comment, should not occupy more than 95 columns. (Over 100
+characters here may make older versions of FIGlet crash.)
+
+Here is an example, showing two code tagged FIGcharacters after the last two
+required Deutsch FIGcharacters. Again, the line drawn below consisting of
+"|" represents the left margin of your editor, and is NOT part of the FIGfont.
+
+ | _ _ @
+ |(_) (_)@
+ || | | |@
+ || |_| |@
+ | \__,_|@
+ | @@
+ | ___ @
+ | / _ \@
+ || |/ /@
+ || |\ \@
+ || ||_/@
+ ||_| @@
+ |161 INVERTED EXCLAMATION MARK
+ | _ @
+ |(_)@
+ || |@
+ || |@
+ ||_|@
+ | @@
+ |162 CENT SIGN
+ | _ @
+ | | | @
+ | / __)@
+ || (__ @
+ | \ )@
+ | |_| @@
+
+
+A character code may be expressed in decimal (as shown above, numbers we're
+all familiar with), or in Octal (seldom used) or in hexadecimal.
+
+Character codes expressed in octal must be preceded by "0" (zero), and if
+negative, "-" (minus) must precede the "0". There are eight octal digits:
+01234567. You may recall octal numbers from school as "base 8 numbers".
+
+Character codes expressed in hexadecimal must be preceded by "0x" or "0X".
+(That's also a zero.) If negative, the "-" must precede the "0x". There are
+16 hexadecimal digits: 01234567890ABCDEF. (The "letter-digits" may also be
+lowercase.) Hexadecimal is "base 16".
+
+It is common to express character codes less than 256 (in the range of an
+8-bit character set) as decimal, while FIGfonts which extend into the Unicode
+range would have character codes expressed in hexadecimal. This is because
+the Unicode Standard expresses character codes in hexadecimal, which is
+helpful for programmers.
+
+The code tagged FIGcharacters may be listed in any order, but simple
+sequential order is recommended.
+
+If two or more FIGcharacters have the same character code, the last one in
+the FIGfont is the one used. It is common for the Deutsch FIGcharacters to
+be given twice in a FIGfont, just to maintain a consistent order for the
+Latin-1 range (128 to 255).
+
+It is not advisable to assign character codes in the range of 1 to 31, since
+this range includes control characters in ASCII. Character code 127 is a
+delete in ASCII, and is also not advised. Character codes 128 to 159 are
+additional control characters in Latin-1, and they too should not be used.
+All of the above are legal, technically, but are not part of what is legal
+for input, so they could only be accessed by use of a control file.
+(See "CONTROL FILES" below.) If you are still tempted to use them, consider
+negative character codes instead, which are meaningless in all standardized
+character sets.
+
+Again, the character code -1 is illegal for technical reasons.
+
+
+NOTES - AVOIDING ERRORS AND GENERAL ADVICE
+===== ======== ====== === ======= ======
+
+It is very important that every character in a font has the same height, and,
+once the endmarks are removed, that all the lines constituting a single
+FIGcharacter have the same length. Be careful also that no lines in the font
+file have trailing blanks (spaces), as the FIGdriver will take these to be
+the endmarks. (FIGWin 1.0 will not consider blanks to be endmarks.)
+
+Errors in a FIGfont can be detected by using the "chkfont" program,
+part of the standard FIGlet package, and also available, as of this
+writing from http://www.figlet.org/
+For FIGWin users, the FIGWin program will report errors when a FIGfont is
+read in; it is less forgiving than FIGlet, which can produce nonsense if the
+FIGfont is incorrectly formatted.
+
+Remember that sub-characters outside of the ASCII range will not necessarily
+display the same way on your system as on others.
+
+The blank (space) FIGcharacter should usually consist of one or two columns
+of hardblanks and nothing else; slanted fonts are an exception to this rule.
+If the space FIGcharacter does not contain any hardblanks, it will disappear
+when horizontal fitting (kerning) or smushing occurs.
+
+Again, if you design a FIGfont, please let us know!
+
+
+CONTROL FILES
+======= =====
+
+A FIGfont control file is a separate text file, associated with one or more
+FIGfonts, that indicates how to map input characters into FIGfont character
+codes. By default, FIGdrivers read single bytes from the input source and
+interpret them as Latin-1 FIGcharacters.
+
+FIGlet version 2.2 (and later) can optionally interpret its input as DBCS or
+UTF-8 characters, making it possible to access FIGcharacters with codes
+outside the Latin-1 range (greater than 255).
+
+In addition, though, all versions of FIGlet can use control files to
+transform specific character codes (or ranges of codes) as other codes
+(or ranges). Multiple control files can be specified, in which case multiple
+stages of transformation are performed.
+
+The filename of a control file always ends with ".flc".
+
+CONTROL FILE FORMAT
+
+Control files contain several kinds of lines. Lines beginning with "#", as
+well as blank lines, are comment lines and are ignored. All other lines are
+command lines, with one of the following formats:
+
+ t inchar outchar
+ t inchar1-inchar2 outchar1-outchar2
+ number number
+ f
+ h
+ j
+ b
+ u
+ g{0|1|2|3} {94|96|94x94} [char]
+ g{L|R} {0|1|2|3}
+
+where "inchar", "outchar", and "char" are either Latin-1 characters
+representing their own codes, or else are numeric character codes preceded by
+a "\" character; and "number" is a numeric character code with no preceding
+"\" character.
+
+Thus "A" represents the code 65, as does "\65", and "\0x100" represents the
+code 256 (100 in hexadecimal). In addition, "\ " (backslash followed by a
+space) represents the code 32 (space), and the following backslash sequences
+are also understood:
+
+ \a code 7 (a bell/alert)
+ \b code 8 (a backspace)
+ \e code 27 (an ESC character)
+ \f code 12 (a form feed)
+ \n code 10 (a newline/line feed)
+ \r code 13 (a carriage return)
+ \t code 9 (a horizontal tab)
+ \v code 11 (a vertical tab)
+ \\ code 92 (a backslash)
+
+All of these combinations except perhaps "\\" are very unlikely to be used,
+but they are provided just in case they are needed.
+
+Whitespace characters are used between "t" and "inchar" and between "inchar"
+and "outchar", but not around the "-" characters used in the second type of
+"t" command.
+
+The term "string" refers to any number of characters represented in the
+format given above. The characters begin after the whitespace following the
+letter "s", and continue to the end of the line.
+
+Anything following the first letter of an "f", "h", "j", or "u" command is
+ignored.
+
+The first type of "t" command transforms characters with the code "inchar"
+into characters with the code "outchar". The second type of "t" command
+transforms characters in the range "inchar1" to "inchar2" as the
+corresponding codes in the range "outchar1" to "outchar2". Both ranges must
+be of the same size. The form "number number" is equivalent to a "t"
+command of the first type, and is provided for compatibility with the mapping
+tables issued by the Unicode Consortium.
+
+Multiple transformation stages can be encoded in a single control file by
+using "f" commands to separate the stages.
+
+Versions of FIGlet before 2.1 required that the first line of a control file
+consist of the signature string "flc2a". This signature line is still
+permitted in FIGlet 2.2 and later versions, but is no longer required.
+
+Here is an example of a control file. The blanks at the beginning of each
+line are for readability only, and are not part of the file.
+
+The following control file:
+
+ flc2a
+ t # $
+ t A-Z a-z
+
+will map the "#" character to "$", and will also convert uppercase ASCII to
+lowercase ASCII.
+
+If a number of consecutive "t" commands are given, then for each character
+processed, only the first applicable command (if any) will be executed.
+Consider this control file:
+
+ t A B
+ t B A
+
+It will swap the characters "A" and "B". If the FIGdriver reads an "A", the
+first command will change "A" to "B", in which case the second will not be
+executed. If the FIGdriver reads a "B", the first command will have no
+effect, and the second command will change "B" to "A". Here is another
+control file:
+
+ t A B
+ t A C
+
+In this example, the second line is never executed. In short, a sequence of
+"t" lines "does what it ought to".
+
+More complex files, in which a single character is acted upon by several "t"
+commands, can be set up using an "f" command. For example:
+
+ flc2a
+ t a-z A-Z
+ f
+ t Q ~
+
+This control file specifies two transformation stages. In the first stage,
+lowercase ASCII letters are changed to their uppercase equivalents. The
+second stage maps any Q (whether original or a converted "q") into the "~"
+character. If the "f" command were omitted, "q" characters would remain "Q"
+and not be converted to "~".
+
+EXTENDED COMMANDS
+
+The "h", "j", "b", "u", and "g" commands are only understood by FIGlet
+version 2.2 or later. They control how a FIGdriver interprets bytes in the
+input. By default, the FIGdriver interprets each byte of input as a distinct
+character. This mode is suitable for most character encodings. All these
+commands are logically acted on before any other control file commands, no
+matter where in the sequence of control files they appear. They are also
+mutually exclusive; if more than one of these commands is found, only the
+last is acted on. Multiple "g" commands are permitted, however.
+
+The "h" command forces the input to be interpreted in HZ mode, which is used
+for the HZ character encoding of Chinese text. In this mode, the sequence
+"~{" (which is removed from the input) signals that all following characters
+are two bytes long until the sequence "~}" is detected. In addition, the
+sequence "~~" is changed to just "~", and all other two-byte sequences
+beginning with "~" are removed from the input. The character code
+corresponding to a two-byte character is:
+
+ first character * 256 + second character
+
+The "j" command forces the input to be interpreted in Shift-JIS mode (also
+called "MS-Kanji mode"). Input bytes in the ranges 128-159 and 224-239 are
+read as the high-order byte of a two-byte character; all other bytes are
+interpreted as one-byte characters. The value of a two-byte character is
+determined in the same way as in HZ mode.
+
+The "b" command forces the input to be interpreted in DBCS mode, which is
+suitable for processing HZ or Shift-GB Chinese text or Korean text. Input
+bytes in the ranges 128-255 are read as the high-order byte of a two-byte
+character; all other bytes are interpreted as one-byte characters. The
+value of a two-byte character is determined in the same way as in HZ mode.
+
+The "u" command forces the input to be interpreted in UTF-8 mode, which
+causes any input byte in the range 0x80 to 0xFF to be interpreted as the
+first byte of a multi-byte Unicode (ISO 10646) character. UTF-8 characters
+can be from 1 to 6 bytes long. An incorrectly formatted sequence is
+interpreted as the character 128 (normally an unused control character).
+
+Otherwise, the input is allowed to contain ISO 2022 escape sequences, which
+are decoded to generate appropriate character codes. These character codes
+are *not* a subset of Unicode, but may be more useful in processing East
+Asian text. A brief explanation of ISO 2022 is given here in order to
+clarify how a FIGdriver should interpret it. The "g" command provides
+information for the ISO 2022 interpreter, and is explained below.
+
+ISO 2022 text is specified using a mixture of registered character sets.
+At any time, up to four character sets may be available. Character sets
+have one of three sizes: single-byte character sets with 94 characters
+(e.g. ASCII), single-byte character sets with 96 characters (e.g. the top
+halves of ISO Latin-1 to Latin-5), or double-byte character sets with
+94 x 94 characters (e.g. JIS 0208X-1983). Each registered character set has
+a standard designating byte in the range 48 to 125; the bytes are unique withi
+n character set sizes, but may be reused across sizes. For example, byte 66
+designates the 94-character set ASCII, the 96-character set ISO Latin-2 (top
+half), and the 94 x 94 Japanese character set JIS 0208X-1983. In this
+document, the designating byte of a character set will be represented by <D>.
+
+The four available character sets are labeled G0, G1, G2, and G3. Initially,
+G0 is the 94-character set ASCII, and G1 is the 96-character set ISO Latin-1
+(top half). The other character sets are unassigned. The following escape
+sequences (where ESC = the byte 27) specify changes to the available
+character sets:
+
+ ESC ( <D> Set G0 to the 94-character set <D>
+ ESC ) <D> Set G1 to the 94-character set <D>
+ ESC * <D> Set G2 to the 94-character set <D>
+ ESC + <D> Set G3 to the 94-character set <D>
+ ESC - <D> Set G1 to the 96-character set <D>
+ ESC . <D> Set G2 to the 96-character set <D>
+ ESC / <D> Set G3 to the 96-character set <D>
+ ESC $ <D> Set G0 to the 94 x 94 character set <D>
+ ESC $ ( <D> Set G0 to the 94 x 94 character set <D>
+ ESC $ ) <D> Set G1 to the 94 x 94 character set <D>
+ ESC $ * <D> Set G2 to the 94 x 94 character set <D>
+ ESC $ + <D> Set G3 to the 94 x 94 character set <D>
+
+
+Note that G0 may not be a 96-character set, and that there are two ways to
+specify a 94 x 94 character set in G0, of which the first is deprecated.
+
+ISO 2022 decoding affects input bytes in the ranges 33 to 126 and 160 to 255,
+known as "the left half" and "the right half" respectively. All other bytes,
+unless they belong to a control sequence shown in this document, remain
+unchanged. Initially, the left half is interpreted as character set G0,
+and the right half as character set G1. This can be changed by the following
+control sequences:
+
+ SI (byte 15) Interpret the left half as G1 characters
+ SO (byte 14) Interpret the left half as G0 characters
+ ESC n Interpret the left half as G2 characters
+ ESC o Interpret the left half as G3 characters
+ ESC ~ Interpret the right half as G1 characters
+ ESC } Interpret the right half as G2 characters
+ ESC | Interpret the right half as G3 characters
+ SS2 (byte 142) Interpret next character only as G2
+ ESC N Interpret next character only as G2
+ SS3 (byte 143) Interpret next character only as G3
+ ESC O Interpret next character only as G3
+
+
+This rich schema may be used in various ways. In ISO-2022-JP, the Japanese
+flavor of ISO 2022, only the bytes 33-126 and the G0 character set is used,
+and escape sequences are used to switch between ASCII, ISO-646-JP (the
+Japanese national variant of ASCII), and JIS 0208X-1983. In other versions,
+the G1 character set has 94 x 94 size, and so any byte in the range 160-255
+is automatically the first byte of a double-byte character.
+
+FIGdrivers that support ISO 2022 do so in the following way. Each character i
+is decoded and assigned to a character set <D>.
+
+ If the character belongs to a 94-bit character set,
+ then if its value exceeds 128, it is reduced by 128,
+ and the value 65536 * <D> is added to it,
+ unless <D> is 66 (ASCII).
+ If the character belongs to a 96-bit character set,
+ then if its value is less than 128, it is increased by 128,
+ and the value 65536 * <D> is added to it,
+ unless <D> is 65 (ISO Latin-1).
+ If the character belongs to a 94 x 94 character set,
+ then the value is the sum of:
+ the first byte * 256,
+ plus the second byte,
+ plus the value 65536 * <D>.
+
+
+Thus, the character code 65 ("A") in ASCII remains 65, the character code
+196 in ISO Latin-1 ("A-umlaut") remains 196, the character code 65 (0x41)
+in ISO-646-JP (whose <D> is 74 = 0x4A) becomes 0x4A0041 =4849729, and the
+two-byte sequence 33 33 (0x21 0x21) in JIS 0208X-1983 (whose <D> is
+65 = 0x41) becomes 0x412121 = 4268321. These codes may be used in compiling
+FIGfonts suitable for use with ISO 2022 encoded text.
+
+The initial settings of G0 through G3 and their assignments to the left half
+and the right half can be altered in a control file by using "g" commands,
+as follows:
+
+ g {0|1|2|3} {94|96|94x94} [<D>]
+
+specifies that one of G0-G3 is a 94, 96, or 94x94 character set with
+designating character <D>. If no designating character is specified, then a
+<D> value of zero is assumed.
+
+For example, the list of control commands:
+
+ g 0 94 B
+ g 1 96 A
+
+sets the G0 character set to ASCII (94-character set "B") and the G1
+character set to the top half of Latin-1 (96-character set "A"). (This is the
+default setting).
+
+To change the initial assignments of G0 to the left half and G1 to the right
+half, "g" commands of the form
+
+ g {L|R} {0|1|2|3}
+
+For example, the command:
+
+ g R 2
+
+causes right-half bytes (in the range 160-255) to be interpreted as G2.
+Whether these bytes are interpreted singly or in pairs depends on the type
+of character set that is currently available as G2.
+
+Spaces may be freely used or omitted in "g" commands.
+
+The standard FIGlet distribution contains mapping tables for Latin-2 (ISO 8859-2),
+Latin-3 (ISO 8859-3), Latin-4 (ISO 8859-4), and Latin-5 (ISO 8859-9). They
+can be used with the font "standard.flf", which contains all the characters
+used in these standards.
+
+
+STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS
+============ ============ == ======= === ====== ==========
+
+We assert the following as the "Law" of our intentions:
+
+PROFIT
+
+All future FIGdrivers shall be FREE OF CHARGE to the general public via the
+Internet. Any advertisements of other works by the author must be in
+documentation only, and limited to ONE "screenful", and shall not appear by
+normal program behavior, nor interfere with normal behavior. No FIGdriver
+shall disable itself after a set period of time or request "donations".
+No FIGdriver shall offer any other FIGdriver with improved capability for
+creating FIGures in exchange for money.
+
+REQUIRED FEATURES OF FUTURE VERSIONS
+
+Future FIGdrivers must read and process FIGfont files as described in this
+document, but are not necessarily expected to process control files, smush,
+perform fitting or kerning, perform vertical operations, or even produce
+multiple lines in output FIGures.
+
+FIGDRIVER NAMES
+
+Future FIGdrivers must be named to include capitalized "FIG" and shall have
+an incremental version number specific to its own platform.
+
+BACKWARDS COMPATIBILITY OF FUTURE VERSIONS
+
+Any future FIGdriver created for the same platform as an existing FIGdriver,
+and using the same name as the existing FIGdriver, shall be considered a new
+version of the preceding FIGdriver, and shall contain all historical comments
+of updates to past versions on the same platform, and shall have full
+capability of the preceding versions. If the source code is not provided to
+the general public, it shall be at least provided to any potential developers
+of later versions, and such comments relating to past versions shall be
+accessible to any user by other means or documentation. If a new program is
+created on a platform that already has an existing FIGdriver, it must be
+given a new and distinct name. This allows multiple FIGdrivers to exist for
+the same platform with different capabilities.
+
+The format of FIGfonts may not be modified to be non-backwards compatible
+UNLESS:
+
+ 1) The new format is easily editable as an ASCII text file,
+ beginning with the characters "flf" followed by a sequential
+ number.
+
+ 2) At least all of the same information can be derived from the
+ new format as the prior format (currently "flf2"). This
+ includes the main comments which give credit to the FIGfont
+ designer.
+
+ 3) Individuals are found who are willing and have the ability to
+ either port or develop versions for at least UNIX, DOS,
+ Windows, and Amiga which will read both the new formats AND the
+ prior format (currently "flf2"), and retain the capability of
+ past versions. It is intended that this will be expanded to
+ include Macintosh if a GUI version exists. This list of
+ required operating systems may be reduced if an operating
+ system falls out of popularity or increased if a new operating
+ system for which there is a FIGdriver comes into greater
+ popularity, according to the consensus of opinions of past
+ developers for the most popular operating systems.
+
+ 4) A C, Java, or other version must always exist which can
+ receive input and instructions either from a command line, a
+ file, or directly over the internet so that FIGures can be
+ obtained from internet-based services without the need to
+ download any FIGdriver.
+
+ 5) All existing FIGfonts available from the "official" point of
+ distribution (http://www.figlet.org/),
+ must be converted to the new format, and offered for download
+ alongsidethe new versions.
+
+THE FUNCTION OF WORD WRAPPING
+
+All future FIGdrivers should duplicate these behaviors, unless a version is
+only capable of outputting one-line FIGures, which is acceptable as long no
+preceding versions exist for its platform which can output multiple-line
+FIGures.
+
+FIGdrivers which perform word wrapping do so by watching for blanks (spaces)
+in input text, making sure that the FIGure is no more wide than the maximum
+width allowed.
+
+Input text may also include linebreaks, so that a user may specify where
+lines begin or end instead of relying on the word wrapping of the FIGdriver.
+(Linebreaks are represented by different bytes on different platforms, so
+each FIGdriver must watch for the appropriate linebreaks for its particular
+platform.)
+
+When a FIGdriver word wraps and there are several consecutive blanks in input
+text where the wrapping occurred, the FIGdriver will disregard all blanks
+until the next non-blank input character is encountered. However, if blanks
+in input text immediately follow a linebreak, or if blanks are the first
+characters in the input text, the blanks will be "printed", moving any
+visible FIGcharacters which follow on the same output line to the right.
+Similarly, if an image is right-aligned, and blanks immediately precede
+linebreaks or the end of input text, a FIGdriver will move an entire line of
+output FIGcharacters to the left to make room for the blank FIGcharacters
+until the left margin is encountered. (If the print direction is
+right-to-left, everything stated in this paragraph is reversed.)
+
+Word processing programs or text editors usually behave similarly in all
+regards to word wrapping.
+
+GENERAL INTENT FOR CROSS-PLATFORM PORTABILITY
+
+Currently, all versions of FIGlet are compiled from C code, while FIGWin 1.0
+is written in Visual Basic. Over time it is intended that a later version of
+FIGWin will be created using a GUI C programming language, and that the
+FIGlet C code shall continue to be written to be easily "plugged in" to a
+GUI shell. It is preferable for developers of FIGdrivers for new platforms
+to use C or a GUI version of C, so that when the core rendering engine of
+FIGlet is updated, it will be portable to other platforms.
+
+CONTROL FILE COMMANDS
+
+New control file commands may be added to later versions of this standard.
+However, the commands "c", "d", and "s" are permanently reserved and may
+never be given a meaning.
+
+FILE COMPRESSION
+
+FIGfonts (and control files) are often quite long, especially if many
+FIGcharacters are included, or if the FIGcharacters are large. Therefore,
+some FIGdrivers (at present, only FIGlet version 2.2 or later) allow
+compressed FIGfonts and control files.
+
+The standard for FIG compression is to place the FIGfont or control file into
+a ZIP archive. ZIP archives can be created by the proprietary program PKZIP
+on DOS and Windows platforms, or by the free program Info-ZIP ZIP on almost
+all platforms. More information on ZIP can be obtained at
+http://www.cdrom.com/pub/infozip/Info-Zip.html .
+
+The ZIP archive must contain only a single file. Any files in the archive
+after the first are ignored by FIGdrivers. In addition, the standard
+extension ".zip" of the archive must be changed to ".flf" or ".flc" as
+appropriate. It does not matter what the name of the file within the
+archive is.
+
+
+
+CHART OF CAPABILITIES OF FIGLET 2.2 AND FIGWIN 1.0
+===== == ============ == ====== === === ====== ===
+
+The following chart lists all capabilities which are either new with the
+release of both FIGdrivers, or is not a common capability among both.
+
+ FIGlet 2.2 FIGWIN 1.0
+ Interpreting the Full_Layout parameter: Yes Yes
+ Universal smushing: Yes Yes
+ Supporting multi-byte input text formats: Yes No
+ Processing control files: Yes No
+ Changing default smushing rules: Yes No
+ Bundled with a GUI editor of FIGfonts: No Yes
+ Vertical fitting and smushing: No Yes
+
+ ___________ __ _
+ \_ _____/ ____ |__| ____ ___ __ | |
+ | __)_ / \ | |/ _ < | || |
+ | \ | \ | ( <_> )___ | \|
+ /_______ /___| /\__| |\____// ____| __
+ \/ \/\______| \/ \/
diff --git a/externals/figlet/figlet.6 b/externals/figlet/figlet.6
new file mode 100644
index 0000000000..ff2231140e
--- /dev/null
+++ b/externals/figlet/figlet.6
@@ -0,0 +1,1102 @@
+.\" FIGlet
+.\" Copyright (C) 1991, 1993, 1994 Glenn Chappell and Ian Chai
+.\" Internet: <info@figlet.org>
+.\" Portions Copyright 1996, 1997, 1998, 1999, 2000, 2001 by John Cowan <cowan@ccil.org>
+.\" Portions Copyright 2002 by Christiaan Keet
+.\" Portions Copyright 2011, 2012 by Claudio Matsuoka
+.\" FIGlet, along with the various FIGlet fonts and documentation, may
+.\" be freely copied and distributed.
+.\" If you use FIGlet, please send an e-mail message to
+.\" <info@figlet.org>
+.\"
+.TH FIGLET 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+FIGlet \- display large characters made up of ordinary screen characters
+
+.SH SYNOPSIS
+.B figlet
+[
+.B \-cklnoprstvxDELNRSWX
+]
+[
+.B \-d
+.I fontdirectory
+]
+.PD 0
+.IP
+.PD
+[
+.B \-f
+.I fontfile
+]
+[
+.B \-m
+.I layoutmode
+]
+.PD 0
+.IP
+.PD
+[
+.B \-w
+.IR outputwidth
+]
+[
+.B \-C
+.I controlfile
+]
+.PD 0
+.IP
+.PD
+[
+.B \-I
+.I infocode
+]
+[
+.I message
+]
+
+.SH DESCRIPTION
+.B FIGlet
+prints its input using large characters
+(called ``FIGcharacters'')made up of ordinary
+screen characters
+(called ``sub-characters'').
+.B FIGlet
+output is generally reminiscent of the
+sort of ``signatures'' many people like to put at the end of e-mail
+and UseNet messages. It is also reminiscent of the output of some banner
+programs, although it is oriented normally, not sideways.
+
+.B FIGlet
+can print in a variety of fonts, both left-to-right and right-to-left,
+with adjacent FIGcharacters kerned and ``smushed'' together in various ways.
+.B FIGlet
+fonts are stored in
+separate files, which can be identified by the suffix
+.RB `` .flf ''.
+In systems with UTF-8 support
+.B FIGlet
+may also support TOIlet
+.RB `` .tlf ''
+fonts. Most
+.B FIGlet
+font files will be stored in
+.B FIGlet's
+default font directory.
+
+.B FIGlet
+can also use ``control files'', which tell it to map certain input
+characters to certain other characters, similar to the Unix
+.B tr
+command. Control files can be identified by the suffix
+.RB `` .flc ''.
+Most
+.B FIGlet
+control files will be stored in
+.B FIGlet's
+default font directory.
+
+You can store
+.B FIGlet
+fonts and control files
+in compressed form.
+See
+.BR "COMPRESSED FONTS" .
+
+.SH USAGE
+Just start up
+.B FIGlet
+(type
+.RB `` figlet '')
+and then type whatever you want.
+Alternatively, pipe a file or the output of another command through
+.BR FIGlet ,
+or put input on the command line
+after the options.
+See
+.B EXAMPLES
+for other things to do.
+
+.SH OPTIONS
+.B FIGlet
+reads command line options from left to right, and only the last
+option that affects a parameter has any effect. Almost every option
+has an inverse, so that, for example, if
+.B FIGlet
+is customized with a shell
+.BR alias ,
+all the options are usually still available.
+
+Commonly-used options are
+.BR \-f ,
+.BR \-c ,
+.BR \-k ,
+.BR \-t ,
+.B \-p
+and
+.BR \-v .
+
+.TP
+.BI \-f \ fontfile
+Select the font. The
+.B .flf
+suffix may be left off of
+.IR fontfile ,
+in which case
+.B FIGlet
+automatically appends it.
+.B FIGlet
+looks for the file first in the default font directory and then
+in the current directory, or, if
+.I fontfile
+was given as a full pathname, in the given directory.
+If the
+.B \-f
+option is not specified,
+.B FIGlet
+uses the font that was specified
+when it was compiled. To find out which font this is, use the
+.B \-I3
+option.
+
+.TP
+.BI \-d \ fontdirectory
+Change the default font directory.
+.B FIGlet
+looks for fonts first in the
+default directory and then in the current directory.
+If the
+.B \-d
+option is not specified,
+.B FIGlet
+uses the directory that was specified
+when it was compiled. To find out which directory this is, use the
+.B \-I2
+option.
+
+.TP
+.B \-c
+.PD 0
+.TP
+.B \-l
+.PD 0
+.TP
+.B \-r
+.PD 0
+.TP
+.B \-x
+.PD
+These options handle the justification of
+.B FIGlet
+output.
+.B \-c
+centers the output horizontally.
+.B \-l
+makes the output flush-left.
+.B \-r
+makes it flush-right.
+.B \-x
+(default) sets the justification according to whether left-to-right or
+right-to-left text is selected. Left-to-right text will be flush-left,
+while right-to-left text will be flush-right. (Left-to-right versus
+right-to-left text is controlled by
+.BR \-L ,
+.B \-R
+and
+.BR \-X .)
+
+.TP
+.B \-t
+.PD 0
+.TP
+.BI \-w \ outputwidth
+.PD
+These options control the
+.IR outputwidth ,
+or the screen width
+.B FIGlet
+assumes when formatting its output.
+.B FIGlet
+uses the
+.I outputwidth
+to determine when to break lines and how to center
+the output. Normally,
+.B FIGlet
+assumes 80 columns so that people with wide terminals
+won't annoy the people they e-mail
+.B FIGlet
+output to.
+.B \-t
+sets the
+.I outputwidth
+to the terminal width. If the terminal width cannot be determined,
+the previous
+.I outputwidth
+is retained.
+.B \-w
+sets the
+.I outputwidth
+to the given integer. An
+.I outputwidth
+of 1 is a special value that tells
+.B FIGlet
+to print each non-space FIGcharacter, in its entirety, on a separate line,
+no matter how wide it is.
+
+.TP
+.B \-p
+.PD 0
+.TP
+.B \-n
+.PD
+These options control how
+.B FIGlet
+handles newlines.
+.B \-p
+puts
+.B FIGlet
+into ``paragraph mode'', which eliminates some unnecessary line
+breaks when piping a multi-line file through
+.BR FIGlet .
+In paragraph mode,
+.B FIGlet
+treats line breaks within a paragraph as if they were merely blanks
+between words. (Specifically,
+.B \-p
+causes
+.B FIGlet
+to convert any newline which is not preceded by a newline and not
+followed by a space character into a blank.)
+.B \-n
+(default) puts
+.B FIGlet
+back to normal, in which every newline
+.B FIGlet
+reads causes it to produce a line break.
+
+.TP
+.B \-D
+.PD 0
+.TP
+.B \-E
+.PD
+.B \-D
+switches to the German (ISO 646-DE) character set. Turns `[', `\e'
+and `]' into umlauted A, O and U, respectively. `{', `|' and `}' turn
+into the respective lower case versions of these. `~' turns into s-z.
+.B \-E
+turns off
+.B \-D
+processing.
+These options are deprecated,
+which means they probably will not appear
+in the next version of
+.BR FIGlet .
+
+.TP
+.BI \-C \ controlfile
+.PD 0
+.TP
+.B \-N
+.PD
+These options deal with
+.B FIGlet
+.IR controlfiles .
+A
+.I controlfile
+is a file containing a list of commands that
+.B FIGlet
+executes each time it reads a character. These commands can map certain
+input characters to other characters, similar to the Unix
+.B tr
+command or the
+.B FIGlet
+.B \-D
+option.
+.B FIGlet
+maintains a list of
+.IR controlfiles ,
+which is empty when
+.B FIGlet
+starts up.
+.B \-C
+adds the given
+.I controlfile
+to the list.
+.B \-N
+clears the
+.I controlfile
+list, cancelling the effect of any previous
+.BR \-C .
+.B FIGlet
+executes the commands in all
+.I controlfiles
+in the list. See
+the file
+.IR figfont.txt ,
+provided with FIGlet,
+for details on how to write a
+.IR controlfile .
+
+.TP
+.B \-s
+.PD 0
+.TP
+.B \-S
+.PD 0
+.TP
+.B \-k
+.PD 0
+.TP
+.B \-W
+.PD
+.TP
+.B \-o
+.PD
+These options control how
+.B FIGlet
+spaces the FIGcharacters that it outputs.
+.B \-s
+(default) and
+.B \-S
+cause ``smushing''.
+The FIGcharacters are displayed
+as close together as possible,
+and overlapping sub-characters are removed.
+Exactly which sub-characters count as ``overlapping''
+depends on the font's
+.IR layoutmode ,
+which is defined by the font's author.
+.B \-k
+causes ``kerning''. As many blanks as possible are
+removed between FIGcharacters, so that they
+touch, but the FIGcharacters are not smushed.
+.B \-W
+makes
+.B FIGlet
+display all FIGcharacters at their full width,
+which may be fixed or variable, depending on the font.
+
+The difference between
+.B \-s
+and
+.B \-S
+is that
+.B \-s
+will not smush a font whose author specified
+kerning or full width as the default
+.IR layoutmode ,
+whereas
+.B \-S
+will attempt to do so.
+
+If there is no information in the font
+about how to smush,
+or if the
+.B \-o
+option is specified,
+then the FIGcharacters are ``overlapped''.
+This means that after kerning,
+the first subcharacter of
+each FIGcharacter is removed.
+(This is not done if a FIGcharacter
+contains only one subcharacter.)
+
+.TP
+.BI \-m \ layoutmode
+Specifies an explicit
+.I layoutmode
+between
+.B 1
+and
+.BR 63 .
+.I Smushmodes
+are explained in
+.IR figfont.txt ,
+which also provides complete information
+on the format of a
+.B FIGlet
+font.
+For the sake of backward compatibility
+with versions of
+.B FIGlet
+before 2.2,
+.B \-m0
+is equivalent to
+.BR \-k ,
+.B \-m-1
+is equivalent to
+.BR \-W ,
+and
+.B \-m-2
+is equivalent to
+.BR \-s .
+The
+.B \-m
+switch is normally
+used only by font designers testing the various
+.I layoutmodes
+with a new font.
+
+.TP
+.B \-v
+.PD 0
+.TP
+.BI \-I \ infocode
+.PD
+These options print various information about
+.BR FIGlet ,
+then exit. If several of these options are given on the command line, only
+the last is executed, and only after
+all other command-line options have been dealt with.
+
+.B \-v
+prints version and copyright information, as well as a ``Usage: ...''
+line.
+.B \-I
+prints the information corresponding to the given
+.I infocode
+in a consistent, reliable (i.e., guaranteed to be the same in
+future releases) format.
+.B \-I
+is primarily intended to be used by programs that use
+.BR FIGlet .
+.I infocode
+can be any of the following.
+.RS
+.TP
+.BR -1 " Normal operation (default)."
+This
+.I infocode
+indicates that
+.B FIGlet
+should operate normally, not giving any informational printout,
+printing its input in the selected font.
+.TP
+.BR 0 " Version and copyright."
+This is identical to
+.BR \-v .
+.TP
+.BR 1 " Version (integer)."
+This will print the version of your copy of
+.B FIGlet
+as a decimal integer. The main version number is multiplied by 10000,
+the sub-version number is multiplied by 100, and the sub-sub-version
+number is multiplied by 1. These are added together, and the result is
+printed out. For example,
+.B FIGlet
+2.2 will print
+.RB `` 20200 ''
+, version 2.2.1 will print
+.RB `` 20201 ''.
+Similarly, version 3.7.2 would print
+.RB `` 30702 ''.
+These numbers are guaranteed to be
+ascending, with later versions having higher numbers. Note that
+the first major release of
+.BR FIGlet ,
+version 2.0, did not have the
+.B \-I
+option.
+.TP
+.BR 2 " Default font directory."
+This will print the default font directory. It is affected by the
+.B \-d
+option.
+.TP
+.BR 3 " Font."
+This will print the name of the font
+.B FIGlet
+would use. It is affected by
+the
+.B \-f
+option.
+This is not a filename; the
+.RB `` .flf ''
+suffix is not printed.
+.TP
+.BR 4 " Output width."
+This will print the value
+.B FIGlet
+would use for
+.IR outputwidth ,
+the number of columns wide
+.B FIGlet
+assumes the screen is.
+It is affected by the
+.B \-w
+and
+.B \-t
+options.
+.TP
+.BR 5 " Supported font formats."
+This will list font formats supported by
+.B FIGlet .
+Possible formats are
+.RB `` flf2 ''
+for FIGfont Version 2
+.B .flf
+files and
+.RB `` tlf2 ''
+for TOIlet
+.B .tlf
+files.
+.RE
+.IP
+If
+.I infocode
+is any other positive value,
+.B FIGlet
+will simply exit without printing anything.
+
+.TP
+.B \-L
+.PD 0
+.TP
+.B \-R
+.PD 0
+.TP
+.B \-X
+.PD
+These options control whether
+.B FIGlet
+prints left-to-right or right-to-left.
+.B \-L
+selects left-to-right printing.
+.B \-R
+selects right-to-left printing.
+.B \-X
+(default) makes
+.B FIGlet
+use whichever is specified in the font file.
+
+Once the options are read,
+if there are any remaining words on the command line,
+they are used instead
+of standard input as the source of text.
+This feature
+allows shell scripts to generate large letters without having to dummy
+up standard input files.
+
+An empty argument, obtained by two sequential quotes,
+results in a line break.
+
+.SH EXAMPLES
+To use
+.B FIGlet
+with its default settings, simply type
+.RS
+.nf
+.ft B
+
+example% figlet
+
+.ft R
+.fi
+.RE
+and then type whatever you like.
+
+To change the font, use the
+.B \-f
+option, for example,
+.RS
+.nf
+.ft B
+
+example% figlet \-f script
+
+.ft R
+.fi
+.RE
+
+Use the
+.B \-c
+option if you would prefer centered output:
+.RS
+.nf
+.ft B
+
+example% figlet \-c
+
+.ft R
+.fi
+.RE
+
+We have found that the most common use of
+.B FIGlet
+is making up large text to be placed in e-mail messages. For this
+reason,
+.B FIGlet
+defaults to 80 column output. If you are using a wider terminal, and
+would like
+.B FIGlet
+to use the full width of your terminal, use the
+.B \-t
+option:
+.RS
+.nf
+.ft B
+
+example% figlet \-t
+
+.ft R
+.fi
+.RE
+
+If you don't want
+.B FIGlet
+to smush FIGcharacters into each other, use the
+.B \-k
+option:
+.RS
+.nf
+.ft B
+
+example% figlet \-k
+
+.ft R
+.fi
+.RE
+
+If
+.B figlet
+gets its input from a file, it is often a good idea to use
+.BR \-p :
+.RS
+.nf
+.ft B
+
+example% figlet \-p < myfile
+
+.ft R
+.fi
+.RE
+
+Of course, the above can be combined:
+.RS
+.nf
+.ft B
+
+example% figlet \-ptk \-f shadow < anotherfile
+example% figlet \-cf slant
+
+.ft R
+.fi
+.RE
+
+Finally, if you want to have
+.B FIGlet
+take the input from the command
+line instead of a file:
+.RS
+.nf
+.ft B
+
+example% figlet Hello world
+
+.ft R
+.fi
+.RE
+
+.SS Other Things to Try
+On many systems nice effects can be obtained from the
+.B lean
+font by piping it through
+.BR tr .
+Some you might want to try are the following:
+
+.RS
+.nf
+.ft B
+example% figlet \-f lean | tr ' _/' ' ()'
+example% figlet \-f lean | tr ' _/' './\e\e'
+example% figlet \-f lean | tr ' _/' ' //'
+example% figlet \-f lean | tr ' _/' '/ '
+.ft R
+.fi
+.RE
+
+Similar things can be done with the
+.B block
+font and many of the other
+.B FIGlet
+fonts.
+
+.SH COMPRESSED FONTS
+You can compress the fonts and controlfiles
+using the
+.B zip
+archiving program.
+Place only one font or controlfile in each archive,
+and rename the archive file (which will have a name
+ending in
+.BR .zip )
+back to
+.B .flf
+or
+.B .flc
+as the case may be.
+If you don't rename the file appropriately,
+.B FIGlet
+won't be able to find it.
+
+.B FIGlet
+does not care what the filename within the
+.B .zip
+archive is, and will process only the first file.
+
+The
+.B .zip
+format was chosen because tools to create and manipulate it
+are widely available for free
+on many platforms.
+
+.SH THE STANDARD FONTS
+
+Here are a few notes about some of the fonts provided with
+.IR FIGlet .
+You can get many other font from the Web site
+.br
+http://www.figlet.org/ This location
+should also contain the latest version of
+.B FIGlet
+and other related utilities.
+
+The font
+.I standard
+is the basic
+.B FIGlet
+font, used when no other font is specified.
+(This default can be changed when
+.B FIGlet
+is compiled on your system.)
+The
+.I controlfiles
+.IR 8859-2 ,
+.IR 8859-3 ,
+.IR 8859-4 ,
+and
+.I 8859-9
+are provided for interpreting those character sets,
+also known as ISO Latin-2 through Latin-5 respectively.
+The character set 8859-1 (ISO Latin-1) is
+.B FIGlet's
+default and requires no special
+.IR controlfile .
+
+Closely related are the fonts
+.IR slant ,
+.IR shadow ,
+.IR small ,
+.I smslant
+(both small and slanted),
+.IR smshadow ,
+(both small and shadowed),
+and
+.IR big .
+These fonts support only Latin-1, except that
+.I big
+supports Greek FIGcharacters as well;
+the
+.I controlfiles
+.I frango
+(for Greek text written in Latin characters, so-called
+.RI `` frangovlakhika ''),
+and
+.I 8859-7
+(for mixed Latin/Greek text)
+are provided.
+
+The
+.I ivrit
+font is a right-to-left font
+including both Latin and Hebrew FIGcharacters;
+the Latin characters are those of the
+.I standard
+font.
+The available
+.I controlfiles
+are
+.IR ilhebrew ,
+which maps the letters you get
+by typing on a U.S. keyboard
+as if it were a Hebrew keyboard;
+.IR ushebrew ,
+which makes a reasonable mapping from
+Latin letters to Hebrew ones;
+and
+.IR 8859-8 ,
+which supports mixed Latin/Hebrew text.
+.B Warning:
+.B FIGlet
+doesn't support bidirectional text,
+so everything will come out right-to-left,
+even Latin letters.
+
+The fonts
+.IR terminal ,
+.IR digital ,
+and
+.I bubble
+output the input character with some decoration around it
+(or no decoration,
+in the case of
+.IR terminal ).
+The characters coded 128 to 159,
+which have varying interpretations, are output as-is.
+You can use the appropriate
+.I controlfiles
+to process Latin-2, Latin-3, or Latin-4 (but not Latin-5) text,
+provided your output device
+has screen or printer fonts that
+are appropriate for these character sets.
+
+Two script fonts are available:
+.IR script ,
+which is larger than
+.IR standard ,
+and
+.IR smscript ,
+which is smaller.
+
+The font
+.I lean
+is made up solely of `/' and `_' sub-characters;
+.I block
+is a straight (non-leaning) version of it.
+
+The font
+.I mini
+is very small, and especially suitable for e-mail signatures.
+
+The font
+.I banner
+looks like the output of the
+.B banner
+program;
+it is a capitals and small capitals font
+that doesn't support the ISO Latin-1 extensions
+to plain ASCII.
+It does, however, support the Japanese
+.I katakana
+syllabary;
+the
+.I controlfile
+.I uskata
+maps the upper-case and lower-case Latin letters
+into the 48 basic
+.I katakana
+characters,
+and the
+.I controlfile
+.I jis0201
+handles JIS 0201X (JIS-Roman)
+mixed Latin and
+.I katakana
+text.
+Furthermore, the
+.I banner
+font also supports Cyrillic (Russian)
+FIGcharacters; the
+.I controlfile
+.I 8859-5
+supports mixed Latin and Cyrillic text,
+the
+.I controlfile
+.I koi8r
+supports the popular KOI8-R mapping of mixed text,
+and the
+.I controlfile
+.I moscow
+supports a
+sensible mapping from Latin to Cyrillic,
+compatible with the
+.I moscow
+font (not supplied).
+
+The fonts
+.I mnemonic
+and
+.I safemnem
+support the mnemonic character set
+documented in RFC 1345.
+They implement a large subset of Unicode
+(over 1800 characters) very crudely,
+using ASCII-based mnemonic sequences,
+and are good for getting a quick look
+at UTF-8 unicode files,
+using the controlfile
+.IR utf8 .
+
+.SH ENVIRONMENT
+.TP
+.B FIGLET_FONTDIR
+If
+.RB $ FIGLET_FONTDIR
+is set, its value is used as a path to search for font files.
+
+.SH FILES
+.PD 0
+.TP 20
+.IB file .flf
+.B FIGlet
+font file
+.TP 20
+.IB file .flc
+.B FIGlet
+control file
+.PD
+
+.SH DIAGNOSTICS
+.B FIGlet's
+diagnostics are intended to be self-explanatory. Possible
+messages are
+
+.RS
+.nf
+.ft B
+Usage: ...
+Out of memory
+Unable to open font file
+Not a FIGlet 2 font file
+Unable to open control file
+Not a FIGlet 2 control file
+"\-t" is disabled, since ioctl is not fully implemented.
+.ft R
+.fi
+.RE
+
+This last message is printed when the
+.B \-t
+option is given, but the operating system in use does not include
+the system call
+.B FIGlet
+uses to determine the terminal width.
+
+.B FIGlet
+also prints an explanatory message if the
+.B \-F
+option is given on the command line.
+The earlier version of
+.BR FIGlet ,
+version 2.0, listed the available fonts when the
+.B \-F
+option was given. This option has been removed from
+.B FIGlet
+2.1. It has been replaced by the
+.B figlist
+script, which is part of the standard
+.B FIGlet
+package.
+
+.SH ORIGIN
+.RB `` FIGlet ''
+stands for ``Frank, Ian and Glenn's LETters''. Inspired by Frank's .sig,
+Glenn wrote (most of) it, and Ian helped.
+
+Most of the standard
+.B FIGlet
+fonts were inspired by signatures on various UseNet
+articles. Since typically hundreds of people use the same style of
+letters in their signatures, it was often not deemed necessary to give
+credit to any one font designer.
+
+.SH BUGS
+Very little error checking is done on font and control files. While
+.B FIGlet
+tries to be forgiving of errors, and should (hopefully) never actually
+crash, using an improperly-formatted file with
+.B FIGlet
+will produce unpredictable output.
+
+.B FIGlet
+does not handle format characters in a very intelligent way.
+A tab character is converted to a blank, and vertical-tab, form-feed and
+carriage-return are each converted to a newline. On many systems, tabs
+can be handled better by piping files through
+.B expand
+before piping through
+.BR FIGlet .
+
+.B FIGlet
+output is quite ugly if it is displayed in a proportionally-spaced font.
+I suppose this is to be expected.
+
+Please report any errors you find in this man page or the program to
+<info@figlet.org>
+.SH WEBSITE AND MAILING LIST
+You can get many fonts which are not in the basic
+.B FIGlet
+package from the Web site
+http://www.figlet.org/ It
+should also contain the latest version of
+.B FIGlet
+and other utilities related to
+.BR FIGlet .
+
+There is a mailing list for
+.B FIGlet
+for general discussions about
+.B FIGlet
+and a place where you can ask questions or share ideas
+with other
+.B FIGlet
+users. It is also the place where we will publish
+news about new fonts, new software updates etc.
+
+To subscribe or unsubscribe from the
+.B FIGlet
+mailing list,
+please send email to figlet-subscribe@figlet.org or figlet-unsubscribe@figlet.org or visit the
+following web page: http://www.figlet.org/mailman/listinfo/figlet
+
+.SH AUTHORS
+Glenn Chappell did most of the work.
+You can e-mail him but he is not an e-mail fanatic; people who e-mail
+Glenn will probably get answers, but if you e-mail his best friend:
+
+Ian Chai, who
+.I is
+an e-mail fanatic, you'll get answers, endless conversation about the
+mysteries of life, invitations to join some 473 mailing lists and a
+free toaster. (Well, ok, maybe not the free toaster.)
+
+Frank inspired this whole project with his .sig, but don't e-mail
+him; he's decidedly an un-e-mail-fanatic.
+
+Gilbert "The Mad Programmer" Healton added the
+.B \-A
+option for version 2.1.1. This option specified input from
+the command line; it is still allowed,
+but has no effect.
+
+John Cowan added the
+.BR \-o ,
+.BR \-s ,
+.BR \-k ,
+.BR \-S ,
+and
+.B \-W
+options, and
+the support for Unicode mapping tables,
+ISO 2022/HZ/Shift-JIS/UTF-8 input,
+and compressed fonts
+and control files.
+He also revised this documentation,
+with a lot of input from
+Paul Burton.
+
+Claudio Matsuoka added the support for
+.B .tlf
+files for version 2.2.4 and performs random hacks and bugfixes.
+
+As a fan of FIGlet, Christiaan Keet revised the official FIGlet documentation
+and set up the new FIGlet website at http://www.figlet.org/ (and the
+corresponding ftp://ftp.figlet.org/pub/figlet/)
+
+.SH SEE ALSO
+.BR figlist (6),
+.BR chkfont (6),
+.BR showfigfonts (6),
+.BR toilet (1)
diff --git a/externals/figlet/figlet.c b/externals/figlet/figlet.c
new file mode 100644
index 0000000000..d34b19a8b8
--- /dev/null
+++ b/externals/figlet/figlet.c
@@ -0,0 +1,2131 @@
+/****************************************************************************
+
+ FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai
+ FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+ FIGlet Copyright 2002 Christiaan Keet
+ FIGlet Copyright 2011, 2012 Claudio Matsuoka
+ Portions written by Paul Burton and Christiaan Keet
+ Internet: <info@figlet.org>
+ FIGlet, along with the various FIGlet fonts and documentation, is
+ copyrighted under the provisions of the New BSD License (3-clause)
+ (as listed in the file "LICENSE" which is included in this package)
+****************************************************************************/
+
+#define DATE "31 May 2012"
+#define VERSION "2.2.5"
+#define VERSION_INT 20205
+
+/* FIGlet (Frank, Ian & Glenn's Letters) */
+/* by Glenn Chappell */
+/* Apr 1991 */
+/* Automatic file addition by Ian Chai May 1991 */
+/* Punctuation and numbers addition by Ian Chai Jan 1993 */
+/* Full ASCII by Glenn Chappell Feb 1993 */
+/* Line-breaking, general rewrite by Glenn Chappell Mar 1993 */
+/* Hard blanks by Glenn Chappell Apr 1993 */
+/* Release 2.0 5 Aug 1993 */
+/* Right-to-left printing, extended char set by Glenn Chappell Dec 1993 */
+/* Control files by Glenn Chappell Feb 1994 */
+/* Release 2.1 12 Aug 1994 */
+/* Release 2.1.1 25 Aug 1994 */
+/* Release 2.1.2 by Gilbert (Mad Programmer) Healton: Add -A command line
+ option. Sept 8, 1996 */
+/* Release 2.2 by John Cowan: multibyte inputs, compressed fonts,
+ mapping tables, kerning/smushing options. */
+/* Release 2.2.1 by Christiaan Keet: minor updates including readmes
+ FAQs and comments. 13 July 2002. The new official FIGlet website is
+ http://www.figlet.org/ */
+/* Release 2.2.2 by Christiaan Keet: License changed from "Artistic License"
+ to "Academic Free License" as agreed by FIGlet authors. 05 July 2005 */
+/* Release 2.2.3 by Claudio Matsuoka, 12 Jan 2011: BSD license, fixes */
+/* Release 2.2.4 by Claudio Matsuoka, 26 Jan 2011: tlf2 font support */
+/* Release 2.2.5 by Claudio Matsuoka, 31 May 2012: flc licensing, minor fixes */
+
+/*---------------------------------------------------------------------------
+ DEFAULTFONTDIR and DEFAULTFONTFILE should be defined in the Makefile.
+ DEFAULTFONTDIR is the full path name of the directory in which FIGlet
+ will search first for fonts (the ".flf" files).
+ DEFAULTFONTFILE is the filename of the font to be used if no other
+ is specified (standard.flf is recommended, but any other can be
+ used). This file should reside in the directory specified by
+ DEFAULTFONTDIR.
+---------------------------------------------------------------------------*/
+#ifndef DEFAULTFONTDIR
+#define DEFAULTFONTDIR "fonts"
+#endif
+#ifndef DEFAULTFONTFILE
+#define DEFAULTFONTFILE "standard.flf"
+#endif
+
+#include <stdio.h>
+#ifdef __STDC__
+#include <stdlib.h>
+#endif
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <fcntl.h> /* Needed for get_columns */
+
+#if defined(unix) || defined(__unix__) || defined(__APPLE__)
+#include <unistd.h>
+#include <sys/ioctl.h> /* Needed for get_columns */
+#endif
+
+#ifdef TLF_FONTS
+#include <wchar.h>
+#include <wctype.h>
+#include "utf8.h"
+#endif
+
+#include "zipio.h" /* Package for reading compressed files */
+
+#define MYSTRLEN(x) ((int)strlen(x)) /* Eliminate ANSI problem */
+
+#define DIRSEP '/'
+#define DIRSEP2 '\\'
+/* Leave alone for Unix and MS-DOS/Windows!
+Note: '/' also used in filename in get_columns(). */
+
+#define FONTFILESUFFIX ".flf"
+#define FONTFILEMAGICNUMBER "flf2"
+#define FSUFFIXLEN MYSTRLEN(FONTFILESUFFIX)
+#define CONTROLFILESUFFIX ".flc"
+#define CONTROLFILEMAGICNUMBER "flc2" /* no longer used in 2.2 */
+#define CSUFFIXLEN MYSTRLEN(CONTROLFILESUFFIX)
+#define DEFAULTCOLUMNS 80
+#define MAXLEN 255 /* Maximum character width */
+
+/* Add support for Sam Hocevar's TOIlet fonts */
+#ifdef TLF_FONTS
+#define TOILETFILESUFFIX ".tlf"
+#define TOILETFILEMAGICNUMBER "tlf2"
+#define TSUFFIXLEN MYSTRLEN(TOILETFILESUFFIX)
+
+int toiletfont; /* true if font is a TOIlet TLF font */
+#endif
+
+
+/****************************************************************************
+
+ Globals dealing with chars that are read
+
+****************************************************************************/
+
+typedef long inchr; /* "char" read from stdin */
+
+inchr *inchrline; /* Alloc'd inchr inchrline[inchrlinelenlimit+1]; */
+ /* Note: not null-terminated. */
+int inchrlinelen,inchrlinelenlimit;
+inchr deutsch[7] = {196, 214, 220, 228, 246, 252, 223};
+ /* Latin-1 codes for German letters, respectively:
+ LATIN CAPITAL LETTER A WITH DIAERESIS = A-umlaut
+ LATIN CAPITAL LETTER O WITH DIAERESIS = O-umlaut
+ LATIN CAPITAL LETTER U WITH DIAERESIS = U-umlaut
+ LATIN SMALL LETTER A WITH DIAERESIS = a-umlaut
+ LATIN SMALL LETTER O WITH DIAERESIS = o-umlaut
+ LATIN SMALL LETTER U WITH DIAERESIS = u-umlaut
+ LATIN SMALL LETTER SHARP S = ess-zed
+ */
+
+int hzmode; /* true if reading double-bytes in HZ mode */
+int gndbl[4]; /* gndbl[n] is true if Gn is double-byte */
+inchr gn[4]; /* Gn character sets: ASCII, Latin-1, none, none */
+int gl; /* 0-3 specifies left-half Gn character set */
+int gr; /* 0-3 specifies right-half Gn character set */
+
+int Myargc; /* to avoid passing around argc and argv */
+char **Myargv;
+
+/****************************************************************************
+
+ Globals dealing with chars that are written
+
+****************************************************************************/
+
+#ifdef TLF_FONTS
+typedef wchar_t outchr; /* "char" written to stdout */
+#define STRLEN(x) wcslen(x)
+#define STRCPY(x,y) wcscpy((x),(y))
+#define STRCAT(x,y) wcscat((x),(y))
+#define ISSPACE(x) iswspace(x)
+#else
+typedef char outchr; /* "char" written to stdout */
+#define STRLEN(x) MYSTRLEN(x)
+#define STRCPY(x,y) strcpy((x),(y))
+#define STRCAT(x,y) strcat((x),(y))
+#define ISSPACE(x) isspace(x)
+#endif
+
+typedef struct fc {
+ inchr ord;
+ outchr **thechar; /* Alloc'd char thechar[charheight][]; */
+ struct fc *next;
+ } fcharnode;
+
+fcharnode *fcharlist;
+outchr **currchar;
+int currcharwidth;
+int previouscharwidth;
+outchr **outputline; /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */
+int outlinelen;
+
+
+/****************************************************************************
+
+ Globals dealing with command file storage
+
+****************************************************************************/
+
+typedef struct cfn {
+ char *thename;
+ struct cfn *next;
+ } cfnamenode;
+
+cfnamenode *cfilelist,**cfilelistend;
+
+typedef struct cm {
+ int thecommand;
+ inchr rangelo;
+ inchr rangehi;
+ inchr offset;
+ struct cm *next;
+ } comnode;
+
+comnode *commandlist,**commandlistend;
+
+/****************************************************************************
+
+ Globals affected by command line options
+
+****************************************************************************/
+
+int deutschflag,justification,paragraphflag,right2left,multibyte;
+int cmdinput;
+
+#define SM_SMUSH 128
+#define SM_KERN 64
+#define SM_EQUAL 1
+#define SM_LOWLINE 2
+#define SM_HIERARCHY 4
+#define SM_PAIR 8
+#define SM_BIGX 16
+#define SM_HARDBLANK 32
+
+int smushmode;
+
+#define SMO_NO 0 /* no command-line smushmode */
+#define SMO_YES 1 /* use command-line smushmode, ignore font smushmode */
+#define SMO_FORCE 2 /* logically OR command-line and font smushmodes */
+
+int smushoverride;
+
+int outputwidth;
+int outlinelenlimit;
+char *fontdirname,*fontname;
+
+
+/****************************************************************************
+
+ Globals read from font file
+
+****************************************************************************/
+
+char hardblank;
+int charheight;
+
+
+/****************************************************************************
+
+ Name of program, used in error messages
+
+****************************************************************************/
+
+char *myname;
+
+
+#ifdef TIOCGWINSZ
+/****************************************************************************
+
+ get_columns
+
+ Determines the number of columns of /dev/tty. Returns the number of
+ columns, or -1 if error. May return 0 if columns unknown.
+ Requires include files <fcntl.h> and <sys/ioctl.h>.
+ by Glenn Chappell & Ian Chai 14 Apr 1993
+
+****************************************************************************/
+
+int get_columns()
+{
+ struct winsize ws;
+ int fd,result;
+
+ if ((fd = open("/dev/tty",O_WRONLY))<0) return -1;
+ result = ioctl(fd,TIOCGWINSZ,&ws);
+ close(fd);
+ return result?-1:ws.ws_col;
+}
+#endif /* ifdef TIOCGWINSZ */
+
+
+/****************************************************************************
+
+ myalloc
+
+ Calls malloc. If malloc returns error, prints error message and
+ quits.
+
+****************************************************************************/
+
+#ifdef __STDC__
+char *myalloc(size_t size)
+#else
+char *myalloc(size)
+int size;
+#endif
+{
+ char *ptr;
+#ifndef __STDC__
+ extern void *malloc();
+#endif
+
+ if ((ptr = (char*)malloc(size))==NULL) {
+ fprintf(stderr,"%s: Out of memory\n",myname);
+ exit(1);
+ }
+ else {
+ return ptr;
+ }
+}
+
+
+/****************************************************************************
+
+ hasdirsep
+
+ Returns true if s1 contains a DIRSEP or DIRSEP2 character.
+
+****************************************************************************/
+
+int hasdirsep(s1)
+char *s1;
+{
+ if (strchr(s1, DIRSEP)) return 1;
+ else if (strchr(s1, DIRSEP2)) return 1;
+ else return 0;
+}
+
+/****************************************************************************
+
+ suffixcmp
+
+ Returns true if s2 is a suffix of s1; uses case-blind comparison.
+
+****************************************************************************/
+
+int suffixcmp(s1, s2)
+char *s1;
+char *s2;
+{
+ int len1, len2;
+
+ len1 = MYSTRLEN(s1);
+ len2 = MYSTRLEN(s2);
+ if (len2 > len1) return 0;
+ s1 += len1 - len2;
+ while (*s1) {
+ if (tolower(*s1) != tolower(*s2)) return 0;
+ s1++;
+ s2++;
+ }
+ return 1;
+}
+
+/****************************************************************************
+
+ skiptoeol
+
+ Skips to the end of a line, given a stream. Handles \r, \n, or \r\n.
+
+****************************************************************************/
+
+void skiptoeol(fp)
+ZFILE *fp;
+{
+ int dummy;
+
+ while (dummy=Zgetc(fp),dummy!=EOF) {
+ if (dummy == '\n') return;
+ if (dummy == '\r') {
+ dummy = Zgetc(fp);
+ if (dummy != EOF && dummy != '\n') Zungetc(dummy,fp);
+ return;
+ }
+ }
+}
+
+
+/****************************************************************************
+
+ myfgets
+
+ Local version of fgets. Handles \r, \n, and \r\n terminators.
+
+****************************************************************************/
+
+char *myfgets(line,maxlen,fp)
+char *line;
+int maxlen;
+ZFILE *fp;
+{
+ int c = 0;
+ char *p;
+
+ p = line;
+ while((c=Zgetc(fp))!=EOF&&maxlen) {
+ *p++ = c;
+ maxlen--;
+ if (c=='\n') break;
+ if (c=='\r') {
+ c = Zgetc(fp);
+ if (c != EOF && c != '\n') Zungetc(c,fp);
+ *(p-1) = '\n';
+ break;
+ }
+ }
+ *p = 0;
+ return (c==EOF) ? NULL : line;
+}
+
+
+/****************************************************************************
+
+ usageerr
+
+ Prints "Usage: ...." line to the given stream.
+
+****************************************************************************/
+
+void printusage(out)
+FILE *out;
+{
+ fprintf(out,
+ "Usage: %s [ -cklnoprstvxDELNRSWX ] [ -d fontdirectory ]\n",
+ myname);
+ fprintf(out,
+ " [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n");
+ fprintf(out,
+ " [ -C controlfile ] [ -I infocode ] [ message ]\n");
+}
+
+
+/****************************************************************************
+
+ printinfo
+
+ Prints version and copyright message, or utility information.
+
+****************************************************************************/
+
+void printinfo(infonum)
+int infonum;
+{
+ switch (infonum) {
+ case 0: /* Copyright message */
+ printf("FIGlet Copyright (C) 1991-2012 Glenn Chappell, Ian Chai, ");
+ printf("John Cowan,\nChristiaan Keet and Claudio Matsuoka\n");
+ printf("Internet: <info@figlet.org> ");
+ printf("Version: %s, date: %s\n\n",VERSION,DATE);
+ printf("FIGlet, along with the various FIGlet fonts");
+ printf(" and documentation, may be\n");
+ printf("freely copied and distributed.\n\n");
+ printf("If you use FIGlet, please send an");
+ printf(" e-mail message to <info@figlet.org>.\n\n");
+ printf("The latest version of FIGlet is available from the");
+ printf(" web site,\n\thttp://www.figlet.org/\n\n");
+ printusage(stdout);
+ break;
+ case 1: /* Version (integer) */
+ printf("%d\n",VERSION_INT);
+ break;
+ case 2: /* Font directory */
+ printf("%s\n",fontdirname);
+ break;
+ case 3: /* Font */
+ printf("%s\n",fontname);
+ break;
+ case 4: /* Outputwidth */
+ printf("%d\n",outputwidth);
+ break;
+ case 5: /* Font formats */
+ printf("%s", FONTFILEMAGICNUMBER);
+#ifdef TLF_FONTS
+ printf(" %s", TOILETFILEMAGICNUMBER);
+#endif
+ printf("\n");
+ }
+}
+
+
+/****************************************************************************
+
+ readmagic
+
+ Reads a four-character magic string from a stream.
+
+****************************************************************************/
+void readmagic(fp,magic)
+ZFILE *fp;
+char *magic;
+{
+ int i;
+
+ for (i=0;i<4;i++) {
+ magic[i] = Zgetc(fp);
+ }
+ magic[4] = 0;
+ }
+
+/****************************************************************************
+
+ skipws
+
+ Skips whitespace characters from a stream.
+
+****************************************************************************/
+void skipws(fp)
+ZFILE *fp;
+{
+ int c;
+ while (c=Zgetc(fp),isascii(c)&&isspace(c)) ;
+ Zungetc(c,fp);
+ }
+
+/****************************************************************************
+
+ readnum
+
+ Reads a number from a stream. Accepts "0" prefix for octal and
+ "0x" or "0X" for hexadecimal. Ignores leading whitespace.
+
+****************************************************************************/
+void readnum(fp,nump)
+ZFILE *fp;
+inchr *nump;
+{
+ int acc = 0;
+ char *p;
+ int c;
+ int base;
+ int sign = 1;
+ char digits[] = "0123456789ABCDEF";
+
+ skipws(fp);
+ c = Zgetc(fp);
+ if (c=='-') {
+ sign = -1;
+ }
+ else {
+ Zungetc(c,fp);
+ }
+ c = Zgetc(fp);
+ if (c=='0') {
+ c = Zgetc(fp);
+ if (c=='x'||c=='X') {
+ base = 16;
+ }
+ else {
+ base = 8;
+ Zungetc(c,fp);
+ }
+ }
+ else {
+ base = 10;
+ Zungetc(c,fp);
+ }
+
+ while((c=Zgetc(fp))!=EOF) {
+ c=toupper(c);
+ p=strchr(digits,c);
+ if (!p) {
+ Zungetc(c,fp);
+ *nump = acc * sign;
+ return;
+ }
+ acc = acc*base+(p-digits);
+ }
+ *nump = acc * sign;
+ }
+
+/****************************************************************************
+
+ readTchar
+
+ Reads a control file "T" command character specification.
+
+ Character is a single byte, an escape sequence, or
+ an escaped numeric.
+
+****************************************************************************/
+
+inchr readTchar(fp)
+ZFILE *fp;
+{
+ inchr thechar;
+ char next;
+
+ thechar=Zgetc(fp);
+ if (thechar=='\n' || thechar=='\r') { /* Handle badly-formatted file */
+ Zungetc(thechar,fp);
+ return '\0';
+ }
+ if (thechar!='\\') return thechar;
+ next=Zgetc(fp);
+ switch(next) {
+ case 'a':
+ return 7;
+ case 'b':
+ return 8;
+ case 'e':
+ return 27;
+ case 'f':
+ return 12;
+ case 'n':
+ return 10;
+ case 'r':
+ return 13;
+ case 't':
+ return 9;
+ case 'v':
+ return 11;
+ default:
+ if (next=='-' || next=='x' || (next>='0' && next<='9')) {
+ Zungetc(next,fp);
+ readnum(fp,&thechar);
+ return thechar;
+ }
+ return next;
+ }
+}
+
+/****************************************************************************
+
+ charsetname
+
+ Get a Tchar representing a charset name, or 0 if none available.
+ Called in getcharset().
+
+****************************************************************************/
+
+inchr charsetname(fp)
+ZFILE *fp;
+{
+ inchr result;
+
+ result = readTchar(fp);
+ if (result == '\n' || result == '\r') {
+ result = 0;
+ Zungetc(result,fp);
+ }
+ return result;
+ }
+
+/****************************************************************************
+
+ charset
+
+ Processes "g[0123]" character set specifier
+ Called in readcontrol().
+
+****************************************************************************/
+
+void charset(n, controlfile)
+int n;
+ZFILE *controlfile;
+{
+ int ch;
+
+ skipws(controlfile);
+ if (Zgetc(controlfile) != '9') {
+ skiptoeol(controlfile);
+ return;
+ }
+ ch = Zgetc(controlfile);
+ if (ch == '6') {
+ gn[n] = 65536L * charsetname(controlfile) + 0x80;
+ gndbl[n] = 0;
+ skiptoeol(controlfile);
+ return;
+ }
+ if (ch != '4') {
+ skiptoeol(controlfile);
+ return;
+ }
+ ch = Zgetc(controlfile);
+ if (ch == 'x') {
+ if (Zgetc(controlfile) != '9') {
+ skiptoeol(controlfile);
+ return;
+ }
+ if (Zgetc(controlfile) != '4') {
+ skiptoeol(controlfile);
+ return;
+ }
+ skipws(controlfile);
+ gn[n] = 65536L * charsetname(controlfile);
+ gndbl[n] = 1;
+ skiptoeol(controlfile);
+ return;
+ }
+ Zungetc(ch, controlfile);
+ skipws(controlfile);
+ gn[n] = 65536L * charsetname(controlfile);
+ gndbl[n] = 0;
+ return;
+ }
+
+/****************************************************************************
+
+ FIGopen
+
+ Given a FIGlet font or control file name and suffix, return the file
+ or NULL if not found
+
+****************************************************************************/
+
+ZFILE *FIGopen(name,suffix)
+char *name;
+char *suffix;
+{
+ char *fontpath;
+ ZFILE *fontfile;
+ struct stat st;
+ int namelen;
+
+ namelen = MYSTRLEN(fontdirname);
+ fontpath = (char*)alloca(sizeof(char)*
+ (namelen+MYSTRLEN(name)+MYSTRLEN(suffix)+2));
+ fontfile = NULL;
+ if (!hasdirsep(name)) { /* not a full path name */
+ strcpy(fontpath,fontdirname);
+ fontpath[namelen] = DIRSEP;
+ fontpath[namelen+1] = '\0';
+ strcat(fontpath,name);
+ strcat(fontpath,suffix);
+ if(stat(fontpath,&st)==0) goto ok;
+ }
+ /* just append suffix */
+ strcpy(fontpath,name);
+ strcat(fontpath,suffix);
+ if(stat(fontpath,&st)==0) goto ok;
+
+ return NULL;
+
+ok:
+ fontfile = Zopen(fontpath,"rb");
+ return fontfile;
+}
+
+/****************************************************************************
+
+ readcontrol
+
+ Allocates memory and reads in the given control file.
+ Called in readcontrolfiles().
+
+****************************************************************************/
+
+void readcontrol(controlname)
+char *controlname;
+{
+ inchr firstch,lastch;
+ char dashcheck;
+ inchr offset;
+ int command;
+ ZFILE *controlfile;
+
+ controlfile = FIGopen(controlname,CONTROLFILESUFFIX);
+
+ if (controlfile==NULL) {
+ fprintf(stderr,"%s: %s: Unable to open control file\n",myname,
+ controlname);
+ exit(1);
+ }
+
+ (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+ (*commandlistend)->thecommand = 0; /* Begin with a freeze command */
+ commandlistend = &(*commandlistend)->next;
+ (*commandlistend) = NULL;
+
+ while(command=Zgetc(controlfile),command!=EOF) {
+ switch (command) {
+ case 't': /* Translate */
+ skipws(controlfile);
+ firstch=readTchar(controlfile);
+ if ((dashcheck=Zgetc(controlfile))=='-') {
+ lastch=readTchar(controlfile);
+ }
+ else {
+ Zungetc(dashcheck,controlfile);
+ lastch=firstch;
+ }
+ skipws(controlfile);
+ offset=readTchar(controlfile)-firstch;
+ skiptoeol(controlfile);
+ (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+ (*commandlistend)->thecommand = 1;
+ (*commandlistend)->rangelo = firstch;
+ (*commandlistend)->rangehi = lastch;
+ (*commandlistend)->offset = offset;
+ commandlistend = &(*commandlistend)->next;
+ (*commandlistend) = NULL;
+ break;
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case '-':
+ /* Mapping table entry */
+ Zungetc(command,controlfile);
+ readnum(controlfile,&firstch);
+ skipws(controlfile);
+ readnum(controlfile,&lastch);
+ offset=lastch-firstch;
+ lastch=firstch;
+ skiptoeol(controlfile);
+ (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+ (*commandlistend)->thecommand = 1;
+ (*commandlistend)->rangelo = firstch;
+ (*commandlistend)->rangehi = lastch;
+ (*commandlistend)->offset = offset;
+ commandlistend = &(*commandlistend)->next;
+ (*commandlistend) = NULL;
+ break;
+ case 'f': /* freeze */
+ skiptoeol(controlfile);
+ (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+ (*commandlistend)->thecommand = 0;
+ commandlistend = &(*commandlistend)->next;
+ (*commandlistend) = NULL;
+ break;
+ case 'b': /* DBCS input mode */
+ multibyte = 1;
+ break;
+ case 'u': /* UTF-8 input mode */
+ multibyte = 2;
+ break;
+ case 'h': /* HZ input mode */
+ multibyte = 3;
+ break;
+ case 'j': /* Shift-JIS input mode */
+ multibyte = 4;
+ break;
+ case 'g': /* ISO 2022 character set choices */
+ multibyte = 0;
+ skipws(controlfile);
+ command=Zgetc(controlfile);
+ switch (command) {
+ case '0': /* define G0 charset */
+ charset(0, controlfile);
+ break;
+ case '1': /* set G1 charset */
+ charset(1, controlfile);
+ break;
+ case '2': /* set G2 charset */
+ charset(2, controlfile);
+ break;
+ case '3': /* set G3 charset */
+ charset(3, controlfile);
+ break;
+ case 'l': case 'L': /* define left half */
+ skipws(controlfile);
+ gl = Zgetc(controlfile) - '0';
+ skiptoeol(controlfile);
+ break;
+ case 'r': case 'R': /* define right half */
+ skipws(controlfile);
+ gr = Zgetc(controlfile) - '0';
+ skiptoeol(controlfile);
+ break;
+ default: /* meaningless "g" command */
+ skiptoeol(controlfile);
+ }
+ case '\r': case '\n': /* blank line */
+ break;
+ default: /* Includes '#' */
+ skiptoeol(controlfile);
+ }
+ }
+ Zclose(controlfile);
+}
+
+
+/****************************************************************************
+
+ readcontrolfiles
+
+ Reads in the controlfiles names in cfilelist. Uses readcontrol.
+ Called in main().
+
+****************************************************************************/
+
+void readcontrolfiles()
+{
+ cfnamenode *cfnptr;
+
+ for (cfnptr=cfilelist;cfnptr!=NULL;cfnptr=cfnptr->next) {
+ readcontrol(cfnptr->thename);
+ }
+}
+
+
+/****************************************************************************
+
+ clearcfilelist
+
+ Clears the control file list. Assumes thename does not need freeing.
+
+****************************************************************************/
+
+void clearcfilelist()
+{
+ cfnamenode *cfnptr1,*cfnptr2;
+
+ cfnptr1 = cfilelist;
+ while (cfnptr1 != NULL) {
+ cfnptr2 = cfnptr1->next;
+ free(cfnptr1);
+ cfnptr1 = cfnptr2;
+ }
+ cfilelist = NULL;
+ cfilelistend = &cfilelist;
+}
+
+
+/****************************************************************************
+
+ getparams
+
+ Handles all command-line parameters. Puts all parameters within
+ bounds.
+
+****************************************************************************/
+
+void getparams()
+{
+ extern char *optarg;
+ extern int optind;
+ int c; /* "Should" be a char -- need int for "!= -1" test*/
+ int columns,infoprint;
+ char *controlname,*env;
+
+ if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) {
+ myname++;
+ }
+ else {
+ myname = Myargv[0];
+ }
+ fontdirname = DEFAULTFONTDIR;
+ env = getenv("FIGLET_FONTDIR");
+ if (env!=NULL) {
+ fontdirname = env;
+ }
+ fontname = DEFAULTFONTFILE;
+ cfilelist = NULL;
+ cfilelistend = &cfilelist;
+ commandlist = NULL;
+ commandlistend = &commandlist;
+ smushoverride = SMO_NO;
+ deutschflag = 0;
+ justification = -1;
+ right2left = -1;
+ paragraphflag = 0;
+ infoprint = -1;
+ cmdinput = 0;
+ outputwidth = DEFAULTCOLUMNS;
+ gn[1] = 0x80;
+ gr = 1;
+ while ((c = getopt(Myargc,Myargv,"ADEXLRI:xlcrpntvm:w:d:f:C:NFskSWo"))!= -1) {
+ /* Note: -F is not a legal option -- prints a special err message. */
+ switch (c) {
+ case 'A':
+ cmdinput = 1;
+ break;
+ case 'D':
+ deutschflag = 1;
+ break;
+ case 'E':
+ deutschflag = 0;
+ break;
+ case 'X':
+ right2left = -1;
+ break;
+ case 'L':
+ right2left = 0;
+ break;
+ case 'R':
+ right2left = 1;
+ break;
+ case 'x':
+ justification = -1;
+ break;
+ case 'l':
+ justification = 0;
+ break;
+ case 'c':
+ justification = 1;
+ break;
+ case 'r':
+ justification = 2;
+ break;
+ case 'p':
+ paragraphflag = 1;
+ break;
+ case 'n':
+ paragraphflag = 0;
+ break;
+ case 's':
+ smushoverride = SMO_NO;
+ break;
+ case 'k':
+ smushmode = SM_KERN;
+ smushoverride = SMO_YES;
+ break;
+ case 'S':
+ smushmode = SM_SMUSH;
+ smushoverride = SMO_FORCE;
+ break;
+ case 'o':
+ smushmode = SM_SMUSH;
+ smushoverride = SMO_YES;
+ break;
+ case 'W':
+ smushmode = 0;
+ smushoverride = SMO_YES;
+ break;
+ case 't':
+#ifdef TIOCGWINSZ
+ columns = get_columns();
+ if (columns>0) {
+ outputwidth = columns;
+ }
+#else /* ifdef TIOCGWINSZ */
+ fprintf(stderr,
+ "%s: \"-t\" is disabled, since ioctl is not fully implemented.\n",
+ myname);
+#endif /* ifdef TIOCGWINSZ */
+ break;
+ case 'v':
+ infoprint = 0;
+ break;
+ case 'I':
+ infoprint = atoi(optarg);
+ break;
+ case 'm':
+ smushmode = atoi(optarg);
+ if (smushmode < -1) {
+ smushoverride = SMO_NO;
+ break;
+ }
+ if (smushmode == 0) smushmode = SM_KERN;
+ else if (smushmode == -1) smushmode = 0;
+ else smushmode = (smushmode & 63) | SM_SMUSH;
+ smushoverride = SMO_YES;
+ break;
+ case 'w':
+ columns = atoi(optarg);
+ if (columns>0) {
+ outputwidth = columns;
+ }
+ break;
+ case 'd':
+ fontdirname = optarg;
+ break;
+ case 'f':
+ fontname = optarg;
+ if (suffixcmp(fontname,FONTFILESUFFIX)) {
+ fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0';
+ }
+#ifdef TLF_FONTS
+ else if (suffixcmp(fontname,TOILETFILESUFFIX)) {
+ fontname[MYSTRLEN(fontname)-TSUFFIXLEN] = '\0';
+ }
+#endif
+ break;
+ case 'C':
+ controlname = optarg;
+ if (suffixcmp(controlname, CONTROLFILESUFFIX)) {
+ controlname[MYSTRLEN(controlname)-CSUFFIXLEN] = '\0';
+ }
+ (*cfilelistend) = (cfnamenode*)myalloc(sizeof(cfnamenode));
+ (*cfilelistend)->thename = controlname;
+ cfilelistend = &(*cfilelistend)->next;
+ (*cfilelistend) = NULL;
+ break;
+ case 'N':
+ clearcfilelist();
+ multibyte = 0;
+ gn[0] = 0;
+ gn[1] = 0x80;
+ gn[2] = gn[3] = 0;
+ gndbl[0] = gndbl[1] = gndbl[2] = gndbl[3] = 0;
+ gl = 0;
+ gr = 1;
+ break;
+ case 'F': /* Not a legal option */
+ fprintf(stderr,"%s: illegal option -- F\n",myname);
+ printusage(stderr);
+ fprintf(stderr,"\nBecause of numerous incompatibilities, the");
+ fprintf(stderr," \"-F\" option has been\n");
+ fprintf(stderr,"removed. It has been replaced by the \"figlist\"");
+ fprintf(stderr," program, which is now\n");
+ fprintf(stderr,"included in the basic FIGlet package. \"figlist\"");
+ fprintf(stderr," is also available\n");
+ fprintf(stderr,"from http://www.figlet.org/");
+ fprintf(stderr,"under UNIX utilities.\n");
+ exit(1);
+ break;
+ default:
+ printusage(stderr);
+ exit(1);
+ }
+ }
+ if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */
+ outlinelenlimit = outputwidth-1;
+ if (infoprint>=0) {
+ printinfo(infoprint);
+ exit(0);
+ }
+}
+
+
+/****************************************************************************
+
+ clearline
+
+ Clears both the input (inchrline) and output (outputline) storage.
+
+****************************************************************************/
+
+void clearline()
+{
+ int i;
+
+ for (i=0;i<charheight;i++) {
+ outputline[i][0] = '\0';
+ }
+ outlinelen = 0;
+ inchrlinelen = 0;
+}
+
+
+/****************************************************************************
+
+ readfontchar
+
+ Reads a font character from the font file, and places it in a
+ newly-allocated entry in the list.
+
+****************************************************************************/
+
+void readfontchar(file,theord)
+ZFILE *file;
+inchr theord;
+{
+ int row,k;
+ char templine[MAXLEN+1];
+ outchr endchar, outline[MAXLEN+1];
+ fcharnode *fclsave;
+
+ fclsave = fcharlist;
+ fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
+ fcharlist->ord = theord;
+ fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
+ fcharlist->next = fclsave;
+
+ outline[0] = 0;
+
+ for (row=0;row<charheight;row++) {
+ if (myfgets(templine,MAXLEN,file)==NULL) {
+ templine[0] = '\0';
+ }
+#ifdef TLF_FONTS
+ utf8_to_wchar(templine,MAXLEN,outline,MAXLEN,0);
+#else
+ strcpy(outline,templine);
+#endif
+ k = STRLEN(outline)-1;
+ while (k>=0 && ISSPACE(outline[k])) { /* remove trailing spaces */
+ k--;
+ }
+ if (k>=0) {
+ endchar = outline[k]; /* remove endmarks */
+ while (k>=0 && outline[k]==endchar) {
+ k--;
+ }
+ }
+ outline[k+1] = '\0';
+ fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr)*(STRLEN(outline)+1));
+ STRCPY(fcharlist->thechar[row],outline);
+ }
+}
+
+
+/****************************************************************************
+
+ readfont
+
+ Allocates memory, initializes variables, and reads in the font.
+ Called near beginning of main().
+
+****************************************************************************/
+
+void readfont()
+{
+ int i,row,numsread;
+ inchr theord;
+ int maxlen,cmtlines,ffright2left;
+ int smush,smush2;
+ char fileline[MAXLEN+1],magicnum[5];
+ ZFILE *fontfile;
+
+ fontfile = FIGopen(fontname,FONTFILESUFFIX);
+#ifdef TLF_FONTS
+ if (fontfile==NULL) {
+ fontfile = FIGopen(fontname,TOILETFILESUFFIX);
+ if(fontfile) toiletfont = 1;
+ }
+#endif
+
+ if (fontfile==NULL) {
+ fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontname);
+ exit(1);
+ }
+
+ readmagic(fontfile,magicnum);
+ if (myfgets(fileline,MAXLEN,fontfile)==NULL) {
+ fileline[0] = '\0';
+ }
+ if (MYSTRLEN(fileline)>0 ? fileline[MYSTRLEN(fileline)-1]!='\n' : 0) {
+ skiptoeol(fontfile);
+ }
+ numsread = sscanf(fileline,"%*c%c %d %*d %d %d %d %d %d",
+ &hardblank,&charheight,&maxlen,&smush,&cmtlines,
+ &ffright2left,&smush2);
+
+ if (maxlen > MAXLEN) {
+ fprintf(stderr,"%s: %s: character is too wide\n",myname,fontname);
+ exit(1);
+ }
+#ifdef TLF_FONTS
+ if ((!toiletfont && strcmp(magicnum,FONTFILEMAGICNUMBER)) ||
+ (toiletfont && strcmp(magicnum,TOILETFILEMAGICNUMBER)) || numsread<5) {
+#else
+ if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) {
+#endif
+ fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontname);
+ exit(1);
+ }
+ for (i=1;i<=cmtlines;i++) {
+ skiptoeol(fontfile);
+ }
+
+ if (numsread<6) {
+ ffright2left = 0;
+ }
+
+ if (numsread<7) { /* if no smush2, decode smush into smush2 */
+ if (smush == 0) smush2 = SM_KERN;
+ else if (smush < 0) smush2 = 0;
+ else smush2 = (smush & 31) | SM_SMUSH;
+ }
+
+ if (charheight<1) {
+ charheight = 1;
+ }
+
+ if (maxlen<1) {
+ maxlen = 1;
+ }
+
+ maxlen += 100; /* Give ourselves some extra room */
+
+ if (smushoverride == SMO_NO)
+ smushmode = smush2;
+ else if (smushoverride == SMO_FORCE)
+ smushmode |= smush2;
+
+ if (right2left<0) {
+ right2left = ffright2left;
+ }
+
+ if (justification<0) {
+ justification = 2*right2left;
+ }
+
+ /* Allocate "missing" character */
+ fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
+ fcharlist->ord = 0;
+ fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
+ fcharlist->next = NULL;
+ for (row=0;row<charheight;row++) {
+ fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr));
+ fcharlist->thechar[row][0] = '\0';
+ }
+ for (theord=' ';theord<='~';theord++) {
+ readfontchar(fontfile,theord);
+ }
+ for (theord=0;theord<=6;theord++) {
+ readfontchar(fontfile,deutsch[theord]);
+ }
+ while (myfgets(fileline,maxlen+1,fontfile)==NULL?0:
+ sscanf(fileline,"%li",&theord)==1) {
+ readfontchar(fontfile,theord);
+ }
+ Zclose(fontfile);
+}
+
+
+/****************************************************************************
+
+ linealloc
+
+ Allocates & clears outputline, inchrline. Sets inchrlinelenlimit.
+ Called near beginning of main().
+
+****************************************************************************/
+
+void linealloc()
+{
+ int row;
+
+ outputline = (outchr**)myalloc(sizeof(outchr*)*charheight);
+ for (row=0;row<charheight;row++) {
+ outputline[row] = (outchr*)myalloc(sizeof(outchr)*(outlinelenlimit+1));
+ }
+ inchrlinelenlimit = outputwidth*4+100;
+ inchrline = (inchr*)myalloc(sizeof(inchr)*(inchrlinelenlimit+1));
+ clearline();
+}
+
+
+/****************************************************************************
+
+ getletter
+
+ Sets currchar to point to the font entry for the given character.
+ Sets currcharwidth to the width of this character.
+
+****************************************************************************/
+
+void getletter(c)
+inchr c;
+{
+ fcharnode *charptr;
+
+ for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=c;
+ charptr=charptr->next) ;
+ if (charptr!=NULL) {
+ currchar = charptr->thechar;
+ }
+ else {
+ for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=0;
+ charptr=charptr->next) ;
+ currchar = charptr->thechar;
+ }
+ previouscharwidth = currcharwidth;
+ currcharwidth = STRLEN(currchar[0]);
+}
+
+
+/****************************************************************************
+
+ smushem
+
+ Given 2 characters, attempts to smush them into 1, according to
+ smushmode. Returns smushed character or '\0' if no smushing can be
+ done.
+
+ smushmode values are sum of following (all values smush blanks):
+ 1: Smush equal chars (not hardblanks)
+ 2: Smush '_' with any char in hierarchy below
+ 4: hierarchy: "|", "/\", "[]", "{}", "()", "<>"
+ Each class in hier. can be replaced by later class.
+ 8: [ + ] -> |, { + } -> |, ( + ) -> |
+ 16: / + \ -> X, > + < -> X (only in that order)
+ 32: hardblank + hardblank -> hardblank
+
+****************************************************************************/
+
+outchr smushem(lch,rch)
+outchr lch,rch;
+{
+ if (lch==' ') return rch;
+ if (rch==' ') return lch;
+
+ if (previouscharwidth<2 || currcharwidth<2) return '\0';
+ /* Disallows overlapping if the previous character */
+ /* or the current character has a width of 1 or zero. */
+
+ if ((smushmode & SM_SMUSH) == 0) return '\0'; /* kerning */
+
+ if ((smushmode & 63) == 0) {
+ /* This is smushing by universal overlapping. */
+ if (lch==' ') return rch;
+ if (rch==' ') return lch;
+ if (lch==hardblank) return rch;
+ if (rch==hardblank) return lch;
+ /* Above four lines ensure overlapping preference to */
+ /* visible characters. */
+ if (right2left==1) return lch;
+ /* Above line ensures that the dominant (foreground) */
+ /* fig-character for overlapping is the latter in the */
+ /* user's text, not necessarily the rightmost character. */
+ return rch;
+ /* Occurs in the absence of above exceptions. */
+ }
+
+ if (smushmode & SM_HARDBLANK) {
+ if (lch==hardblank && rch==hardblank) return lch;
+ }
+
+ if (lch==hardblank || rch==hardblank) return '\0';
+
+ if (smushmode & SM_EQUAL) {
+ if (lch==rch) return lch;
+ }
+
+ if (smushmode & SM_LOWLINE) {
+ if (lch=='_' && strchr("|/\\[]{}()<>",rch)) return rch;
+ if (rch=='_' && strchr("|/\\[]{}()<>",lch)) return lch;
+ }
+
+ if (smushmode & SM_HIERARCHY) {
+ if (lch=='|' && strchr("/\\[]{}()<>",rch)) return rch;
+ if (rch=='|' && strchr("/\\[]{}()<>",lch)) return lch;
+ if (strchr("/\\",lch) && strchr("[]{}()<>",rch)) return rch;
+ if (strchr("/\\",rch) && strchr("[]{}()<>",lch)) return lch;
+ if (strchr("[]",lch) && strchr("{}()<>",rch)) return rch;
+ if (strchr("[]",rch) && strchr("{}()<>",lch)) return lch;
+ if (strchr("{}",lch) && strchr("()<>",rch)) return rch;
+ if (strchr("{}",rch) && strchr("()<>",lch)) return lch;
+ if (strchr("()",lch) && strchr("<>",rch)) return rch;
+ if (strchr("()",rch) && strchr("<>",lch)) return lch;
+ }
+
+ if (smushmode & SM_PAIR) {
+ if (lch=='[' && rch==']') return '|';
+ if (rch=='[' && lch==']') return '|';
+ if (lch=='{' && rch=='}') return '|';
+ if (rch=='{' && lch=='}') return '|';
+ if (lch=='(' && rch==')') return '|';
+ if (rch=='(' && lch==')') return '|';
+ }
+
+ if (smushmode & SM_BIGX) {
+ if (lch=='/' && rch=='\\') return '|';
+ if (rch=='/' && lch=='\\') return 'Y';
+ if (lch=='>' && rch=='<') return 'X';
+ /* Don't want the reverse of above to give 'X'. */
+ }
+
+ return '\0';
+}
+
+
+/****************************************************************************
+
+ smushamt
+
+ Returns the maximum amount that the current character can be smushed
+ into the current line.
+
+****************************************************************************/
+
+int smushamt()
+{
+ int maxsmush,amt;
+ int row,linebd,charbd;
+ outchr ch1,ch2;
+
+ if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) {
+ return 0;
+ }
+ maxsmush = currcharwidth;
+ for (row=0;row<charheight;row++) {
+ if (right2left) {
+ if (maxsmush>STRLEN(outputline[row])) {
+ maxsmush=STRLEN(outputline[row]);
+ }
+ for (charbd=STRLEN(currchar[row]);
+ ch1=currchar[row][charbd],(charbd>0&&(!ch1||ch1==' '));charbd--) ;
+ for (linebd=0;ch2=outputline[row][linebd],ch2==' ';linebd++) ;
+ amt = linebd+currcharwidth-1-charbd;
+ }
+ else {
+ for (linebd=STRLEN(outputline[row]);
+ ch1 = outputline[row][linebd],(linebd>0&&(!ch1||ch1==' '));linebd--) ;
+ for (charbd=0;ch2=currchar[row][charbd],ch2==' ';charbd++) ;
+ amt = charbd+outlinelen-1-linebd;
+ }
+ if (!ch1||ch1==' ') {
+ amt++;
+ }
+ else if (ch2) {
+ if (smushem(ch1,ch2)!='\0') {
+ amt++;
+ }
+ }
+ if (amt<maxsmush) {
+ maxsmush = amt;
+ }
+ }
+ return maxsmush;
+}
+
+
+/****************************************************************************
+
+ addchar
+
+ Attempts to add the given character onto the end of the current line.
+ Returns 1 if this can be done, 0 otherwise.
+
+****************************************************************************/
+
+int addchar(c)
+inchr c;
+{
+ int smushamount,row,k,column;
+ outchr *templine;
+
+ getletter(c);
+ smushamount = smushamt();
+ if (outlinelen+currcharwidth-smushamount>outlinelenlimit
+ ||inchrlinelen+1>inchrlinelenlimit) {
+ return 0;
+ }
+
+ templine = (outchr*)myalloc(sizeof(outchr)*(outlinelenlimit+1));
+ for (row=0;row<charheight;row++) {
+ if (right2left) {
+ STRCPY(templine,currchar[row]);
+ for (k=0;k<smushamount;k++) {
+ templine[currcharwidth-smushamount+k] =
+ smushem(templine[currcharwidth-smushamount+k],outputline[row][k]);
+ }
+ STRCAT(templine,outputline[row]+smushamount);
+ STRCPY(outputline[row],templine);
+ }
+ else {
+ for (k=0;k<smushamount;k++) {
+ column = outlinelen-smushamount+k;
+ if (column < 0) {
+ column = 0;
+ }
+ outputline[row][column] =
+ smushem(outputline[row][column],currchar[row][k]);
+ }
+ STRCAT(outputline[row],currchar[row]+smushamount);
+ }
+ }
+ free(templine);
+ outlinelen = STRLEN(outputline[0]);
+ inchrline[inchrlinelen++] = c;
+ return 1;
+}
+
+
+/****************************************************************************
+
+ putstring
+
+ Prints out the given null-terminated string, substituting blanks
+ for hardblanks. If outputwidth is 1, prints the entire string;
+ otherwise prints at most outputwidth-1 characters. Prints a newline
+ at the end of the string. The string is left-justified, centered or
+ right-justified (taking outputwidth as the screen width) if
+ justification is 0, 1 or 2, respectively.
+
+****************************************************************************/
+
+void putstring(string)
+outchr *string;
+{
+ int i,len;
+ char c[10];
+#ifdef TLF_FONTS
+ size_t size;
+ wchar_t wc[2];
+#endif
+
+ len = STRLEN(string);
+ if (outputwidth>1) {
+ if (len>outputwidth-1) {
+ len = outputwidth-1;
+ }
+ if (justification>0) {
+ for (i=1;(3-justification)*i+len+justification-2<outputwidth;i++) {
+ putchar(' ');
+ }
+ }
+ }
+ for (i=0;i<len;i++) {
+#ifdef TLF_FONTS
+ wc[0] = string[i];
+ wc[1] = 0;
+ size = wchar_to_utf8(wc,1,c,10,0);
+ if(size==1) {
+ if(c[0]==hardblank) {
+ c[0] = ' ';
+ }
+ }
+ c[size] = 0;
+ printf("%s",c);
+#else
+ putchar(string[i]==hardblank?' ':string[i]);
+#endif
+ }
+ putchar('\n');
+}
+
+
+/****************************************************************************
+
+ printline
+
+ Prints outputline using putstring, then clears the current line.
+
+****************************************************************************/
+
+void printline()
+{
+ int i;
+
+ for (i=0;i<charheight;i++) {
+ putstring(outputline[i]);
+ }
+ clearline();
+}
+
+
+/****************************************************************************
+
+ splitline
+
+ Splits inchrline at the last word break (bunch of consecutive blanks).
+ Makes a new line out of the first part and prints it using
+ printline. Makes a new line out of the second part and returns.
+
+****************************************************************************/
+
+void splitline()
+{
+ int i,gotspace,lastspace,len1,len2;
+ inchr *part1,*part2;
+
+ part1 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
+ part2 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
+ gotspace = 0;
+ lastspace = inchrlinelen-1;
+ for (i=inchrlinelen-1;i>=0;i--) {
+ if (!gotspace && inchrline[i]==' ') {
+ gotspace = 1;
+ lastspace = i;
+ }
+ if (gotspace && inchrline[i]!=' ') {
+ break;
+ }
+ }
+ len1 = i+1;
+ len2 = inchrlinelen-lastspace-1;
+ for (i=0;i<len1;i++) {
+ part1[i] = inchrline[i];
+ }
+ for (i=0;i<len2;i++) {
+ part2[i] = inchrline[lastspace+1+i];
+ }
+ clearline();
+ for (i=0;i<len1;i++) {
+ addchar(part1[i]);
+ }
+ printline();
+ for (i=0;i<len2;i++) {
+ addchar(part2[i]);
+ }
+ free(part1);
+ free(part2);
+}
+
+
+/****************************************************************************
+
+ handlemapping
+
+ Given an input character (type inchr), executes re-mapping commands
+ read from control files. Returns re-mapped character (inchr).
+
+****************************************************************************/
+
+inchr handlemapping(c)
+inchr c;
+{
+ comnode *cmptr;
+
+ cmptr=commandlist;
+ while (cmptr!=NULL) {
+ if (cmptr->thecommand ?
+ (c >= cmptr->rangelo && c <= cmptr->rangehi) : 0) {
+ c += cmptr->offset;
+ while(cmptr!=NULL ? cmptr->thecommand : 0) {
+ cmptr=cmptr->next;
+ }
+ }
+ else {
+ cmptr=cmptr->next;
+ }
+ }
+ return c;
+}
+
+/****************************************************************************
+
+ Agetchar
+
+ Replacement to getchar().
+ Acts exactly like getchar if -A is NOT specified,
+ else obtains input from All remaining command line words.
+
+****************************************************************************/
+
+int Agetchar()
+{
+ extern int optind; /* current argv[] element under study */
+ static int AgetMode = 0; /* >= 0 for displacement into argv[n], <0 EOF */
+ char *arg; /* pointer to active character */
+ int c; /* current character */
+
+ if ( ! cmdinput ) /* is -A active? */
+ return( getchar() ); /* no: return stdin character */
+
+ if ( AgetMode < 0 || optind >= Myargc ) /* EOF is sticky: */
+ return( EOF ); /* **ensure it now and forever more */
+
+ /* find next character */
+ arg = Myargv[optind]; /* pointer to active arg */
+ c = arg[AgetMode++]&0xFF; /* get appropriate char of arg */
+
+ if ( ! c ) /* at '\0' that terminates word? */
+ { /* at end of word: return ' ' if normal word, '\n' if empty */
+ c = ' '; /* suppose normal word and return blank */
+ if ( AgetMode == 1 ) /* if ran out in very 1st char, force \n */
+ c = '\n'; /* (allows "hello '' world" to do \n at '') */
+ AgetMode = 0; /* return to char 0 in NEXT word */
+ if ( ++optind >= Myargc ) /* run up word count and check if at "EOF" */
+ { /* just ran out of arguments */
+ c = EOF; /* return EOF */
+ AgetMode = -1; /* ensure all future returns return EOF */
+ }
+ }
+
+ return( c ); /* return appropriate character */
+
+} /* end: Agetchar() */
+
+
+/****************************************************************************
+
+ iso2022
+
+ Called by getinchr. Interprets ISO 2022 sequences
+
+******************************************************************************/
+
+inchr iso2022()
+{
+ inchr ch;
+ inchr ch2;
+ int save_gl;
+ int save_gr;
+
+ ch = Agetchar();
+ if (ch == EOF) return ch;
+ if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */
+ if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */
+ switch (ch) {
+ case 14: /* invoke G1 into GL */
+ gl = 1;
+ return iso2022();
+ case 15: /* invoke G0 into GL */
+ gl = 0;
+ return iso2022();
+ case 142: case 'N' + 0x100: /* invoke G2 into GL for next char */
+ save_gl = gl; save_gr = gr;
+ gl = gr = 2;
+ ch = iso2022();
+ gl = save_gl; gr = save_gr;
+ return ch;
+ case 143: case 'O' + 0x100: /* invoke G3 into GL for next char */
+ save_gl = gl; save_gr = gr;
+ gl = gr = 3;
+ ch = iso2022();
+ gl = save_gl; gr = save_gr;
+ return ch;
+ case 'n' + 0x100: /* invoke G2 into GL */
+ gl = 2;
+ return iso2022();
+ case 'o' + 0x100: /* invoke G3 into GL */
+ gl = 3;
+ return iso2022();
+ case '~' + 0x100: /* invoke G1 into GR */
+ gr = 1;
+ return iso2022();
+ case '}' + 0x100: /* invoke G2 into GR */
+ gr = 2;
+ return iso2022();
+ case '|' + 0x100: /* invoke G3 into GR */
+ gr = 3;
+ return iso2022();
+ case '(' + 0x100: /* set G0 to 94-char set */
+ ch = Agetchar();
+ if (ch == 'B') ch = 0; /* ASCII */
+ gn[0] = ch << 16;
+ gndbl[0] = 0;
+ return iso2022();
+ case ')' + 0x100: /* set G1 to 94-char set */
+ ch = Agetchar();
+ if (ch == 'B') ch = 0;
+ gn[1] = ch << 16;
+ gndbl[1] = 0;
+ return iso2022();
+ case '*' + 0x100: /* set G2 to 94-char set */
+ ch = Agetchar();
+ if (ch == 'B') ch = 0;
+ gn[2] = ch << 16;
+ gndbl[2] = 0;
+ return iso2022();
+ case '+' + 0x100: /* set G3 to 94-char set */
+ ch = Agetchar();
+ if (ch == 'B') ch = 0;
+ gn[3] = ch << 16;
+ gndbl[3] = 0;
+ return iso2022();
+ case '-' + 0x100: /* set G1 to 96-char set */
+ ch = Agetchar();
+ if (ch == 'A') ch = 0; /* Latin-1 top half */
+ gn[1] = (ch << 16) | 0x80;
+ gndbl[1] = 0;
+ return iso2022();
+ case '.' + 0x100: /* set G2 to 96-char set */
+ ch = Agetchar();
+ if (ch == 'A') ch = 0;
+ gn[2] = (ch << 16) | 0x80;
+ gndbl[2] = 0;
+ return iso2022();
+ case '/' + 0x100: /* set G3 to 96-char set */
+ ch = Agetchar();
+ if (ch == 'A') ch = 0;
+ gn[3] = (ch << 16) | 0x80;
+ gndbl[3] = 0;
+ return iso2022();
+ case '(' + 0x200: /* set G0 to 94 x 94 char set */
+ ch = Agetchar();
+ gn[0] = ch << 16;
+ gndbl[0] = 1;
+ return iso2022();
+ case ')' + 0x200: /* set G1 to 94 x 94 char set */
+ ch = Agetchar();
+ gn[1] = ch << 16;
+ gndbl[1] = 1;
+ return iso2022();
+ case '*' + 0x200: /* set G2 to 94 x 94 char set */
+ ch = Agetchar();
+ gn[2] = ch << 16;
+ gndbl[2] = 1;
+ return iso2022();
+ case '+' + 0x200: /* set G3 to 94 x 94 char set */
+ ch = Agetchar();
+ gn[3] = ch << 16;
+ gndbl[3] = 1;
+ return iso2022();
+ default:
+ if (ch & 0x200) { /* set G0 to 94 x 94 char set (deprecated) */
+ gn[0] = (ch & ~0x200) << 16;
+ gndbl[0] = 1;
+ return iso2022();
+ }
+ }
+
+ if (ch >= 0x21 && ch <= 0x7E) { /* process GL */
+ if (gndbl[gl]) {
+ ch2 = Agetchar();
+ return gn[gl] | (ch << 8) | ch2;
+ }
+ else return gn[gl] | ch;
+ }
+ else if (ch >= 0xA0 && ch <= 0xFF) { /* process GR */
+ if (gndbl[gr]) {
+ ch2 = Agetchar();
+ return gn[gr] | (ch << 8) | ch2;
+ }
+ else return gn[gr] | (ch & ~0x80);
+ }
+ else return ch;
+ }
+
+/****************************************************************************
+
+ ungetinchr
+
+ Called by main. Pushes back an "inchr" to be read by getinchr
+ on the next call.
+
+******************************************************************************/
+inchr getinchr_buffer;
+int getinchr_flag;
+
+inchr ungetinchr(c)
+inchr c;
+{
+ getinchr_buffer = c;
+ getinchr_flag = 1;
+ return c;
+}
+
+/*****************************************************************************
+
+ getinchr
+
+ Called by main. Processes multibyte characters. Invokes Agetchar.
+ If multibyte = 0, ISO 2022 mode (see iso2022 routine).
+ If multibyte = 1, double-byte mode (0x00-0x7f bytes are characters,
+ 0x80-0xFF bytes are first byte of a double-byte character).
+ If multibyte = 2, Unicode UTF-8 mode (0x00-0x7F bytes are characters,
+ 0x80-0xBF bytes are nonfirst byte of a multibyte character,
+ 0xC0-0xFD bytes are first byte of a multibyte character,
+ 0xFE-0xFF bytes are errors (all errors return code 0x0080)).
+ If multibyte = 3, HZ mode ("~{" starts double-byte mode, "}~" ends it,
+ "~~" is a tilde, "~x" for all other x is ignored).
+ If multibyte = 4, Shift-JIS mode (0x80-0x9F and 0xE0-0xEF are first byte
+ of a double-byte character, all other bytes are characters).
+
+
+*****************************************************************************/
+
+inchr getinchr()
+{
+ int ch, ch2, ch3, ch4, ch5, ch6;
+
+ if (getinchr_flag) {
+ getinchr_flag = 0;
+ return getinchr_buffer;
+ }
+
+ switch(multibyte) {
+ case 0: /* single-byte */
+ return iso2022();
+ case 1: /* DBCS */
+ ch = Agetchar();
+ if ((ch >= 0x80 && ch <= 0x9F) ||
+ (ch >= 0xE0 && ch <= 0xEF)) {
+ ch = (ch << 8) + Agetchar();
+ }
+ return ch;
+ case 2: /* UTF-8 */
+ ch = Agetchar();
+ if (ch < 0x80) return ch; /* handles EOF, too */
+ if (ch < 0xC0 || ch > 0xFD)
+ return 0x0080; /* illegal first character */
+ ch2 = Agetchar() & 0x3F;
+ if (ch < 0xE0) return ((ch & 0x1F) << 6) + ch2;
+ ch3 = Agetchar() & 0x3F;
+ if (ch < 0xF0)
+ return ((ch & 0x0F) << 12) + (ch2 << 6) + ch3;
+ ch4 = Agetchar() & 0x3F;
+ if (ch < 0xF8)
+ return ((ch & 0x07) << 18) + (ch2 << 12) + (ch3 << 6) + ch4;
+ ch5 = Agetchar() & 0x3F;
+ if (ch < 0xFC)
+ return ((ch & 0x03) << 24) + (ch2 << 18) + (ch3 << 12) +
+ (ch4 << 6) + ch5;
+ ch6 = Agetchar() & 0x3F;
+ return ((ch & 0x01) << 30) + (ch2 << 24) + (ch3 << 18) +
+ (ch4 << 12) + (ch5 << 6) + ch6;
+ case 3: /* HZ */
+ ch = Agetchar();
+ if (ch == EOF) return ch;
+ if (hzmode) {
+ ch = (ch << 8) + Agetchar();
+ if (ch == ('}' << 8) + '~') {
+ hzmode = 0;
+ return getinchr();
+ }
+ return ch;
+ }
+ else if (ch == '~') {
+ ch = Agetchar();
+ if (ch == '{') {
+ hzmode = 1;
+ return getinchr();
+ }
+ else if (ch == '~') {
+ return ch;
+ }
+ else {
+ return getinchr();
+ }
+ }
+ else return ch;
+ case 4: /* Shift-JIS */
+ ch = Agetchar();
+ if ((ch >= 0x80 && ch <= 0x9F) ||
+ (ch >= 0xE0 && ch <= 0xEF)) {
+ ch = (ch << 8) + Agetchar();
+ }
+ return ch;
+ default:
+ return 0x80;
+ }
+ }
+
+/****************************************************************************
+
+ main
+
+ The main program, of course.
+ Reads characters 1 by 1 from stdin, and makes lines out of them using
+ addchar. Handles line breaking, (which accounts for most of the
+ complexity in this function).
+
+****************************************************************************/
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+ inchr c,c2;
+ int i;
+ int last_was_eol_flag;
+/*---------------------------------------------------------------------------
+ wordbreakmode:
+ -1: /^$/ and blanks are to be absorbed (when line break was forced
+ by a blank or character larger than outlinelenlimit)
+ 0: /^ *$/ and blanks are not to be absorbed
+ 1: /[^ ]$/ no word break yet
+ 2: /[^ ] *$/
+ 3: /[^ ]$/ had a word break
+---------------------------------------------------------------------------*/
+ int wordbreakmode;
+ int char_not_added;
+
+ Myargc = argc;
+ Myargv = argv;
+ getparams();
+ readcontrolfiles();
+ readfont();
+ linealloc();
+
+ wordbreakmode = 0;
+ last_was_eol_flag = 0;
+
+#ifdef TLF_FONTS
+ toiletfont = 0;
+#endif
+
+ while ((c = getinchr())!=EOF) {
+
+ if (c=='\n'&&paragraphflag&&!last_was_eol_flag) {
+ ungetinchr(c2 = getinchr());
+ c = ((isascii(c2)&&isspace(c2))?'\n':' ');
+ }
+ last_was_eol_flag = (isascii(c)&&isspace(c)&&c!='\t'&&c!=' ');
+
+ if (deutschflag) {
+ if (c>='[' && c<=']') {
+ c = deutsch[c-'['];
+ }
+ else if (c >='{' && c <= '~') {
+ c = deutsch[c-'{'+3];
+ }
+ }
+
+ c = handlemapping(c);
+
+ if (isascii(c)&&isspace(c)) {
+ c = (c=='\t'||c==' ') ? ' ' : '\n';
+ }
+
+ if ((c>'\0' && c<' ' && c!='\n') || c==127) continue;
+
+/*
+ Note: The following code is complex and thoroughly tested.
+ Be careful when modifying!
+*/
+
+ do {
+ char_not_added = 0;
+
+ if (wordbreakmode== -1) {
+ if (c==' ') {
+ break;
+ }
+ else if (c=='\n') {
+ wordbreakmode = 0;
+ break;
+ }
+ wordbreakmode = 0;
+ }
+
+ if (c=='\n') {
+ printline();
+ wordbreakmode = 0;
+ }
+
+ else if (addchar(c)) {
+ if (c!=' ') {
+ wordbreakmode = (wordbreakmode>=2)?3:1;
+ }
+ else {
+ wordbreakmode = (wordbreakmode>0)?2:0;
+ }
+ }
+
+ else if (outlinelen==0) {
+ for (i=0;i<charheight;i++) {
+ if (right2left && outputwidth>1) {
+ putstring(currchar[i]+STRLEN(currchar[i])-outlinelenlimit);
+ }
+ else {
+ putstring(currchar[i]);
+ }
+ }
+ wordbreakmode = -1;
+ }
+
+ else if (c==' ') {
+ if (wordbreakmode==2) {
+ splitline();
+ }
+ else {
+ printline();
+ }
+ wordbreakmode = -1;
+ }
+
+ else {
+ if (wordbreakmode>=2) {
+ splitline();
+ }
+ else {
+ printline();
+ }
+ wordbreakmode = (wordbreakmode==3)?1:0;
+ char_not_added = 1;
+ }
+
+ } while (char_not_added);
+ }
+
+ if (outlinelen!=0) {
+ printline();
+ }
+ return 0;
+}
diff --git a/externals/figlet/figlist b/externals/figlet/figlist
new file mode 100755
index 0000000000..6dea3b2cf8
--- /dev/null
+++ b/externals/figlet/figlist
@@ -0,0 +1,64 @@
+#!/bin/sh -
+# figlist by Glenn Chappell <ggc@uiuc.edu>
+# figlet release 2.1.1 -- 25 Aug 1994
+#
+# Lists all fonts and control files in figlet's default font directory.
+# Replaces "figlet -F", which was removed from figlet version 2.1.
+#
+# Usage: figlist [ -d directory ]
+
+DIR=`dirname $0`
+FIGLET=$DIR/figlet
+
+# Get figlet version
+FIGLETVERSION=`$FIGLET -I1 2>/dev/null`
+if [ -z "$FIGLETVERSION" ]; then
+ FIGLETVERSION=20000
+fi
+
+USAGE="Usage: `basename $0` [ -d directory ]"
+
+if [ "$1" = "-d" ]; then
+ FONTDIROPT="-d $2"
+ if [ $# -ne 2 ]; then
+ echo "$USAGE"
+ exit 1
+ fi
+else
+ FONTDIROPT=""
+ if [ $# -ne 0 ]; then
+ echo "$USAGE"
+ exit 1
+ fi
+fi
+
+if [ "$FIGLETVERSION" -lt 20100 ]; then
+ # figlet 2.0
+ $FIGLET $FONTDIROPT -F
+ exit
+fi
+
+# From here on we may assume figlet 2.1 or later
+
+FONTDIR=`$FIGLET $FONTDIROPT -I2`
+FONT=`$FIGLET -I3`
+echo "Default font: $FONT"
+echo "Font directory: $FONTDIR"
+
+if [ -d "$FONTDIR" ] && [ -r "$FONTDIR" ]; then
+ cd "$FONTDIR"
+ if ls *.flf >/dev/null 2>&1 ; then
+ echo "Figlet fonts in this directory:"
+ ls *.flf 2>/dev/null | sed s/\.flf$//
+ else
+ echo 'No figlet fonts in this directory'
+ fi
+ if ls *.flc >/dev/null 2>&1 ; then
+ echo "Figlet control files in this directory:"
+ ls *.flc 2>/dev/null | sed s/\.flc$//
+ else
+ echo 'No figlet control files in this directory'
+ fi
+else
+ echo 'Unable to open directory'
+fi
diff --git a/externals/figlet/figlist.6 b/externals/figlet/figlist.6
new file mode 100644
index 0000000000..c8b7cae5c9
--- /dev/null
+++ b/externals/figlet/figlist.6
@@ -0,0 +1,52 @@
+.\" figlist by Glenn Chappell <ggc@uiuc.edu>
+.\" figlet release 2.1.1 -- 25 Aug 1994
+.\"
+.\" Lists all fonts and control files in figlet's default font directory.
+.\" Replaces "figlet -F", which was removed from figlet version 2.1.
+.\"
+.\" Usage: figlist [ -d directory ]
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH FIGLIST 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+figlist \- lists figlet fonts and control files
+
+.SH SYNOPSIS
+.B figlist
+[
+.B \-d
+.I directory
+]
+
+.SH DESCRIPTION
+Lists all fonts and control files in figlet's default font directory.
+Replaces "figlet \-F", which was removed from figlet version 2.1.
+
+.SH EXAMPLES
+To use
+.B figlist
+with its default settings, simply type
+.RS
+
+.B example% figlist
+
+.RE
+
+To list all the font and control files in /usr/share/fonts/figlet
+.RS
+
+.B example% figlist \-d /usr/share/fonts/figlet
+
+.RE
+
+.SH AUTHORS
+figlist was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR chkfont (6),
+.BR showfigfonts (6)
diff --git a/externals/figlet/figmagic b/externals/figlet/figmagic
new file mode 100644
index 0000000000..5e9a01a0de
--- /dev/null
+++ b/externals/figlet/figmagic
@@ -0,0 +1,6 @@
+# Append this file to your /etc/magic or /usr/share/misc/magic file
+# to enable the ``file'' command to report on FIGlet fonts and controlfiles.
+0 string flf FIGlet font
+>3 string >2a version %-2.2s
+0 string flc FIGlet controlfile
+>3 string >2a version %-2.2s
diff --git a/externals/figlet/fonts/646-ca.flc b/externals/figlet/fonts/646-ca.flc
new file mode 100644
index 0000000000..b5f3071183
--- /dev/null
+++ b/externals/figlet/fonts/646-ca.flc
@@ -0,0 +1,157 @@
+#
+# Name: CSA_Z243.4-1985-1 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# CSA_Z243.4-1985-1 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the CSA_Z243.4-1985-1 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in CSA_Z243.4-1985-1 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-121
+# &g0esc x2877 &g1esc x2977 &g2esc x2a77 &g3esc x2b77
+# &alias ISO646-CA
+# &alias csa7-1
+# &alias ca
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x5D 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x5E 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x5F 0x005F # LOW LINE
+0x60 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0x7E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-ca2.flc b/externals/figlet/fonts/646-ca2.flc
new file mode 100644
index 0000000000..a7be02f68c
--- /dev/null
+++ b/externals/figlet/fonts/646-ca2.flc
@@ -0,0 +1,156 @@
+#
+# Name: CSA_Z243.4-1985-2 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# CSA_Z243.4-1985-2 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the CSA_Z243.4-1985-2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in CSA_Z243.4-1985-2 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-122
+# &alias ISO646-CA2
+# &g0esc x2878 &g1esc x2978 &g2esc x2a78 &g3esc x2b78
+# &alias csa7-2
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x5D 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x5E 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0x5F 0x005F # LOW LINE
+0x60 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0x7E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-cn.flc b/externals/figlet/fonts/646-cn.flc
new file mode 100644
index 0000000000..fc42581b87
--- /dev/null
+++ b/externals/figlet/fonts/646-cn.flc
@@ -0,0 +1,156 @@
+#
+# Name: GB_1988-80 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# GB_1988-80 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the GB_1988-80 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in GB_1988-80 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-57
+# &g0esc x2854 &g1esc x2954 &g2esc x2a54 &g3esc x2b54
+# &alias cn
+# &alias ISO646-CN
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A5 # YEN SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-cu.flc b/externals/figlet/fonts/646-cu.flc
new file mode 100644
index 0000000000..a9cd5fdb03
--- /dev/null
+++ b/externals/figlet/fonts/646-cu.flc
@@ -0,0 +1,156 @@
+#
+# Name: NC_NC00-10:81 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# NC_NC00-10:81 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the NC_NC00-10:81 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in NC_NC00-10:81 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias cuba
+# &alias iso-ir-151
+# &alias ISO646-CU
+# &g0esc x282141 &g1esc x292141 &g2esc x2a2141 &g3esc x2b2141
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00A1 # INVERTED EXCLAMATION MARK
+0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x00BF # INVERTED QUESTION MARK
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00B4 # ACUTE ACCENT
+0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0x7D 0x005B # LEFT SQUARE BRACKET
+0x7E 0x00A8 # DIAERESIS
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-de.flc b/externals/figlet/fonts/646-de.flc
new file mode 100644
index 0000000000..716a42ffbf
--- /dev/null
+++ b/externals/figlet/fonts/646-de.flc
@@ -0,0 +1,156 @@
+#
+# Name: DIN_66003 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# DIN_66003 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the DIN_66003 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in DIN_66003 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-21
+# &g0esc x284b &g1esc x294b &g2esc x2a4b &g3esc x2b4b
+# &alias de
+# &alias ISO646-DE
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00A7 # SECTION SIGN
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0x7D 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0x7E 0x00DF # LATIN SMALL LETTER SHARP S (German)
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-dk.flc b/externals/figlet/fonts/646-dk.flc
new file mode 100644
index 0000000000..3d9ddae013
--- /dev/null
+++ b/externals/figlet/fonts/646-dk.flc
@@ -0,0 +1,155 @@
+#
+# Name: DS_2089 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# DS_2089 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the DS_2089 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in DS_2089 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: Danish Standard, DS 2089, February 1974
+# &alias DS2089
+# &alias ISO646-DK
+# &alias dk
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C6 # LATIN CAPITAL LETTER AE
+0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E6 # LATIN SMALL LETTER AE
+0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-es.flc b/externals/figlet/fonts/646-es.flc
new file mode 100644
index 0000000000..b996d786b3
--- /dev/null
+++ b/externals/figlet/fonts/646-es.flc
@@ -0,0 +1,155 @@
+#
+# Name: ES to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# ES characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ES code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ES order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-17
+# &alias ISO646-ES
+# &g0esc x285a &g1esc x295a &g2esc x2a5a &g3esc x2b5a
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00A3 # POUND SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00A7 # SECTION SIGN
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00A1 # INVERTED EXCLAMATION MARK
+0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0x5D 0x00BF # INVERTED QUESTION MARK
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00B0 # DEGREE SIGN
+0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0x7D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-es2.flc b/externals/figlet/fonts/646-es2.flc
new file mode 100644
index 0000000000..1f282ceb78
--- /dev/null
+++ b/externals/figlet/fonts/646-es2.flc
@@ -0,0 +1,155 @@
+#
+# Name: ES2 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# ES2 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ES2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ES2 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-85
+# &alias ISO646-ES2
+# &g0esc x2868 &g1esc x2968 &g2esc x2a68 &g3esc x2b68
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x2219 # BULLET OPERATOR
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00A1 # INVERTED EXCLAMATION MARK
+0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0x5D 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0x5E 0x00BF # INVERTED QUESTION MARK
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00B4 # ACUTE ACCENT
+0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0x7D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x7E 0x00A8 # DIAERESIS
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-fr.flc b/externals/figlet/fonts/646-fr.flc
new file mode 100644
index 0000000000..225b2fb8e6
--- /dev/null
+++ b/externals/figlet/fonts/646-fr.flc
@@ -0,0 +1,156 @@
+#
+# Name: NF_Z_62-010 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# NF_Z_62-010 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the NF_Z_62-010 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in NF_Z_62-010 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-69
+# &alias ISO646-FR
+# &g0esc x2866 &g1esc x2966 &g2esc x2a66 &g3esc x2b66
+# &alias fr
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00A3 # POUND SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00B0 # DEGREE SIGN
+0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x5D 0x00A7 # SECTION SIGN
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x00B5 # MICRO SIGN
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0x7E 0x00A8 # DIAERESIS
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-gb.flc b/externals/figlet/fonts/646-gb.flc
new file mode 100644
index 0000000000..4e9d648c9b
--- /dev/null
+++ b/externals/figlet/fonts/646-gb.flc
@@ -0,0 +1,157 @@
+#
+# Name: BS_4730 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# BS_4730 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the BS_4730 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in BS_4730 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-4
+# &alias ISO646-GB
+# &g0esc x2841 &g1esc x2941 &g2esc x2a41 &g3esc x2b41
+# &alias gb
+# &alias uk
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00A3 # POUND SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-hu.flc b/externals/figlet/fonts/646-hu.flc
new file mode 100644
index 0000000000..9ad58c31e7
--- /dev/null
+++ b/externals/figlet/fonts/646-hu.flc
@@ -0,0 +1,156 @@
+#
+# Name: MSZ_7795.3 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# MSZ_7795.3 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the MSZ_7795.3 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in MSZ_7795.3 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-86
+# &alias ISO646-HU
+# &g0esc x2869 &g1esc x2969 &g2esc x2a69 &g3esc x2b69
+# &alias hu
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0x7D 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0x7E 0x02DD # DOUBLE ACUTE ACCENT
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-irv.flc b/externals/figlet/fonts/646-irv.flc
new file mode 100644
index 0000000000..caf629229c
--- /dev/null
+++ b/externals/figlet/fonts/646-irv.flc
@@ -0,0 +1,155 @@
+#
+# Name: ISO_646.irv:1983 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# ISO_646.irv:1983 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO_646.irv:1983 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO_646.irv:1983 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-2
+# &alias irv
+# &g0esc x2840 &g1esc x2940 &g2esc x2a40 &g3esc x2b40
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-it.flc b/externals/figlet/fonts/646-it.flc
new file mode 100644
index 0000000000..657125bd85
--- /dev/null
+++ b/externals/figlet/fonts/646-it.flc
@@ -0,0 +1,155 @@
+#
+# Name: IT to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# IT characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the IT code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in IT order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-15
+# &alias ISO646-IT
+# &g0esc x2859 &g1esc x2959 &g2esc x2a59 &g3esc x2b59
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00A3 # POUND SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00A7 # SECTION SIGN
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00B0 # DEGREE SIGN
+0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x5D 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0x7C 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
+0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0x7E 0x00EC # LATIN SMALL LETTER I WITH GRAVE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-jp.flc b/externals/figlet/fonts/646-jp.flc
new file mode 100644
index 0000000000..a3bc3513d6
--- /dev/null
+++ b/externals/figlet/fonts/646-jp.flc
@@ -0,0 +1,156 @@
+#
+# Name: JIS_C6220-1969-ro to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# JIS_C6220-1969-ro characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the JIS_C6220-1969-ro code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in JIS_C6220-1969-ro order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-14
+# &g0esc x284a &g1esc x294a &g2esc x2a4a &g3esc x2b4a
+# &alias jp
+# &alias ISO646-JP
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x00A5 # YEN SIGN
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-kr.flc b/externals/figlet/fonts/646-kr.flc
new file mode 100644
index 0000000000..6966895e56
--- /dev/null
+++ b/externals/figlet/fonts/646-kr.flc
@@ -0,0 +1,152 @@
+#
+# Name: KSC5636 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# KSC5636 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the KSC5636 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in KSC5636 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &alias ISO646-KR
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x20A9 # WON SIGN
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-no.flc b/externals/figlet/fonts/646-no.flc
new file mode 100644
index 0000000000..3f4776656f
--- /dev/null
+++ b/externals/figlet/fonts/646-no.flc
@@ -0,0 +1,156 @@
+#
+# Name: NS_4551-1 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# NS_4551-1 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the NS_4551-1 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in NS_4551-1 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-60
+# &alias ISO646-NO
+# &g0esc x2860 &g1esc x2960 &g2esc x2a60 &g3esc x2b60
+# &alias no
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C6 # LATIN CAPITAL LETTER AE
+0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E6 # LATIN SMALL LETTER AE
+0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-no2.flc b/externals/figlet/fonts/646-no2.flc
new file mode 100644
index 0000000000..c5ca075a2c
--- /dev/null
+++ b/externals/figlet/fonts/646-no2.flc
@@ -0,0 +1,156 @@
+#
+# Name: NS_4551-2 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# NS_4551-2 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the NS_4551-2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in NS_4551-2 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias ISO646-NO2
+# &alias iso-ir-61
+# &g0esc x2861 &g1esc x2961 &g2esc x2a61 &g3esc x2b61
+# &alias no2
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00B6 # PILCROW SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C6 # LATIN CAPITAL LETTER AE
+0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E6 # LATIN SMALL LETTER AE
+0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x007C # VERTICAL LINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-pt.flc b/externals/figlet/fonts/646-pt.flc
new file mode 100644
index 0000000000..37571886c9
--- /dev/null
+++ b/externals/figlet/fonts/646-pt.flc
@@ -0,0 +1,155 @@
+#
+# Name: PT to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# PT characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the PT code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in PT order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-16
+# &alias ISO646-PT
+# &g0esc x284c &g1esc x294c &g2esc x2a4c &g3esc x2b4c
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00A7 # SECTION SIGN
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0x5C 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0x5D 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0x7C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x7D 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0x7E 0x00B0 # DEGREE SIGN
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-pt2.flc b/externals/figlet/fonts/646-pt2.flc
new file mode 100644
index 0000000000..8a00e61ec8
--- /dev/null
+++ b/externals/figlet/fonts/646-pt2.flc
@@ -0,0 +1,155 @@
+#
+# Name: PT2 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# PT2 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the PT2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in PT2 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-84
+# &alias ISO646-PT2
+# &g0esc x2867 &g1esc x2967 &g2esc x2a67 &g3esc x2b67
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00B4 # ACUTE ACCENT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0x5C 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0x5D 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0x7C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x7D 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-se.flc b/externals/figlet/fonts/646-se.flc
new file mode 100644
index 0000000000..424e886a01
--- /dev/null
+++ b/externals/figlet/fonts/646-se.flc
@@ -0,0 +1,158 @@
+#
+# Name: SEN_850200_B to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# SEN_850200_B characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the SEN_850200_B code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in SEN_850200_B order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-10
+# &alias FI
+# &alias ISO646-FI
+# &alias ISO646-SE
+# &alias se
+# &g0esc x2847 &g1esc x2947 &g2esc x2a47 &g3esc x2b47
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-se2.flc b/externals/figlet/fonts/646-se2.flc
new file mode 100644
index 0000000000..38c86cd37c
--- /dev/null
+++ b/externals/figlet/fonts/646-se2.flc
@@ -0,0 +1,156 @@
+#
+# Name: SEN_850200_C to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# SEN_850200_C characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the SEN_850200_C code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in SEN_850200_C order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-11
+# &alias ISO646-SE2
+# &g0esc x2848 &g1esc x2948 &g2esc x2a48 &g3esc x2b48
+# &alias se2
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5F 0x005F # LOW LINE
+0x60 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-yu.flc b/externals/figlet/fonts/646-yu.flc
new file mode 100644
index 0000000000..6307a6aff4
--- /dev/null
+++ b/externals/figlet/fonts/646-yu.flc
@@ -0,0 +1,157 @@
+#
+# Name: JUS_I.B1.002 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# JUS_I.B1.002 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the JUS_I.B1.002 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in JUS_I.B1.002 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-141
+# &g0esc x287a &g1esc x297a &g2esc x2a7a &g3esc x2b7a
+# &alias ISO646-YU
+# &alias js
+# &alias yu
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0x5C 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
+0x5D 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
+0x5E 0x010C # LATIN CAPITAL LETTER C WITH CARON
+0x5F 0x005F # LOW LINE
+0x60 0x017E # LATIN SMALL LETTER Z WITH CARON
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x0161 # LATIN SMALL LETTER S WITH CARON
+0x7C 0x0111 # LATIN SMALL LETTER D WITH STROKE
+0x7D 0x0107 # LATIN SMALL LETTER C WITH ACUTE
+0x7E 0x010D # LATIN SMALL LETTER C WITH CARON
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/8859-2.flc b/externals/figlet/fonts/8859-2.flc
new file mode 100644
index 0000000000..e45df25eb8
--- /dev/null
+++ b/externals/figlet/fonts/8859-2.flc
@@ -0,0 +1,303 @@
+#
+# Name: ISO 8859-2:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-2:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-2 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
+0xA2 0x02D8 # BREVE
+0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON
+0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
+0xAB 0x0164 # LATIN CAPITAL LETTER T WITH CARON
+0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
+0xB2 0x02DB # OGONEK
+0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x013E # LATIN SMALL LETTER L WITH CARON
+0xB6 0x015B # LATIN SMALL LETTER S WITH ACUTE
+0xB7 0x02C7 # CARON
+0xB8 0x00B8 # CEDILLA
+0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON
+0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
+0xBB 0x0165 # LATIN SMALL LETTER T WITH CARON
+0xBC 0x017A # LATIN SMALL LETTER Z WITH ACUTE
+0xBD 0x02DD # DOUBLE ACUTE ACCENT
+0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON
+0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+0xC0 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE
+0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
+0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x011A # LATIN CAPITAL LETTER E WITH CARON
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x010E # LATIN CAPITAL LETTER D WITH CARON
+0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
+0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
+0xD2 0x0147 # LATIN CAPITAL LETTER N WITH CARON
+0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xD8 0x0158 # LATIN CAPITAL LETTER R WITH CARON
+0xD9 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+0xDE 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x0155 # LATIN SMALL LETTER R WITH ACUTE
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x013A # LATIN SMALL LETTER L WITH ACUTE
+0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE
+0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x011B # LATIN SMALL LETTER E WITH CARON
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x010F # LATIN SMALL LETTER D WITH CARON
+0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
+0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
+0xF2 0x0148 # LATIN SMALL LETTER N WITH CARON
+0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x00F7 # DIVISION SIGN
+0xF8 0x0159 # LATIN SMALL LETTER R WITH CARON
+0xF9 0x016F # LATIN SMALL LETTER U WITH RING ABOVE
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
+0xFE 0x0163 # LATIN SMALL LETTER T WITH CEDILLA
+0xFF 0x02D9 # DOT ABOVE
diff --git a/externals/figlet/fonts/8859-3.flc b/externals/figlet/fonts/8859-3.flc
new file mode 100644
index 0000000000..9b6ac69dd8
--- /dev/null
+++ b/externals/figlet/fonts/8859-3.flc
@@ -0,0 +1,296 @@
+#
+# Name: ISO/IEC 8859-3:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-3:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-3 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE
+0xA2 0x02D8 # BREVE
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x00A4 # CURRENCY SIGN
+0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
+0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE
+0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0xAD 0x00AD # SOFT HYPHEN
+0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x00B5 # MICRO SIGN
+0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
+0xB7 0x00B7 # MIDDLE DOT
+0xB8 0x00B8 # CEDILLA
+0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I
+0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
+0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE
+0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
+0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE
+0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE
+0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
+0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
+0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
+0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x00F7 # DIVISION SIGN
+0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
+0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE
+0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
+0xFF 0x02D9 # DOT ABOVE
diff --git a/externals/figlet/fonts/8859-4.flc b/externals/figlet/fonts/8859-4.flc
new file mode 100644
index 0000000000..662e698ab2
--- /dev/null
+++ b/externals/figlet/fonts/8859-4.flc
@@ -0,0 +1,303 @@
+#
+# Name: ISO/IEC 8859-4:1998 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-4:1998 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-4 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
+0xA2 0x0138 # LATIN SMALL LETTER KRA
+0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
+0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0xAA 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
+0xAB 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
+0xAC 0x0166 # LATIN CAPITAL LETTER T WITH STROKE
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0xAF 0x00AF # MACRON
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
+0xB2 0x02DB # OGONEK
+0xB3 0x0157 # LATIN SMALL LETTER R WITH CEDILLA
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE
+0xB6 0x013C # LATIN SMALL LETTER L WITH CEDILLA
+0xB7 0x02C7 # CARON
+0xB8 0x00B8 # CEDILLA
+0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON
+0xBA 0x0113 # LATIN SMALL LETTER E WITH MACRON
+0xBB 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
+0xBC 0x0167 # LATIN SMALL LETTER T WITH STROKE
+0xBD 0x014A # LATIN CAPITAL LETTER ENG
+0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON
+0xBF 0x014B # LATIN SMALL LETTER ENG
+0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6 0x00C6 # LATIN CAPITAL LETTER AE
+0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
+0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x012A # LATIN CAPITAL LETTER I WITH MACRON
+0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
+0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
+0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON
+0xD3 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
+0xDE 0x016A # LATIN CAPITAL LETTER U WITH MACRON
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0xE6 0x00E6 # LATIN SMALL LETTER AE
+0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK
+0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x012B # LATIN SMALL LETTER I WITH MACRON
+0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
+0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
+0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON
+0xF3 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x00F7 # DIVISION SIGN
+0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x0169 # LATIN SMALL LETTER U WITH TILDE
+0xFE 0x016B # LATIN SMALL LETTER U WITH MACRON
+0xFF 0x02D9 # DOT ABOVE
diff --git a/externals/figlet/fonts/8859-5.flc b/externals/figlet/fonts/8859-5.flc
new file mode 100644
index 0000000000..a7ed1ce2ab
--- /dev/null
+++ b/externals/figlet/fonts/8859-5.flc
@@ -0,0 +1,303 @@
+#
+# Name: ISO 8859-5:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-5:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-5 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO
+0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE
+0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE
+0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE
+0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI
+0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE
+0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE
+0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE
+0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE
+0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U
+0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE
+0xB0 0x0410 # CYRILLIC CAPITAL LETTER A
+0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE
+0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE
+0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE
+0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE
+0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE
+0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
+0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE
+0xB8 0x0418 # CYRILLIC CAPITAL LETTER I
+0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
+0xBA 0x041A # CYRILLIC CAPITAL LETTER KA
+0xBB 0x041B # CYRILLIC CAPITAL LETTER EL
+0xBC 0x041C # CYRILLIC CAPITAL LETTER EM
+0xBD 0x041D # CYRILLIC CAPITAL LETTER EN
+0xBE 0x041E # CYRILLIC CAPITAL LETTER O
+0xBF 0x041F # CYRILLIC CAPITAL LETTER PE
+0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER
+0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES
+0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE
+0xC3 0x0423 # CYRILLIC CAPITAL LETTER U
+0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF
+0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA
+0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE
+0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE
+0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA
+0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
+0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
+0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU
+0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
+0xCD 0x042D # CYRILLIC CAPITAL LETTER E
+0xCE 0x042E # CYRILLIC CAPITAL LETTER YU
+0xCF 0x042F # CYRILLIC CAPITAL LETTER YA
+0xD0 0x0430 # CYRILLIC SMALL LETTER A
+0xD1 0x0431 # CYRILLIC SMALL LETTER BE
+0xD2 0x0432 # CYRILLIC SMALL LETTER VE
+0xD3 0x0433 # CYRILLIC SMALL LETTER GHE
+0xD4 0x0434 # CYRILLIC SMALL LETTER DE
+0xD5 0x0435 # CYRILLIC SMALL LETTER IE
+0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
+0xD7 0x0437 # CYRILLIC SMALL LETTER ZE
+0xD8 0x0438 # CYRILLIC SMALL LETTER I
+0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I
+0xDA 0x043A # CYRILLIC SMALL LETTER KA
+0xDB 0x043B # CYRILLIC SMALL LETTER EL
+0xDC 0x043C # CYRILLIC SMALL LETTER EM
+0xDD 0x043D # CYRILLIC SMALL LETTER EN
+0xDE 0x043E # CYRILLIC SMALL LETTER O
+0xDF 0x043F # CYRILLIC SMALL LETTER PE
+0xE0 0x0440 # CYRILLIC SMALL LETTER ER
+0xE1 0x0441 # CYRILLIC SMALL LETTER ES
+0xE2 0x0442 # CYRILLIC SMALL LETTER TE
+0xE3 0x0443 # CYRILLIC SMALL LETTER U
+0xE4 0x0444 # CYRILLIC SMALL LETTER EF
+0xE5 0x0445 # CYRILLIC SMALL LETTER HA
+0xE6 0x0446 # CYRILLIC SMALL LETTER TSE
+0xE7 0x0447 # CYRILLIC SMALL LETTER CHE
+0xE8 0x0448 # CYRILLIC SMALL LETTER SHA
+0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA
+0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN
+0xEB 0x044B # CYRILLIC SMALL LETTER YERU
+0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
+0xED 0x044D # CYRILLIC SMALL LETTER E
+0xEE 0x044E # CYRILLIC SMALL LETTER YU
+0xEF 0x044F # CYRILLIC SMALL LETTER YA
+0xF0 0x2116 # NUMERO SIGN
+0xF1 0x0451 # CYRILLIC SMALL LETTER IO
+0xF2 0x0452 # CYRILLIC SMALL LETTER DJE
+0xF3 0x0453 # CYRILLIC SMALL LETTER GJE
+0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
+0xF5 0x0455 # CYRILLIC SMALL LETTER DZE
+0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0xF7 0x0457 # CYRILLIC SMALL LETTER YI
+0xF8 0x0458 # CYRILLIC SMALL LETTER JE
+0xF9 0x0459 # CYRILLIC SMALL LETTER LJE
+0xFA 0x045A # CYRILLIC SMALL LETTER NJE
+0xFB 0x045B # CYRILLIC SMALL LETTER TSHE
+0xFC 0x045C # CYRILLIC SMALL LETTER KJE
+0xFD 0x00A7 # SECTION SIGN
+0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U
+0xFF 0x045F # CYRILLIC SMALL LETTER DZHE
diff --git a/externals/figlet/fonts/8859-7.flc b/externals/figlet/fonts/8859-7.flc
new file mode 100644
index 0000000000..bc46b74719
--- /dev/null
+++ b/externals/figlet/fonts/8859-7.flc
@@ -0,0 +1,308 @@
+#
+# Name: ISO 8859-7:2003 to Unicode
+# Unicode version: 4.0
+# Table version: 2.0
+# Table format: Format A
+# Date: 2003-Nov-12
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO 8859-7:2003 characters map into Unicode.
+#
+# ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928,
+# and ECMA 118. ISO 8859-7:2003 adds two currency signs
+# and one other character not in the earlier standard.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO 8859-7 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO 8859-7 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+# Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7
+# Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7
+#
+# 2.0 version updates 1.0 version by adding mappings for the
+# three newly added characters 0xA4, 0xA5, 0xAA.
+#
+# Updated versions of this file may be found in:
+# <http://www.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact the Unicode Consortium at:
+# <http://www.unicode.org/reporting.html>
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x2018 # LEFT SINGLE QUOTATION MARK
+0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x20AC # EURO SIGN
+0xA5 0x20AF # DRACHMA SIGN
+0xA6 0x00A6 # BROKEN BAR
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x00A9 # COPYRIGHT SIGN
+0xAA 0x037A # GREEK YPOGEGRAMMENI
+0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC 0x00AC # NOT SIGN
+0xAD 0x00AD # SOFT HYPHEN
+0xAF 0x2015 # HORIZONTAL BAR
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x00B1 # PLUS-MINUS SIGN
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB4 0x0384 # GREEK TONOS
+0xB5 0x0385 # GREEK DIALYTIKA TONOS
+0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0xB7 0x00B7 # MIDDLE DOT
+0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS
+0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS
+0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
+0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA
+0xC2 0x0392 # GREEK CAPITAL LETTER BETA
+0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA
+0xC4 0x0394 # GREEK CAPITAL LETTER DELTA
+0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON
+0xC6 0x0396 # GREEK CAPITAL LETTER ZETA
+0xC7 0x0397 # GREEK CAPITAL LETTER ETA
+0xC8 0x0398 # GREEK CAPITAL LETTER THETA
+0xC9 0x0399 # GREEK CAPITAL LETTER IOTA
+0xCA 0x039A # GREEK CAPITAL LETTER KAPPA
+0xCB 0x039B # GREEK CAPITAL LETTER LAMDA
+0xCC 0x039C # GREEK CAPITAL LETTER MU
+0xCD 0x039D # GREEK CAPITAL LETTER NU
+0xCE 0x039E # GREEK CAPITAL LETTER XI
+0xCF 0x039F # GREEK CAPITAL LETTER OMICRON
+0xD0 0x03A0 # GREEK CAPITAL LETTER PI
+0xD1 0x03A1 # GREEK CAPITAL LETTER RHO
+0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA
+0xD4 0x03A4 # GREEK CAPITAL LETTER TAU
+0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON
+0xD6 0x03A6 # GREEK CAPITAL LETTER PHI
+0xD7 0x03A7 # GREEK CAPITAL LETTER CHI
+0xD8 0x03A8 # GREEK CAPITAL LETTER PSI
+0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA
+0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS
+0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS
+0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS
+0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS
+0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+0xE1 0x03B1 # GREEK SMALL LETTER ALPHA
+0xE2 0x03B2 # GREEK SMALL LETTER BETA
+0xE3 0x03B3 # GREEK SMALL LETTER GAMMA
+0xE4 0x03B4 # GREEK SMALL LETTER DELTA
+0xE5 0x03B5 # GREEK SMALL LETTER EPSILON
+0xE6 0x03B6 # GREEK SMALL LETTER ZETA
+0xE7 0x03B7 # GREEK SMALL LETTER ETA
+0xE8 0x03B8 # GREEK SMALL LETTER THETA
+0xE9 0x03B9 # GREEK SMALL LETTER IOTA
+0xEA 0x03BA # GREEK SMALL LETTER KAPPA
+0xEB 0x03BB # GREEK SMALL LETTER LAMDA
+0xEC 0x03BC # GREEK SMALL LETTER MU
+0xED 0x03BD # GREEK SMALL LETTER NU
+0xEE 0x03BE # GREEK SMALL LETTER XI
+0xEF 0x03BF # GREEK SMALL LETTER OMICRON
+0xF0 0x03C0 # GREEK SMALL LETTER PI
+0xF1 0x03C1 # GREEK SMALL LETTER RHO
+0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA
+0xF3 0x03C3 # GREEK SMALL LETTER SIGMA
+0xF4 0x03C4 # GREEK SMALL LETTER TAU
+0xF5 0x03C5 # GREEK SMALL LETTER UPSILON
+0xF6 0x03C6 # GREEK SMALL LETTER PHI
+0xF7 0x03C7 # GREEK SMALL LETTER CHI
+0xF8 0x03C8 # GREEK SMALL LETTER PSI
+0xF9 0x03C9 # GREEK SMALL LETTER OMEGA
+0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS
+0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS
+0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS
diff --git a/externals/figlet/fonts/8859-8.flc b/externals/figlet/fonts/8859-8.flc
new file mode 100644
index 0000000000..bc8da4c7fd
--- /dev/null
+++ b/externals/figlet/fonts/8859-8.flc
@@ -0,0 +1,270 @@
+#
+# Name: ISO/IEC 8859-8:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.1
+# Table format: Format A
+# Date: 2000-Jan-03
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-8:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-8 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+# 1.1 version updates to the published 8859-8:1999, correcting
+# the mapping of 0xAF and adding mappings for LRM and RLM.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA2 0x00A2 # CENT SIGN
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x00A5 # YEN SIGN
+0xA6 0x00A6 # BROKEN BAR
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x00A9 # COPYRIGHT SIGN
+0xAA 0x00D7 # MULTIPLICATION SIGN
+0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC 0x00AC # NOT SIGN
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x00AE # REGISTERED SIGN
+0xAF 0x00AF # MACRON
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x00B1 # PLUS-MINUS SIGN
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x00B5 # MICRO SIGN
+0xB6 0x00B6 # PILCROW SIGN
+0xB7 0x00B7 # MIDDLE DOT
+0xB8 0x00B8 # CEDILLA
+0xB9 0x00B9 # SUPERSCRIPT ONE
+0xBA 0x00F7 # DIVISION SIGN
+0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
+0xDF 0x2017 # DOUBLE LOW LINE
+0xE0 0x05D0 # HEBREW LETTER ALEF
+0xE1 0x05D1 # HEBREW LETTER BET
+0xE2 0x05D2 # HEBREW LETTER GIMEL
+0xE3 0x05D3 # HEBREW LETTER DALET
+0xE4 0x05D4 # HEBREW LETTER HE
+0xE5 0x05D5 # HEBREW LETTER VAV
+0xE6 0x05D6 # HEBREW LETTER ZAYIN
+0xE7 0x05D7 # HEBREW LETTER HET
+0xE8 0x05D8 # HEBREW LETTER TET
+0xE9 0x05D9 # HEBREW LETTER YOD
+0xEA 0x05DA # HEBREW LETTER FINAL KAF
+0xEB 0x05DB # HEBREW LETTER KAF
+0xEC 0x05DC # HEBREW LETTER LAMED
+0xED 0x05DD # HEBREW LETTER FINAL MEM
+0xEE 0x05DE # HEBREW LETTER MEM
+0xEF 0x05DF # HEBREW LETTER FINAL NUN
+0xF0 0x05E0 # HEBREW LETTER NUN
+0xF1 0x05E1 # HEBREW LETTER SAMEKH
+0xF2 0x05E2 # HEBREW LETTER AYIN
+0xF3 0x05E3 # HEBREW LETTER FINAL PE
+0xF4 0x05E4 # HEBREW LETTER PE
+0xF5 0x05E5 # HEBREW LETTER FINAL TSADI
+0xF6 0x05E6 # HEBREW LETTER TSADI
+0xF7 0x05E7 # HEBREW LETTER QOF
+0xF8 0x05E8 # HEBREW LETTER RESH
+0xF9 0x05E9 # HEBREW LETTER SHIN
+0xFA 0x05EA # HEBREW LETTER TAV
+0xFD 0x200E # LEFT-TO-RIGHT MARK
+0xFE 0x200F # RIGHT-TO-LEFT MARK
+
diff --git a/externals/figlet/fonts/8859-9.flc b/externals/figlet/fonts/8859-9.flc
new file mode 100644
index 0000000000..22901f1077
--- /dev/null
+++ b/externals/figlet/fonts/8859-9.flc
@@ -0,0 +1,307 @@
+#
+# Name: ISO/IEC 8859-9:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on magnetic media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-9:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-9 order.
+#
+# ISO/IEC 8859-9 is also equivalent to ISO-IR-148.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x00A1 # INVERTED EXCLAMATION MARK
+0xA2 0x00A2 # CENT SIGN
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x00A5 # YEN SIGN
+0xA6 0x00A6 # BROKEN BAR
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x00A9 # COPYRIGHT SIGN
+0xAA 0x00AA # FEMININE ORDINAL INDICATOR
+0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC 0x00AC # NOT SIGN
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x00AE # REGISTERED SIGN
+0xAF 0x00AF # MACRON
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x00B1 # PLUS-MINUS SIGN
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x00B5 # MICRO SIGN
+0xB6 0x00B6 # PILCROW SIGN
+0xB7 0x00B7 # MIDDLE DOT
+0xB8 0x00B8 # CEDILLA
+0xB9 0x00B9 # SUPERSCRIPT ONE
+0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
+0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
+0xBF 0x00BF # INVERTED QUESTION MARK
+0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6 0x00C6 # LATIN CAPITAL LETTER AE
+0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE
+0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0xE6 0x00E6 # LATIN SMALL LETTER AE
+0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
+0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE
+0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
+0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x00F7 # DIVISION SIGN
+0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I
+0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA
+0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+
+
diff --git a/externals/figlet/fonts/banner.flf b/externals/figlet/fonts/banner.flf
new file mode 100644
index 0000000000..8fc3489f20
--- /dev/null
+++ b/externals/figlet/fonts/banner.flf
@@ -0,0 +1,2494 @@
+flf2a$ 8 7 54 0 12 0 64 185
+banner.flf version 2 by Ryan Youck (youck@cs.uregina.ca)
+(From a unix program called banner)
+I am not responsible for use of this font
+Thanks to Glenn Chappell for his help
+Katakana characters by Vinney Thai <ssfiit@eris.cs.umb.edu>
+Cyrillic characters from "koi8x8" BDF font.
+Date: August 11, 1994
+
+Merged by John Cowan <cowan@ccil.org>
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@@
+ ###$@
+ ###$@
+ ###$@
+ # $@
+ $@
+ ###$@
+ ###$@
+ $@@
+ ### ###$@
+ ### ###$@
+ # # $@
+ $ $@
+ $ $@
+ $@
+ $@
+ $@@
+ # # $@
+ # # $@
+ #######$@
+ # # $@
+ #######$@
+ # # $@
+ # # $@
+ $@@
+ ##### $@
+ # # #$@
+ # # $@
+ ##### $@
+ # #$@
+ # # #$@
+ ##### $@
+ $@@
+ ### #$@
+ # # # $@
+ ### # $@
+ # $@
+ # ###$@
+ # # #$@
+ # ###$@
+ $@@
+ ## $@
+ # # $@
+ ## $@
+ ### $@
+ # # #$@
+ # # $@
+ ### #$@
+ $@@
+ ###$@
+ ###$@
+ # $@
+ # $@
+ $@
+ $@
+ $@
+ $@@
+ ##$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ ##$@
+ $@@
+ ## $@
+ # $@
+ #$@
+ #$@
+ #$@
+ # $@
+ ## $@
+ $@@
+ $@
+ # # $@
+ # # $@
+ #######$@
+ # # $@
+ # # $@
+ $@
+ $@@
+ $@
+ # $@
+ # $@
+ #####$@
+ # $@
+ # $@
+ $@
+ $@@
+ $@
+ $@
+ $@
+ $@
+ ###$@
+ ###$@
+ # $@
+ # $@@
+ $@
+ $@
+ $@
+ #####$@
+ $@
+ $@
+ $@
+ $@@
+ $@
+ $@
+ $@
+ $@
+ ###$@
+ ###$@
+ ###$@
+ $@@
+ #$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ ### $@
+ # # $@
+ # #$@
+ # #$@
+ # #$@
+ # # $@
+ ### $@
+ $@@
+ # $@
+ ## $@
+ # # $@
+ # $@
+ # $@
+ # $@
+ #####$@
+ $@@
+ ##### $@
+ # #$@
+ #$@
+ ##### $@
+ # $@
+ # $@
+ #######$@
+ $@@
+ ##### $@
+ # #$@
+ #$@
+ ##### $@
+ #$@
+ # #$@
+ ##### $@
+ $@@
+ # $@
+ # # $@
+ # # $@
+ # # $@
+ #######$@
+ # $@
+ # $@
+ $@@
+ #######$@
+ # $@
+ # $@
+ ###### $@
+ #$@
+ # #$@
+ ##### $@
+ $@@
+ ##### $@
+ # #$@
+ # $@
+ ###### $@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ #######$@
+ # # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ ##### $@
+ # #$@
+ # #$@
+ ######$@
+ #$@
+ # #$@
+ ##### $@
+ $@@
+ # $@
+ ###$@
+ # $@
+ $@
+ # $@
+ ###$@
+ # $@
+ $@@
+ $@
+ ###$@
+ ###$@
+ $@
+ ###$@
+ ###$@
+ # $@
+ # $@@
+ #$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #$@
+ $@@
+ $@
+ $@
+ #####$@
+ $@
+ #####$@
+ $@
+ $@
+ $@@
+ # $@
+ # $@
+ # $@
+ #$@
+ # $@
+ # $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ #$@
+ ### $@
+ # $@
+ $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ # ### #$@
+ # ### #$@
+ # #### $@
+ # $@
+ ##### $@
+ $@@
+ # $@
+ # # $@
+ # # $@
+ # #$@
+ #######$@
+ # #$@
+ # #$@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ $@@
+ ##### $@
+ # #$@
+ # $@
+ # $@
+ # $@
+ # #$@
+ ##### $@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ###### $@
+ $@@
+ #######$@
+ # $@
+ # $@
+ ##### $@
+ # $@
+ # $@
+ #######$@
+ $@@
+ #######$@
+ # $@
+ # $@
+ ##### $@
+ # $@
+ # $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ # $@
+ # ####$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ # #$@
+ # #$@
+ # #$@
+ #######$@
+ # #$@
+ # #$@
+ # #$@
+ $@@
+ ###$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ ###$@
+ $@@
+ #$@
+ #$@
+ #$@
+ #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ # #$@
+ # # $@
+ # # $@
+ ### $@
+ # # $@
+ # # $@
+ # #$@
+ $@@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #######$@
+ $@@
+ # #$@
+ ## ##$@
+ # # # #$@
+ # # #$@
+ # #$@
+ # #$@
+ # #$@
+ $@@
+ # #$@
+ ## #$@
+ # # #$@
+ # # #$@
+ # # #$@
+ # ##$@
+ # #$@
+ $@@
+ #######$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ #######$@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # $@
+ # $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ # #$@
+ # #$@
+ # # #$@
+ # # $@
+ #### #$@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # # $@
+ # # $@
+ # #$@
+ $@@
+ ##### $@
+ # #$@
+ # $@
+ ##### $@
+ #$@
+ # #$@
+ ##### $@
+ $@@
+ #######$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # # $@
+ # # $@
+ # $@
+ $@@
+ # #$@
+ # # #$@
+ # # #$@
+ # # #$@
+ # # #$@
+ # # #$@
+ ## ## $@
+ $@@
+ # #$@
+ # # $@
+ # # $@
+ # $@
+ # # $@
+ # # $@
+ # #$@
+ $@@
+ # #$@
+ # # $@
+ # # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ #######$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #######$@
+ $@@
+ #####$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #####$@
+ $@@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #$@
+ $@@
+ #####$@
+ #$@
+ #$@
+ #$@
+ #$@
+ #$@
+ #####$@
+ $@@
+ # $@
+ # # $@
+ # #$@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ #######$@@
+ ###$@
+ ###$@
+ # $@
+ #$@
+ $@
+ $@
+ $@
+ $@@
+ $@
+ ## $@
+ # # $@
+ # #$@
+ ######$@
+ # #$@
+ # #$@
+ $@@
+ $@
+ ##### $@
+ # #$@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ $@
+ #### $@
+ # #$@
+ # $@
+ # $@
+ # #$@
+ #### $@
+ $@@
+ $@
+ ##### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ $@
+ ######$@
+ # $@
+ ##### $@
+ # $@
+ # $@
+ ######$@
+ $@@
+ $@
+ ######$@
+ # $@
+ ##### $@
+ # $@
+ # $@
+ # $@
+ $@@
+ $@
+ #### $@
+ # #$@
+ # $@
+ # ###$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ # #$@
+ # #$@
+ ######$@
+ # #$@
+ # #$@
+ # #$@
+ $@@
+ $@
+ #$@
+ #$@
+ #$@
+ #$@
+ #$@
+ #$@
+ $@@
+ $@
+ #$@
+ #$@
+ #$@
+ #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ # #$@
+ # # $@
+ #### $@
+ # # $@
+ # # $@
+ # #$@
+ $@@
+ $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ ######$@
+ $@@
+ $@
+ # #$@
+ ## ##$@
+ # ## #$@
+ # #$@
+ # #$@
+ # #$@
+ $@@
+ $@
+ # #$@
+ ## #$@
+ # # #$@
+ # # #$@
+ # ##$@
+ # #$@
+ $@@
+ $@
+ #### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ # $@
+ # $@
+ $@@
+ $@
+ #### $@
+ # #$@
+ # #$@
+ # # #$@
+ # # $@
+ ### #$@
+ $@@
+ $@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ # # $@
+ # #$@
+ $@@
+ $@
+ #### $@
+ # $@
+ #### $@
+ #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ #####$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # # $@
+ ## $@
+ $@@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # ## #$@
+ ## ##$@
+ # #$@
+ $@@
+ $@
+ # #$@
+ # # $@
+ ## $@
+ ## $@
+ # # $@
+ # #$@
+ $@@
+ $@
+ # #$@
+ # # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ $@
+ ######$@
+ # $@
+ # $@
+ # $@
+ # $@
+ ######$@
+ $@@
+ ###$@
+ # $@
+ # $@
+ ## $@
+ # $@
+ # $@
+ ###$@
+ $@@
+ #$@
+ #$@
+ #$@
+ $@
+ #$@
+ #$@
+ #$@
+ $@@
+ ### $@
+ # $@
+ # $@
+ ##$@
+ # $@
+ # $@
+ ### $@
+ $@@
+ ## $@
+ # # #$@
+ ## $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ # # #$@
+ # # $@
+ # # $@
+ # #$@
+ #######$@
+ # #$@
+ # #$@
+ $@@
+ # #$@
+ ##### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ # #$@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ $@
+ # #$@
+ #### $@
+ # #$@
+ ######$@
+ # #$@
+ # #$@
+ $@@
+ $@
+ # #$@
+ #### $@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ # #$@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # $@@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ ########$@
+ ## $@
+ ## $@
+ ## $@@
+169 COPYRIGHT SIGN
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+176 DEGREE SIGN
+ $@
+ $@
+ $@
+ $@
+ ########$@
+ $@
+ $@
+ $@@
+178 SUPERSCRIPT TWO
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ########$@
+ ## $@
+ ## $@
+ ## $@@
+183 MIDDLE DOT
+ ## $@
+ ## $@
+ #####$@
+ ## $@
+ #####$@
+ ## $@
+ ## $@
+ ## $@@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ # # #$@
+ # # $@
+ # # $@
+ # #$@
+ #######$@
+ # #$@
+ # #$@
+ $@@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ # #$@
+ ##### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ # #$@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+223 LATIN SMALL LETTER SHARP S
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # $@@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ $@
+ # #$@
+ #### $@
+ # #$@
+ ######$@
+ # #$@
+ # #$@
+ $@@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ $@
+ # #$@
+ #### $@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+247 DIVISION SIGN
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #####$@
+ #### $@
+ #### $@
+ #### $@@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ $@
+ # #$@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+0x0401 CYRILLIC CAPITAL LETTER IO
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@@
+0x0410 CYRILLIC CAPITAL LETTER A
+ ####$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ #######$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0411 CYRILLIC CAPITAL LETTER BE
+ #######$@
+ ## $@
+ ## $@
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ $@@
+0x0412 CYRILLIC CAPITAL LETTER VE
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ $@@
+0x0413 CYRILLIC CAPITAL LETTER GHE
+ #######$@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x0414 CYRILLIC CAPITAL LETTER DE
+ #### $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ #######$@
+ ## ##$@
+ $@@
+0x0415 CYRILLIC CAPITAL LETTER IE
+ #######$@
+ ## $@
+ ## $@
+ ###### $@
+ ## $@
+ ## $@
+ #######$@
+ $@@
+0x0416 CYRILLIC CAPITAL LETTER ZHE
+ ## # ##$@
+ # # # $@
+ ### $@
+ ### $@
+ # # # $@
+ # # # $@
+ ## # ##$@
+ $@@
+0x0417 CYRILLIC CAPITAL LETTER ZE
+ ##### $@
+ ## ##$@
+ ##$@
+ ## $@
+ ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x0418 CYRILLIC CAPITAL LETTER I
+ ## ##$@
+ ## ###$@
+ ## ###$@
+ ## # ##$@
+ ### ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0419 CYRILLIC CAPITAL LETTER SHORT I
+ ## ## #$@
+ ## ##$@
+ ## ###$@
+ ## # ##$@
+ ### ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041A CYRILLIC CAPITAL LETTER KA
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ##### $@
+ ## ## $@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041B CYRILLIC CAPITAL LETTER EL
+ #####$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041C CYRILLIC CAPITAL LETTER EM
+ ## ##$@
+ ## ##$@
+ ### ###$@
+ ## # ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041D CYRILLIC CAPITAL LETTER EN
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ #######$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041E CYRILLIC CAPITAL LETTER O
+ ##### $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x041F CYRILLIC CAPITAL LETTER PE
+ #######$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0420 CYRILLIC CAPITAL LETTER ER
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x0421 CYRILLIC CAPITAL LETTER ES
+ ##### $@
+ ## ##$@
+ ## $@
+ ## $@
+ ## $@
+ ## ##$@
+ ##### $@
+ $@@
+0x0422 CYRILLIC CAPITAL LETTER TE
+ ###### $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x0423 CYRILLIC CAPITAL LETTER U
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ######$@
+ ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x0424 CYRILLIC CAPITAL LETTER EF
+ # $@
+ ##### $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ##### $@
+ # $@
+ $@@
+0x0425 CYRILLIC CAPITAL LETTER HA
+ ## ##$@
+ ## ## $@
+ ### $@
+ ### $@
+ ### $@
+ ## ## $@
+ ## ##$@
+ $@@
+0x0426 CYRILLIC CAPITAL LETTER TSE
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ #######$@
+ #$@@
+0x0427 CYRILLIC CAPITAL LETTER CHE
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ######$@
+ ##$@
+ ##$@
+ ##$@
+ $@@
+0x0428 CYRILLIC CAPITAL LETTER SHA
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+ $@@
+0x0429 CYRILLIC CAPITAL LETTER SHCHA
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+ #$@@
+0x042A CYRILLIC CAPITAL LETTER HARD SIGN
+ ### $@
+ ### $@
+ ## $@
+ ##### $@
+ ## ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x042B CYRILLIC CAPITAL LETTER YERU
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ #### #$@
+ ## # #$@
+ ## # #$@
+ #### #$@
+ $@@
+0x042C CYRILLIC CAPITAL LETTER SOFT SIGN
+ ## $@
+ ## $@
+ ## $@
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ $@@
+0x042D CYRILLIC CAPITAL LETTER E
+ ##### $@
+ ## ##$@
+ ##$@
+ #####$@
+ ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x042E CYRILLIC CAPITAL LETTER YU
+ ## ## $@
+ ## # ##$@
+ ## # ##$@
+ #### ##$@
+ ## # ##$@
+ ## # ##$@
+ ## ## $@
+ $@@
+0x042F CYRILLIC CAPITAL LETTER YA
+ #####$@
+ ## ##$@
+ ## ##$@
+ #####$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0430 CYRILLIC SMALL LETTER A
+ $@
+ $@
+ #### $@
+ ## $@
+ ##### $@
+ ## ## $@
+ ######$@
+ $@@
+0x0431 CYRILLIC SMALL LETTER BE
+ $@
+ ## $@
+ #### $@
+ ## $@
+ ###### $@
+ ## ##$@
+ ##### $@
+ $@@
+0x0432 CYRILLIC SMALL LETTER VE
+ $@
+ $@
+ ##### $@
+ ## ## $@
+ ###### $@
+ ## ##$@
+ ###### $@
+ $@@
+0x0433 CYRILLIC SMALL LETTER GHE
+ $@
+ $@
+ ##### $@
+ ##$@
+ ##### $@
+ ## $@
+ ######$@
+ $@@
+0x0434 CYRILLIC SMALL LETTER DE
+ $@
+ #### $@
+ ##$@
+ #####$@
+ ## ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x0435 CYRILLIC SMALL LETTER IE
+ $@
+ $@
+ ##### $@
+ ## ##$@
+ ###### $@
+ ## $@
+ ##### $@
+ $@@
+0x0436 CYRILLIC SMALL LETTER ZHE
+ $@
+ $@
+ ## # ##$@
+ # # # $@
+ ### $@
+ # # # $@
+ ## # ##$@
+ $@@
+0x0437 CYRILLIC SMALL LETTER ZE
+ $@
+ $@
+ ##### $@
+ ## ##$@
+ ### $@
+ ## ##$@
+ ##### $@
+ $@@
+0x0438 CYRILLIC SMALL LETTER I
+ $@
+ $@
+ ## ##$@
+ ## ###$@
+ ## # ##$@
+ ### ##$@
+ ## ##$@
+ $@@
+0x0439 CYRILLIC SMALL LETTER SHORT I
+ $@
+ ## $@
+ ## ##$@
+ ## ###$@
+ ## # ##$@
+ ### ##$@
+ ## ##$@
+ $@@
+0x043A CYRILLIC SMALL LETTER KA
+ $@
+ $@
+ ## ##$@
+ ## ## $@
+ ##### $@
+ ## ## $@
+ ## ##$@
+ $@@
+0x043B CYRILLIC SMALL LETTER EL
+ $@
+ $@
+ #####$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x043C CYRILLIC SMALL LETTER EM
+ $@
+ $@
+ ## ##$@
+ ### ###$@
+ ## # ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x043D CYRILLIC SMALL LETTER EN
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ #######$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x043E CYRILLIC SMALL LETTER O
+ $@
+ $@
+ ##### $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x043F CYRILLIC SMALL LETTER PE
+ $@
+ $@
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0440 CYRILLIC SMALL LETTER ER
+ $@
+ $@
+ ###### $@
+ ## ##$@
+ ###### $@
+ ## $@
+ ## $@
+ $@@
+0x0441 CYRILLIC SMALL LETTER ES
+ $@
+ $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@
+ ##### $@
+ $@@
+0x0442 CYRILLIC SMALL LETTER TE
+ $@
+ $@
+ ###### $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x0443 CYRILLIC SMALL LETTER U
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ######$@
+ ##$@
+ ##### $@@
+0x0444 CYRILLIC SMALL LETTER EF
+ $@
+ # $@
+ ##### $@
+ ## # ##$@
+ ## # ##$@
+ ##### $@
+ # $@
+ $@@
+0x0445 CYRILLIC SMALL LETTER HA
+ $@
+ $@
+ ## ##$@
+ ## ## $@
+ ### $@
+ ## ## $@
+ ## ##$@
+ $@@
+0x0446 CYRILLIC SMALL LETTER TSE
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ## $@
+ ### ##$@
+ #$@@
+0x0447 CYRILLIC SMALL LETTER CHE
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ ######$@
+ ##$@
+ ##$@
+ $@@
+0x0448 CYRILLIC SMALL LETTER SHA
+ $@
+ $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+ $@@
+0x0449 CYRILLIC SMALL LETTER SHCHA
+ $@
+ $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+ #$@@
+0x044A CYRILLIC SMALL LETTER HARD SIGN
+ $@
+ $@
+ ### $@
+ ## $@
+ ##### $@
+ ## ##$@
+ ##### $@
+ $@@
+0x044B CYRILLIC SMALL LETTER YERU
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ #### #$@
+ ## # #$@
+ #### #$@
+ $@@
+0x044C CYRILLIC SMALL LETTER SOFT SIGN
+ $@
+ $@
+ ## $@
+ ## $@
+ ###### $@
+ ## ##$@
+ ###### $@
+ $@@
+0x044D CYRILLIC SMALL LETTER E
+ $@
+ $@
+ ###### $@
+ ##$@
+ #####$@
+ ##$@
+ ###### $@
+ $@@
+0x044E CYRILLIC SMALL LETTER YU
+ $@
+ $@
+ # ### $@
+ # ## ##$@
+ #### ##$@
+ # ## ##$@
+ # ### $@
+ $@@
+0x044F CYRILLIC SMALL LETTER YA
+ $@
+ $@
+ #####$@
+ ## ##$@
+ #####$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0451 CYRILLIC SMALL LETTER IO
+ $@
+ $@
+ ########$@
+ $@
+ #### ###$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x2219 BULLET OPERATOR
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ #######$@
+ $@
+ $@
+ $@@
+0x221A SQUARE ROOT
+ ## $@
+ ## $@
+ ##### $@
+ ## $@
+ ##### $@
+ $@
+ $@
+ $@@
+0x2248 ALMOST EQUAL TO
+ $@
+ $@
+ $@
+ $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@@
+0x2264 LESS-THAN OR EQUAL TO
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ #####$@
+ $@
+ $@
+ $@@
+0x2265 GREATER-THAN OR EQUAL TO
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2320 TOP HALF INTEGRAL
+ $@
+ $@
+ #######$@
+ ##$@
+ #### ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@@
+0x2321 BOTTOM HALF INTEGRAL
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ #####$@
+ ## $@
+ ## $@
+ ## $@@
+0x2500 BOX DRAWINGS LIGHT HORIZONTAL
+ ## $@
+ $@
+ ## $@
+ ## $@
+ ## $@
+ ## ##$@
+ #### $@
+ $@@
+0x2502 BOX DRAWINGS LIGHT VERTICAL
+ $@
+ $@
+ $@
+ ######$@
+ ## $@
+ ## $@
+ $@
+ $@@
+0x250C BOX DRAWINGS LIGHT DOWN AND RIGHT
+ $@
+ $@
+ $@
+ ######$@
+ ##$@
+ ##$@
+ $@
+ $@@
+0x2510 BOX DRAWINGS LIGHT DOWN AND LEFT
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ## #### $@
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ####$@@
+0x2514 BOX DRAWINGS LIGHT UP AND RIGHT
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ## ## ##$@
+ ## ###$@
+ ## ####$@
+ ## ####$@
+ ##$@@
+0x2518 BOX DRAWINGS LIGHT UP AND LEFT
+ ## $@
+ ## $@
+ $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ $@
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ##$@
+ $@
+ $@@
+0x2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ $@
+ ## ## $@
+ ## ## $@
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ $@
+ $@@
+0x252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ # #$@
+ # # $@
+ # #$@
+ # # $@
+ # #$@
+ # # $@
+ # #$@
+ # # $@@
+0x2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ # # # #$@
+ # # # # $@
+ # # # #$@
+ # # # # $@
+ # # # #$@
+ # # # # $@
+ # # # #$@
+ # # # # $@@
+0x253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ ## ## ##$@
+ ### ###$@
+ ## ## ##$@
+ ### ### $@
+ ## ## ##$@
+ ### ###$@
+ ## ## ##$@
+ ### ### $@@
+0x2550 BOX DRAWINGS DOUBLE HORIZONTAL
+ ## ## $@
+ ## ## $@
+ ## ###$@
+ ## $@
+ ######$@
+ $@
+ $@
+ $@@
+0x2551 BOX DRAWINGS DOUBLE VERTICAL
+ $@
+ $@
+ ######$@
+ ## $@
+ ## ###$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+ ## ## $@
+ ## ## $@
+ #### ###$@
+ $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+ #### $@
+ #### $@
+ #####$@
+ ## $@
+ #####$@
+ #### $@
+ #### $@
+ #### $@@
+0x2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT
+ $@
+ $@
+ ########$@
+ $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+ #### $@
+ #### $@
+ #######$@
+ $@
+ #######$@
+ #### $@
+ #### $@
+ #### $@@
+0x2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+ ## $@
+ ## $@
+ ########$@
+ $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2557 BOX DRAWINGS DOUBLE DOWN AND LEFT
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+ $@
+ $@
+ ########$@
+ $@
+ ########$@
+ ## $@
+ ## $@
+ ## $@@
+0x2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+ $@
+ $@
+ $@
+ $@
+ ########$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x255A BOX DRAWINGS DOUBLE UP AND RIGHT
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ######$@
+ $@
+ $@
+ $@@
+0x255B BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+ ## $@
+ ## $@
+ #####$@
+ ## $@
+ #####$@
+ $@
+ $@
+ $@@
+0x255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+ $@
+ $@
+ #####$@
+ ## $@
+ #####$@
+ ## $@
+ ## $@
+ ## $@@
+0x255D BOX DRAWINGS DOUBLE UP AND LEFT
+ $@
+ $@
+ $@
+ $@
+ ######$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ########$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x255F BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+ ## $@
+ ## $@
+ ########$@
+ ## $@
+ ########$@
+ ## $@
+ ## $@
+ ## $@@
+0x2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ##### $@
+ $@
+ $@
+ $@@
+0x2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+ $@
+ $@
+ $@
+ $@
+ #####$@
+ ## $@
+ ## $@
+ ## $@@
+0x2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+ $@
+ $@
+ $@
+ $@
+ ########$@
+ ########$@
+ ########$@
+ ########$@@
+0x2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@@
+0x2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@@
+0x2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ $@
+ $@
+ $@
+ $@@
+0x2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+ ### $@
+ ## ## $@
+ ## ## $@
+ ### $@
+ $@
+ $@
+ $@
+ $@@
+0x2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+ $@
+ $@
+ $@
+ ## $@
+ ## $@
+ $@
+ $@
+ $@@
+0x2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+ $@
+ $@
+ $@
+ $@
+ ## $@
+ $@
+ $@
+ $@@
+0x2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+ ####$@
+ ## $@
+ ## $@
+ ## $@
+ ### ## $@
+ ## ## $@
+ #### $@
+ ### $@@
+0x256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ #### $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ $@
+ $@
+ $@@
+0x256B BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+ ### $@
+ ## $@
+ ## $@
+ ## $@
+ #### $@
+ $@
+ $@
+ $@@
+0x256C BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+ $@
+ $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ $@
+ $@@
+0x2580 UPPER HALF BLOCK
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@@
+0x2584 LOWER HALF BLOCK
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@@
+0x2588 FULL BLOCK
+ ## $@
+ ## $@
+ ##### $@
+ ## $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@@
+0x258C LEFT HALF BLOCK
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ######$@
+ ####$@
+ ####$@
+ ####$@@
+0x2590 RIGHT HALF BLOCK
+ $@
+ $@
+ $@
+ $@
+ #######$@
+ ## ##$@
+ ## ##$@
+ ## ##$@@
+0x2591 LIGHT SHADE
+ $@
+ $@
+ ##### $@
+ ## $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@@
+0x2592 MEDIUM SHADE
+ ####$@
+ ####$@
+ ######$@
+ ##$@
+ ######$@
+ ####$@
+ ####$@
+ ####$@@
+0x2593 DARK SHADE
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@@
+0x25A0 BLACK SQUARE
+ ## ##$@
+ ## ##$@
+ #### ##$@
+ ##$@
+ #######$@
+ $@
+ $@
+ $@@
+0x30A2 A
+ ##########$@
+ ### $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30A4 I
+ ##$@
+ ## $@
+ ## # $@
+ ## # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30A6 U
+ # $@
+ ##########$@
+ # #$@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30A8 E
+ $@
+ ####### $@
+ # $@
+ # $@
+ # $@
+ # $@
+ ##########$@
+ $@@
+0x30AA O
+ # $@
+ ##########$@
+ ## $@
+ ## # $@
+ ## # $@
+ ## ## $@
+ # $@
+ $@@
+0x30AB KA
+ # $@
+ ##########$@
+ # #$@
+ # #$@
+ # #$@
+ # # # $@
+ # # $@
+ $@@
+0x30AD KI
+ # # $@
+ # # $@
+ # # # $@
+ # $@
+ # # $@
+ # # $@
+ #$@
+ $@@
+0x30AF KU
+ # $@
+ ########$@
+ # #$@
+ # ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30B1 KE
+ # $@
+ ########$@
+ # # $@
+ # # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30B3 KO
+ $@
+ ##########$@
+ #$@
+ #$@
+ #$@
+ #$@
+ ######### $@
+ $@@
+0x30B5 SA
+ # # $@
+ ##########$@
+ # # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30B7 SI (SHI)
+ # #$@
+ # # # $@
+ # # $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30B9 SU
+ ########$@
+ #$@
+ # $@
+ ## $@
+ ## # $@
+ ## # $@
+ # #$@
+ $@@
+0x30BB SE
+ # $@
+ # $@
+ ##########$@
+ # # $@
+ # $@
+ # $@
+ ###### $@
+ $@@
+0x30BD SO
+ # #$@
+ # #$@
+ # $@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30BF TA
+ # $@
+ #######$@
+ # # $@
+ # # # $@
+ ### $@
+ ## $@
+ ## $@
+ $@@
+0x30C1 TI (CHI)
+ ## $@
+ ###### $@
+ # $@
+ ##########$@
+ # $@
+ # $@
+ ## $@
+ $@@
+0x30C4 TU (TSU)
+ # # #$@
+ # # #$@
+ # $@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30C6 TE
+ ###### $@
+ $@
+ ##########$@
+ # $@
+ # $@
+ # $@
+ ## $@
+ $@@
+0x30C8 TO
+ # $@
+ # $@
+ ## $@
+ # # $@
+ # #$@
+ # $@
+ # $@
+ $@@
+0x30CA NA
+ # $@
+ ##########$@
+ # $@
+ # $@
+ # $@
+ # $@
+ ## $@
+ $@@
+0x30CB NI
+ $@
+ $@
+ ###### $@
+ $@
+ $@
+ ##########$@
+ $@
+ $@@
+0x30CC NU
+ ##########$@
+ #$@
+ # # $@
+ # ## $@
+ ## $@
+ ## # $@
+ ## # $@
+ $@@
+0x30CD NE
+ # $@
+ ##########$@
+ # $@
+ ### $@
+ ###### $@
+ ## # ##$@
+ # $@
+ $@@
+0x30CE NO
+ #$@
+ #$@
+ # $@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30CF HA
+ $@
+ $@
+ # # $@
+ # # $@
+ # #$@
+ # $@
+ $@
+ $@@
+0x30D2 HI
+ # $@
+ # ### $@
+ #### $@
+ # $@
+ # $@
+ # $@
+ #######$@
+ $@@
+0x30D5 HU (FU)
+ ########$@
+ #$@
+ #$@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30D8 HE
+ $@
+ $@
+ ## $@
+ # ## $@
+ # ## $@
+ ##$@
+ $@
+ $@@
+0x30DB HO
+ # $@
+ ##########$@
+ # $@
+ # # # $@
+ # # # $@
+ # ## #$@
+ # $@
+ $@@
+0x30DE MA
+ $@
+ ##########$@
+ # $@
+ # $@
+ # # $@
+ # $@
+ # $@
+ $@@
+0x30DF MI
+ #### $@
+ ##$@
+ ### $@
+ ###$@
+ $@
+ ### $@
+ ###$@
+ $@@
+0x30E0 MU
+ # $@
+ # $@
+ # $@
+ # $@
+ # # $@
+ ######### $@
+ #$@
+ $@@
+0x30E1 ME
+ #$@
+ # $@
+ # # $@
+ # # $@
+ # $@
+ ## # $@
+ ## # $@
+ $@@
+0x30E2 MO
+ ###### $@
+ # $@
+ ##########$@
+ # $@
+ # $@
+ # $@
+ #### $@
+ $@@
+0x30E4 YA
+ # ## $@
+ # ## # $@
+ ### $@
+ # # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30E6 YU
+ $@
+ ###### $@
+ # $@
+ # $@
+ # $@
+ ##########$@
+ $@
+ $@@
+0x30E8 YO
+ $@
+ ###### $@
+ # $@
+ # $@
+ # $@
+ ##########$@
+ $@
+ $@@
+0x30E9 RA
+ ###### $@
+ $@
+ ##########$@
+ # #$@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30EA RI
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # $@
+ # $@
+ ## $@
+ $@@
+0x30EB RU
+ # # $@
+ # # $@
+ # # $@
+ # # #$@
+ # # # $@
+ # # # $@
+ # ## $@
+ $@@
+0x30EC RE
+ # $@
+ # $@
+ # $@
+ # ##$@
+ # ## $@
+ # ## $@
+ ## $@
+ $@@
+0x30ED RO
+ $@
+ #########$@
+ # #$@
+ # #$@
+ # #$@
+ #########$@
+ $@
+ $@@
+0x30EF WA
+ ##########$@
+ # #$@
+ # $@
+ # $@
+ # $@
+ ## $@
+ ## $@
+ $@@
+0x30F0 WI
+ # $@
+ ####### $@
+ # # $@
+ # # $@
+ ##########$@
+ # $@
+ # $@
+ $@@
+0x30F1 WE
+ #########$@
+ #$@
+ #$@
+ ######## $@
+ # $@
+ # $@
+ ######## $@
+ $@@
+0x30F2 WO
+ ##########$@
+ #$@
+ # $@
+ ######## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30F3 N
+ #$@
+ # #$@
+ # # $@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+-0x0004 KATAMAP
+ @
+a-A i-B u-C e-D o-E ka-F ki-G ku-H ke-I ko-J @
+sa-K shi-L su-M se-N so-O ta-P chi-Q tsu-R te-S to-T@
+na-U ni-V nu-W ne-X no-Y ha-Z hi-a fu-b he-c ho-d @
+ma-e mi-f mu-g me-h mo-i ya-j yu-k we-l yo-m @
+ra-n ri-o ru-p re-q ro-r wa-s wi-t wo-u @
+n-v @
+ @@
+-0x0006 MOSCOWMAP
+a-a, b-b, v-v, g-g, d-d, e-e, zh-j, z-z, i-i@
+short i->, k-k, l-l, m-m, n-n, o-o, p-p, r-r@
+s-s, t-t, u-u, f-f, kh-h, ts-q, ch-c, sh-w @
+shch-x, hard-\, yeru-|, soft-/, reverse e-~ @
+yu-`, ya-y @
+Capitals use Latin capital letters, except: @
+Reverse E-<, Yu-@ @
+No caps for short i, hard, yeru, soft. @@
diff --git a/externals/figlet/fonts/big.flf b/externals/figlet/fonts/big.flf
new file mode 100644
index 0000000000..07c468c9e5
--- /dev/null
+++ b/externals/figlet/fonts/big.flf
@@ -0,0 +1,2204 @@
+flf2a$ 8 6 59 15 10 0 24463 153
+Big by Glenn Chappell 4/93 -- based on Standard
+Includes ISO Latin-1
+Greek characters by Bruce Jakeway <pbjakeway@neumann.uwaterloo.ca>
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+ (_)@
+ @
+ @@
+ _ _ @
+ ( | )@
+ V V @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ _ _ @
+ _| || |_ @
+ |_ __ _|@
+ _| || |_ @
+ |_ __ _|@
+ |_||_| @
+ @
+ @@
+ _ @
+ | | @
+ / __)@
+ \__ \@
+ ( /@
+ |_| @
+ @
+ @@
+ _ __@
+ (_) / /@
+ / / @
+ / / @
+ / / _ @
+ /_/ (_)@
+ @
+ @@
+ @
+ ___ @
+ ( _ ) @
+ / _ \/\@
+ | (_> <@
+ \___/\/@
+ @
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ __@
+ / /@
+ | | @
+ | | @
+ | | @
+ | | @
+ \_\@
+ @@
+ __ @
+ \ \ @
+ | |@
+ | |@
+ | |@
+ | |@
+ /_/ @
+ @@
+ _ @
+ /\| |/\ @
+ \ ` ' / @
+ |_ _|@
+ / , . \ @
+ \/|_|\/ @
+ @
+ @@
+ @
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ $ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ _ @
+ ( )@
+ |/ @
+ @@
+ @
+ @
+ ______ @
+ |______|@
+ $ @
+ $ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ _ @
+ (_)@
+ @
+ @@
+ __@
+ / /@
+ / / @
+ / / @
+ / / @
+ /_/ @
+ @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+ __ @
+ /_ |@
+ | |@
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+ ___ @
+ |__ \ @
+ $) |@
+ / / @
+ / /_ @
+ |____|@
+ @
+ @@
+ ____ @
+ |___ \ @
+ __) |@
+ |__ < @
+ ___) |@
+ |____/ @
+ @
+ @@
+ _ _ @
+ | || | @
+ | || |_ @
+ |__ _|@
+ | | @
+ |_| @
+ @
+ @@
+ _____ @
+ | ____|@
+ | |__ @
+ |___ \ @
+ ___) |@
+ |____/ @
+ @
+ @@
+ __ @
+ / / @
+ / /_ @
+ | '_ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+ ______ @
+ |____ |@
+ $/ / @
+ / / @
+ / / @
+ /_/ @
+ @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ > _ < @
+ | (_) |@
+ \___/ @
+ @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \__, |@
+ / / @
+ /_/ @
+ @
+ @@
+ @
+ _ @
+ (_)@
+ $ @
+ _ @
+ (_)@
+ @
+ @@
+ @
+ _ @
+ (_)@
+ $ @
+ _ @
+ ( )@
+ |/ @
+ @@
+ __@
+ / /@
+ / / @
+ < < @
+ \ \ @
+ \_\@
+ @
+ @@
+ @
+ ______ @
+ |______|@
+ ______ @
+ |______|@
+ @
+ @
+ @@
+ __ @
+ \ \ @
+ \ \ @
+ > >@
+ / / @
+ /_/ @
+ @
+ @@
+ ___ @
+ |__ \ @
+ ) |@
+ / / @
+ |_| @
+ (_) @
+ @
+ @@
+ @
+ ____ @
+ / __ \ @
+ / / _` |@
+ | | (_| |@
+ \ \__,_|@
+ \____/ @
+ @@
+ @
+ /\ @
+ / \ @
+ / /\ \ @
+ / ____ \ @
+ /_/ \_\@
+ @
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ | |_) |@
+ |____/ @
+ @
+ @@
+ _____ @
+ / ____|@
+ | | $ @
+ | | $ @
+ | |____ @
+ \_____|@
+ @
+ @@
+ _____ @
+ | __ \ @
+ | | | |@
+ | | | |@
+ | |__| |@
+ |_____/ @
+ @
+ @@
+ ______ @
+ | ____|@
+ | |__ @
+ | __| @
+ | |____ @
+ |______|@
+ @
+ @@
+ ______ @
+ | ____|@
+ | |__ @
+ | __| @
+ | | @
+ |_| @
+ @
+ @@
+ _____ @
+ / ____|@
+ | | __ @
+ | | |_ |@
+ | |__| |@
+ \_____|@
+ @
+ @@
+ _ _ @
+ | | | |@
+ | |__| |@
+ | __ |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ _| |_ @
+ |_____|@
+ @
+ @@
+ _ @
+ | |@
+ | |@
+ _ | |@
+ | |__| |@
+ \____/ @
+ @
+ @@
+ _ __@
+ | |/ /@
+ | ' / @
+ | < @
+ | . \ @
+ |_|\_\@
+ @
+ @@
+ _ @
+ | | @
+ | | @
+ | | @
+ | |____ @
+ |______|@
+ @
+ @@
+ __ __ @
+ | \/ |@
+ | \ / |@
+ | |\/| |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+ _ _ @
+ | \ | |@
+ | \| |@
+ | . ` |@
+ | |\ |@
+ |_| \_|@
+ @
+ @@
+ ____ @
+ / __ \ @
+ | | | |@
+ | | | |@
+ | |__| |@
+ \____/ @
+ @
+ @@
+ _____ @
+ | __ \ @
+ | |__) |@
+ | ___/ @
+ | | @
+ |_| @
+ @
+ @@
+ ____ @
+ / __ \ @
+ | | | |@
+ | | | |@
+ | |__| |@
+ \___\_\@
+ @
+ @@
+ _____ @
+ | __ \ @
+ | |__) |@
+ | _ / @
+ | | \ \ @
+ |_| \_\@
+ @
+ @@
+ _____ @
+ / ____|@
+ | (___ @
+ \___ \ @
+ ____) |@
+ |_____/ @
+ @
+ @@
+ _______ @
+ |__ __|@
+ | | @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+ _ _ @
+ | | | |@
+ | | | |@
+ | | | |@
+ | |__| |@
+ \____/ @
+ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ / / @
+ \ \/ / @
+ \ / @
+ \/ @
+ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ /\ / / @
+ \ \/ \/ / @
+ \ /\ / @
+ \/ \/ @
+ @
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ > < @
+ / . \ @
+ /_/ \_\@
+ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \_/ / @
+ \ / @
+ | | @
+ |_| @
+ @
+ @@
+ ______@
+ |___ /@
+ $/ / @
+ / / @
+ / /__ @
+ /_____|@
+ @
+ @@
+ ___ @
+ | _|@
+ | | @
+ | | @
+ | | @
+ | |_ @
+ |___|@
+ @@
+ __ @
+ \ \ @
+ \ \ @
+ \ \ @
+ \ \ @
+ \_\@
+ @
+ @@
+ ___ @
+ |_ |@
+ | |@
+ | |@
+ | |@
+ _| |@
+ |___|@
+ @@
+ /\ @
+ |/\|@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ @
+ $ @
+ ______ @
+ |______|@@
+ _ @
+ ( )@
+ \|@
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ @
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+ _ @
+ | | @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+ @
+ @@
+ @
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @
+ @@
+ _ @
+ | |@
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+ @
+ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @
+ @@
+ __ @
+ / _|@
+ | |_ @
+ | _|@
+ | | @
+ |_| @
+ @
+ @@
+ @
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ __/ |@
+ |___/ @@
+ _ @
+ | | @
+ | |__ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @
+ @@
+ _ @
+ (_)@
+ _ @
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+ _ @
+ (_)@
+ _ @
+ | |@
+ | |@
+ | |@
+ _/ |@
+ |__/ @@
+ _ @
+ | | @
+ | | __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ @
+ @@
+ _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+ @
+ @
+ _ __ ___ @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+ @
+ @@
+ @
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @
+ @@
+ @
+ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+ @
+ @
+ _ __ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ | | @
+ |_| @@
+ @
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ | |@
+ |_|@@
+ @
+ @
+ _ __ @
+ | '__|@
+ | | @
+ |_| @
+ @
+ @@
+ @
+ @
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ @
+ @@
+ _ @
+ | | @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ @
+ @@
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+ @
+ @
+ __ __@
+ \ \ / /@
+ \ V / @
+ \_/ @
+ @
+ @@
+ @
+ @
+ __ __@
+ \ \ /\ / /@
+ \ V V / @
+ \_/\_/ @
+ @
+ @@
+ @
+ @
+ __ __@
+ \ \/ /@
+ > < @
+ /_/\_\@
+ @
+ @@
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ __/ |@
+ |___/ @@
+ @
+ @
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @
+ @@
+ __@
+ / /@
+ | | @
+ / / @
+ \ \ @
+ | | @
+ \_\@
+ @@
+ _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __ @
+ \ \ @
+ | | @
+ \ \@
+ / /@
+ | | @
+ /_/ @
+ @@
+ /\/|@
+ |/\/ @
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ _ _ @
+ (_)_(_) @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+ _ _ @
+ (_) (_)@
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+ _ _ @
+ (_) (_)@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+ _ _ @
+ (_) (_)@
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+ ___ @
+ / _ \ @
+ | | ) |@
+ | |< < @
+ | | ) |@
+ | ||_/ @
+ |_| @
+ @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ | |@
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+162 CENT SIGN
+ @
+ _ @
+ | | @
+ / __)@
+ | (__ @
+ \ )@
+ |_| @
+ @@
+163 POUND SIGN
+ ___ @
+ / ,_\ @
+ _| |_ @
+ |__ __| @
+ | |____ @
+ (_,_____|@
+ @
+ @@
+164 CURRENCY SIGN
+ @
+ /\___/\@
+ \ _ /@
+ | (_) |@
+ / ___ \@
+ \/ \/@
+ @
+ @@
+165 YEN SIGN
+ __ __ @
+ \ \ / / @
+ _\ V /_ @
+ |___ ___|@
+ |___ ___|@
+ |_| @
+ @
+ @@
+166 BROKEN BAR
+ _ @
+ | |@
+ | |@
+ |_|@
+ _ @
+ | |@
+ | |@
+ |_|@@
+167 SECTION SIGN
+ __ @
+ _/ _)@
+ / \ \ @
+ \ \\ \@
+ \ \_/@
+ (__/ @
+ @
+ @@
+168 DIAERESIS
+ _ _ @
+ (_) (_)@
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ ________ @
+ / ____ \ @
+ / / ___| \ @
+ | | | |@
+ | | |___ |@
+ \ \____| / @
+ \________/ @
+ @@
+170 FEMININE ORDINAL INDICATOR
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ |_____|@
+ $ @
+ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+ / / / @
+ < < < @
+ \ \ \ @
+ \_\_\@
+ @
+ @@
+172 NOT SIGN
+ @
+ @
+ ______ @
+ |____ |@
+ |_|@
+ $ @
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ _____ @
+ |_____|@
+ $ @
+ $ @
+ @
+ @@
+174 REGISTERED SIGN
+ ________ @
+ / ____ \ @
+ / | _ \ \ @
+ | | |_) | |@
+ | | _ < |@
+ \ |_| \_\ / @
+ \________/ @
+ @@
+175 MACRON
+ ______ @
+ |______|@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+176 DEGREE SIGN
+ __ @
+ / \ @
+ | () |@
+ \__/ @
+ $ @
+ $ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ _____ @
+ |_____|@
+ @
+ @@
+178 SUPERSCRIPT TWO
+ ___ @
+ |_ )@
+ / / @
+ /___|@
+ $ @
+ $ @
+ @
+ @@
+179 SUPERSCRIPT THREE
+ ____@
+ |__ /@
+ |_ \@
+ |___/@
+ $ @
+ $ @
+ @
+ @@
+180 ACUTE ACCENT
+ __@
+ /_/@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ | | @
+ |_| @@
+182 PILCROW SIGN
+ ______ @
+ / |@
+ | (| || |@
+ \__ || |@
+ | || |@
+ |_||_|@
+ @
+ @@
+183 MIDDLE DOT
+ @
+ @
+ _ @
+ (_)@
+ $ @
+ $ @
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ @
+ _ @
+ )_)@
+ @@
+185 SUPERSCRIPT ONE
+ _ @
+ / |@
+ | |@
+ |_|@
+ $ @
+ $ @
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ |_____|@
+ $ @
+ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____ @
+ \ \ \ @
+ \ \ \ @
+ > > >@
+ / / / @
+ /_/_/ @
+ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ __ @
+ / | / / @
+ | |/ / _ @
+ |_/ / | | @
+ / /|_ _|@
+ /_/ |_| @
+ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ __ @
+ / | / / @
+ | |/ /__ @
+ |_/ /_ )@
+ / / / / @
+ /_/ /___|@
+ @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ____ __ @
+ |__ / / / @
+ |_ \/ / _ @
+ |___/ / | | @
+ / /|_ _|@
+ /_/ |_| @
+ @
+ @@
+191 INVERTED QUESTION MARK
+ _ @
+ (_) @
+ | | @
+ / / @
+ | (__ @
+ \___|@
+ @
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ \_\ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __ @
+ /_/ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/| @
+ |/\/ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_) @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ (o) @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+198 LATIN CAPITAL LETTER AE
+ _______ @
+ / ____|@
+ / |__ @
+ / /| __| @
+ / ___ |____ @
+ /_/ |______|@
+ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ _____ @
+ / ____|@
+ | | $ @
+ | | $ @
+ | |____ @
+ \_____|@
+ )_) @
+ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ _\_\_ @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __ @
+ _/_/_ @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ \_\ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __ @
+ /_/ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ |_ _| @
+ | | @
+ | | @
+ |___| @
+ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ _____ @
+ | __ \ @
+ _| |_ | |@
+ |__ __|| |@
+ | |__| |@
+ |_____/ @
+ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/| @
+ |/\/_ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/| @
+ |/\/ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ /\/\@
+ > <@
+ \/\/@
+ $ @
+ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _____ @
+ / __// @
+ | | // |@
+ | |//| |@
+ | //_| |@
+ //___/ @
+ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ _\_\_ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __ @
+ _/_/_ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __ @
+ __/_/__@
+ \ \ / /@
+ \ V / @
+ | | @
+ |_| @
+ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ _ @
+ | |___ @
+ | __ \ @
+ | |__) |@
+ | ___/ @
+ |_| @
+ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ___ @
+ / _ \ @
+ | | ) |@
+ | |< < @
+ | | ) |@
+ | ||_/ @
+ |_| @
+ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ \_\ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __ @
+ /_/ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/| @
+ |/\/ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ (()) @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ @
+ __ ____ @
+ / _` _ \@
+ | (_| __/@
+ \__,____|@
+ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ )_) @
+ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ \_\ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __ @
+ /_/ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/ \|@
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ ___ @
+ / _ \ @
+ | __/ @
+ \___| @
+ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ _ @
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ _ @
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/ \|@
+ _ @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ _ @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+240 LATIN SMALL LETTER ETH
+ /\/\ @
+ > < @
+ \/\ \ @
+ / _` |@
+ | (_) |@
+ \___/ @
+ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/| @
+ |/\/ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/| @
+ |/\/ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+247 DIVISION SIGN
+ _ @
+ (_) @
+ _______ @
+ |_______|@
+ _ @
+ (_) @
+ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ @
+ ____ @
+ / _//\ @
+ | (//) |@
+ \//__/ @
+ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ \_\ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __ @
+ /_/ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __ @
+ /_/ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ __/ |@
+ |___/ @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ | | @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ | | @
+ |_| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ __/ |@
+ |___/ @@
+0x02BC MODIFIER LETTER APOSTROPHE
+ @
+ @
+ ))@
+ @
+ @
+ @
+ @
+ @@
+0x02BD MODIFIER LETTER REVERSED COMMA
+ @
+ @
+ ((@
+ @
+ @
+ @
+ @
+ @@
+0x037A GREEK YPOGEGRAMMENI
+ @
+ @
+ @
+ @
+ @
+ @
+ @
+ ||@@
+0x0387 GREEK ANO TELEIA
+ @
+ $ @
+ _ @
+ (_)@
+ @
+ $ @
+ @
+ @@
+0x0391 GREEK CAPITAL LETTER ALPHA
+ ___ @
+ / _ \ @
+ | |_| |@
+ | _ |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+0x0392 GREEK CAPITAL LETTER BETA
+ ____ @
+ | _ \ @
+ | |_) )@
+ | _ ( @
+ | |_) )@
+ |____/ @
+ @
+ @@
+0x0393 GREEK CAPITAL LETTER GAMMA
+ _____ @
+ | ___)@
+ | |$ @
+ | |$ @
+ | | @
+ |_| @
+ @
+ @@
+0x0394 GREEK CAPITAL LETTER DELTA
+ @
+ /\ @
+ / \ @
+ / /\ \ @
+ / /__\ \ @
+ /________\@
+ @
+ @@
+0x0395 GREEK CAPITAL LETTER EPSILON
+ _____ @
+ | ___)@
+ | |_ @
+ | _) @
+ | |___ @
+ |_____)@
+ @
+ @@
+0x0396 GREEK CAPITAL LETTER ZETA
+ ______@
+ (___ /@
+ / / @
+ / / @
+ / /__ @
+ /_____)@
+ @
+ @@
+0x0397 GREEK CAPITAL LETTER ETA
+ _ _ @
+ | | | |@
+ | |_| |@
+ | _ |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+0x0398 GREEK CAPITAL LETTER THETA
+ ____ @
+ / __ \ @
+ | |__| |@
+ | __ |@
+ | |__| |@
+ \____/ @
+ @
+ @@
+0x0399 GREEK CAPITAL LETTER IOTA
+ ___ @
+ ( )@
+ | | @
+ | | @
+ | | @
+ (___)@
+ @
+ @@
+0x039A GREEK CAPITAL LETTER KAPPA
+ _ __@
+ | | / /@
+ | |/ / @
+ | < @
+ | |\ \ @
+ |_| \_\@
+ @
+ @@
+0x039B GREEK CAPITAL LETTER LAMDA
+ @
+ /\ @
+ / \ @
+ / /\ \ @
+ / / \ \ @
+ /_/ \_\@
+ @
+ @@
+0x039C GREEK CAPITAL LETTER MU
+ __ __ @
+ | \ / |@
+ | v |@
+ | |\_/| |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+0x039D GREEK CAPITAL LETTER NU
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |@
+ | |\ |@
+ |_| \_|@
+ @
+ @@
+0x039E GREEK CAPITAL LETTER XI
+ _____ @
+ (_____)@
+ ___ @
+ (___) @
+ _____ @
+ (_____)@
+ @
+ @@
+0x039F GREEK CAPITAL LETTER OMICRON
+ ___ @
+ / _ \ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+0x03A0 GREEK CAPITAL LETTER PI
+ _______ @
+ ( _ )@
+ | | | | @
+ | | | | @
+ | | | | @
+ |_| |_| @
+ @
+ @@
+0x03A1 GREEK CAPITAL LETTER RHO
+ ____ @
+ | _ \ @
+ | |_) )@
+ | __/ @
+ | | @
+ |_| @
+ @
+ @@
+0x03A3 GREEK CAPITAL LETTER SIGMA
+ ______ @
+ \ ___)@
+ \ \ @
+ > > @
+ / /__ @
+ /_____)@
+ @
+ @@
+0x03A4 GREEK CAPITAL LETTER TAU
+ _____ @
+ (_ _)@
+ | | @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+0x03A5 GREEK CAPITAL LETTER UPSILON
+ __ __ @
+ (_ \ / _)@
+ \ v / @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+0x03A6 GREEK CAPITAL LETTER PHI
+ _ @
+ _| |_ @
+ / \ @
+ ( (| |) )@
+ \_ _/ @
+ |_| @
+ @
+ @@
+0x03A7 GREEK CAPITAL LETTER CHI
+ __ __@
+ \ \ / /@
+ \ v / @
+ > < @
+ / ^ \ @
+ /_/ \_\@
+ @
+ @@
+0x03A8 GREEK CAPITAL LETTER PSI
+ _ _ _ @
+ | || || |@
+ | \| |/ |@
+ \_ _/ @
+ | | @
+ |_| @
+ @
+ @@
+0x03A9 GREEK CAPITAL LETTER OMEGA
+ ____ @
+ / __ \ @
+ | | | | @
+ | | | | @
+ _\ \/ /_ @
+ (___||___)@
+ @
+ @@
+0x03B1 GREEK SMALL LETTER ALPHA
+ @
+ @
+ __ __@
+ / \/ /@
+ ( () < @
+ \__/\_\@
+ @
+ @@
+0x03B2 GREEK SMALL LETTER BETA
+ ___ @
+ / _ \ @
+ | |_) )@
+ | _ < @
+ | |_) )@
+ | __/ @
+ | | @
+ |_| @@
+0x03B3 GREEK SMALL LETTER GAMMA
+ @
+ @
+ _ _ @
+ ( \ / )@
+ \ v / @
+ | | @
+ | | @
+ |_| @@
+0x03B4 GREEK SMALL LETTER DELTA
+ __ @
+ / _) @
+ \ \ @
+ / _ \ @
+ ( (_) )@
+ \___/ @
+ @
+ @@
+0x03B5 GREEK SMALL LETTER EPSILON
+ @
+ @
+ ___ @
+ / __)@
+ > _) @
+ \___)@
+ @
+ @@
+0x03B6 GREEK SMALL LETTER ZETA
+ _____ @
+ \__ ) @
+ / / @
+ / / @
+ | |__ @
+ \__ \ @
+ ) )@
+ (_/ @@
+0x03B7 GREEK SMALL LETTER ETA
+ @
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| | |@
+ | |@
+ |_|@@
+0x03B8 GREEK SMALL LETTER THETA
+ ___ @
+ / _ \ @
+ | |_| |@
+ | _ |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+0x03B9 GREEK SMALL LETTER IOTA
+ @
+ @
+ _ @
+ | | @
+ | | @
+ \_)@
+ @
+ @@
+0x03BA GREEK SMALL LETTER KAPPA
+ @
+ @
+ _ __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ @
+ @@
+0x03BB GREEK SMALL LETTER LAMDA
+ __ @
+ \ \ @
+ \ \ @
+ > \ @
+ / ^ \ @
+ /_/ \_\@
+ @
+ @@
+0x03BC GREEK SMALL LETTER MU
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ | | @
+ |_| @@
+0x03BD GREEK SMALL LETTER NU
+ @
+ @
+ _ __@
+ | |/ /@
+ | / / @
+ |__/ @
+ @
+ @@
+0x03BE GREEK SMALL LETTER XI
+ \=\__ @
+ > __) @
+ ( (_ @
+ > _) @
+ ( (__ @
+ \__ \ @
+ ) )@
+ (_/ @@
+0x03BF GREEK SMALL LETTER OMICRON
+ @
+ @
+ ___ @
+ / _ \ @
+ ( (_) )@
+ \___/ @
+ @
+ @@
+0x03C0 GREEK SMALL LETTER PI
+ @
+ @
+ ______ @
+ ( __ )@
+ | || | @
+ |_||_| @
+ @
+ @@
+0x03C1 GREEK SMALL LETTER RHO
+ @
+ @
+ ___ @
+ / _ \ @
+ | |_) )@
+ | __/ @
+ | | @
+ |_| @@
+0x03C2 GREEK SMALL LETTER FINAL SIGMA
+ @
+ @
+ ____ @
+ / ___)@
+ ( (__ @
+ \__ \ @
+ _) )@
+ (__/ @@
+0x03C3 GREEK SMALL LETTER SIGMA
+ @
+ @
+ ____ @
+ / ._)@
+ ( () ) @
+ \__/ @
+ @
+ @@
+0x03C4 GREEK SMALL LETTER TAU
+ @
+ @
+ ___ @
+ ( )@
+ | | @
+ \_)@
+ @
+ @@
+0x03C5 GREEK SMALL LETTER UPSILON
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+0x03C6 GREEK SMALL LETTER PHI
+ _ @
+ | | @
+ _| |_ @
+ / \ @
+ ( (| |) )@
+ \_ _/ @
+ | | @
+ |_| @@
+0x03C7 GREEK SMALL LETTER CHI
+ @
+ @
+ __ __@
+ \ \ / /@
+ \ v / @
+ > < @
+ / ^ \ @
+ /_/ \_\@@
+0x03C8 GREEK SMALL LETTER PSI
+ @
+ @
+ _ _ _ @
+ | || || |@
+ | \| |/ |@
+ \_ _/ @
+ | | @
+ |_| @@
+0x03C9 GREEK SMALL LETTER OMEGA
+ @
+ @
+ __ __ @
+ / / _ \ \ @
+ | |_/ \_| |@
+ \___^___/ @
+ @
+ @@
+0x03D1 GREEK THETA SYMBOL
+ ___ @
+ / _ \ @
+ ( (_| |_ @
+ _ \ _ _)@
+ | |___| | @
+ \_____/ @
+ @
+ @@
+0x03D5 GREEK PHI SYMBOL
+ @
+ @
+ _ __ @
+ | | / \ @
+ | || || )@
+ \_ _/ @
+ | | @
+ |_| @@
+0x03D6 GREEK PI SYMBOL
+ @
+ @
+ _________ @
+ ( _____ )@
+ | |_/ \_| |@
+ \___^___/ @
+ @
+ @@
+-0x0005
+alpha = a, beta = b, gamma = g, delta = d, epsilon = e @
+zeta = z, eta = h, theta = q, iota = i, lamda = l, mu = m@
+nu = n, xi = x, omicron = o, pi = p, rho = r, sigma = s @
+phi = f, chi = c, psi = y, omega = w, final sigma = V @
+ pi symbol = v, theta symbol = J, phi symbol = j @
+ middle dot = :, ypogegrammeni = _ @
+ rough breathing = (, smooth breathing = ) @
+ acute accent = ', grave accent = `, dialytika = ^ @@
diff --git a/externals/figlet/fonts/block.flf b/externals/figlet/fonts/block.flf
new file mode 100644
index 0000000000..b1172f049e
--- /dev/null
+++ b/externals/figlet/fonts/block.flf
@@ -0,0 +1,1691 @@
+flf2a$ 8 6 27 0 10 0 576 96
+Block by Glenn Chappell 4/93 -- straight version of Lean
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ _| $@
+ $$@
+ @@
+ _| _| $@
+ _| _| $@
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ $$ @
+ _| _| $@
+ _|_|_|_|_| $@
+ _| _| $@
+ _|_|_|_|_| $@
+ _| _| $@
+ $$ @
+ @@
+ $$ @
+ _| $@
+ _|_|_| $@
+ _|_| $@
+ _|_| $@
+ _|_|_| $@
+ _| $@
+ $$ @@
+ $$@
+ _|_| _| $@
+ _|_| _| $@
+ _| $@
+ _| _|_| $@
+ _| _|_| $@
+ $$@
+ @@
+ $$ @
+ _| $ @
+ _| _| $@
+ _|_| _| $@
+ _| _| $@
+ _|_| _| $@
+ $$@
+ @@
+ _| $@
+ _| $@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ _| $@
+ _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $@
+ _| $@
+ $$@@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ $$ @@
+ $$@
+ _| _| _| $@
+ _|_|_| $@
+ _|_|_|_|_| $@
+ _|_|_| $@
+ _| _| _| $@
+ $$@
+ @@
+ $$ @
+ _| $ @
+ _| $@
+ _|_|_|_|_| $@
+ _| $@
+ _| $ @
+ $$ @
+ @@
+ @
+ @
+ @
+ @
+ $$@
+ _| $@
+ _| $@
+ $$ @@
+ @
+ @
+ $$@
+ _|_|_|_|_| $@
+ $$@
+ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ $$@
+ _| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $@
+ $$ @
+ @@
+ $$@
+ _| $@
+ _|_| $@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| $@
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+ $$ @
+ _|_|_| $@
+ _| $@
+ _|_| $@
+ _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$ @
+ _| _| $ @
+ _| _| $@
+ _|_|_|_| $@
+ _| $@
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _|_|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_|_|_| $@
+ _| $@
+ _| $@
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ @
+ $$@
+ _| $@
+ $$@
+ $$@
+ _| $@
+ $$@
+ @@
+ @
+ $$@
+ _| $@
+ $$@
+ $$@
+ _| $@
+ _| $@
+ $$ @@
+ $$@
+ _| $@
+ _| $@
+ _| $ @
+ _| $@
+ _| $@
+ $$@
+ @@
+ @
+ $$@
+ _|_|_|_|_| $@
+ $$@
+ _|_|_|_|_| $@
+ $$@
+ @
+ @@
+ $$ @
+ _| $ @
+ _| $@
+ _| $@
+ _| $@
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _|_| $@
+ _| $@
+ _|_| $@
+ $$ @
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _|_|_|_|_| $@
+ _| _| $@
+ _| _|_|_| _| $@
+ _| _| _| _| $@
+ _| _|_|_|_| $@
+ _| $@
+ _|_|_|_|_|_| $@@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $ @
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+ $$@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _| _|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $ @
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_| $ @
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$ @
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+ $$@
+ _| _| $@
+ _|_| _|_| $@
+ _| _| _| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _| _| $@
+ _|_| _| $@
+ _| _| _| $@
+ _| _|_| $@
+ _| _| $@
+ $$@
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _|_| $ @
+ _| _| $ @
+ _| _|_| $ @
+ _| _| $@
+ _|_| _| $@
+ $$@
+ @@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _|_| $@
+ _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_|_|_| $@
+ _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| _| $@
+ _| _| _| $@
+ _| _| $ @
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _|_|_|_|_| $@
+ _| $@
+ _| $ @
+ _| $@
+ _|_|_|_|_| $@
+ $$@
+ @@
+ _|_| $@
+ _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $@
+ _|_| $@
+ $$@@
+ $$ @
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $@
+ _| $@
+ $$@
+ @@
+ _|_| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _|_| $@
+ $$@@
+ _| $@
+ _| _| $@
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ @
+ @
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ $$@
+ _|_|_|_|_| $@@
+ _| $@
+ _| $@
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ @
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$ @
+ _| $ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ @
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ @
+ $$ @
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$@
+ _|_| $@
+ _| $@
+ _|_|_|_| $@
+ _| $@
+ _| $ @
+ $$ @
+ @@
+ @
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $@@
+ $$ @
+ _| $ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@@
+ $$ @
+ _| $ @
+ _| _| $ @
+ _|_| $ @
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+ @
+ $$ @
+ _|_|_| _|_| $@
+ _| _| _| $@
+ _| _| _| $@
+ _| _| _| $@
+ $$@
+ @@
+ @
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ @
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ @
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $ @
+ _| $ @@
+ @
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _| $@@
+ @
+ $$@
+ _| _|_| $@
+ _|_| $@
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ @
+ $$@
+ _|_|_| $@
+ _|_| $@
+ _|_| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$ @
+ _| $@
+ _|_|_|_| @
+ _| $@
+ _| $@
+ _|_| $@
+ $$@
+ @@
+ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ $$ @
+ @@
+ @
+ $$@
+ _| _| _| $@
+ _| _| _| $@
+ _| _| _| _| $@
+ _| _| $ @
+ $$ @
+ @@
+ @
+ $$@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $@@
+ @
+ $$@
+ _|_|_|_| $@
+ _| $@
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+ _| $@
+ _| $@
+ _| $@
+ _| $ @
+ _| $@
+ _| $@
+ _| $@
+ $$@@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@@
+ _| $ @
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $ @
+ $$ @@
+ _| _| $@
+ _| _| $@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ $$ @@
+160 NO-BREAK SPACE
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@@
+161 INVERTED EXCLAMATION MARK
+ $$@
+ _| $@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+162 CENT SIGN
+ $$ @
+ _| $@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ $$ @@
+163 POUND SIGN
+ $$ @
+ _|_| $ @
+ _| _| $ @
+ _|_|_| $ @
+ _| $@
+ _|_|_| _| $@
+ _|_| _|_| $@
+ @@
+164 CURRENCY SIGN
+ $$@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $ @
+ _| _| $ @
+ _|_|_|_| $@
+ _| _| $@
+ $$@@
+165 YEN SIGN
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_|_|_| $@
+ _| $@
+ _|_|_|_|_| $@
+ _| $@
+ $$ @@
+166 BROKEN BAR
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ $$@
+ _| $@
+ _| $@
+ _| $@@
+167 SECTION SIGN
+ _|_| $@
+ _| $@
+ _| $@
+ _| _| $@
+ _| $@
+ _| $@
+ _|_| $@
+ $$ @@
+168 DIAERESIS
+ _| _| $@
+ $$@
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ _|_|_|_| $ @
+ _| _| $@
+ _| _|_|_| _| $@
+ _| _| _| $@
+ _| _| _| $@
+ _| _|_|_| _| $@
+ _| _| $@
+ _|_|_|_| $ @@
+170 FEMININE ORDINAL INDICATOR
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ _|_|_|_| $@
+ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $ @
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+172 NOT SIGN
+ @
+ @
+ $$@
+ _|_|_|_|_| $@
+ _| $@
+ $$@
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ $$@
+ _|_|_|_| $@
+ $$@
+ $$ @
+ @
+ @@
+174 REGISTERED SIGN
+ _|_|_|_| $ @
+ _| _| $@
+ _| _|_|_| _| $@
+ _| _| _| _| $@
+ _| _|_|_| _| $@
+ _| _| _| _| $@
+ _| _| $@
+ _|_|_|_| $ @@
+175 MACRON
+ _|_|_|_|_| $@
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+176 DEGREE SIGN
+ _| $@
+ _| _| $@
+ _| $@
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ $$ @
+ _| $ @
+ _| $@
+ _|_|_|_|_| $@
+ _| $@
+ _|_|_|_|_| $@
+ $$@
+ @@
+178 SUPERSCRIPT TWO
+ $$ @
+ _|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @
+ @@
+179 SUPERSCRIPT THREE
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_| $@
+ $$ @
+ @
+ @@
+180 ACUTE ACCENT
+ _| $@
+ _| $@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| $@
+ _| $ @@
+182 PILCROW SIGN
+ $$@
+ _|_|_|_| $@
+ _|_|_| _| $@
+ _|_| _| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+183 MIDDLE DOT
+ @
+ @
+ $$@
+ _| $@
+ $$@
+ $$ @
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ @
+ $$@
+ _| $@
+ _|_| $@@
+185 SUPERSCRIPT ONE
+ $$@
+ _| $@
+ _|_| $@
+ _| $@
+ _| $@
+ $$@
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$@
+ _|_|_|_| $@
+ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $$ @
+ _| _| $ @
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $ @
+ $$ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ $$ @
+ _| _| $ @
+ _|_| _| _| _| $ @
+ _| _| _| _| $@
+ _| _| _|_|_|_| $@
+ _| _| $@
+ $$ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ $$ @
+ _| _| $ @
+ _|_| _| _|_| $@
+ _| _| _| $@
+ _| _| _| $@
+ _| _|_|_| $@
+ $$@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ $$ @
+ _|_|_| _| $ @
+ _| _| _| _| $ @
+ _| _| _| _| $@
+ _|_| _| _|_|_|_| $@
+ _| _| $@
+ $$ @
+ @@
+191 INVERTED QUESTION MARK
+ $$@
+ _| $@
+ $$@
+ _|_| $@
+ _| $@
+ _|_| $@
+ $$@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ _| $ @
+ _| $ @
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _| $ @
+ _| $ @
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ $$@
+ _|_| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ _| _| $@
+ _| _| $@
+ $$ @
+ _|_| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+198 LATIN CAPITAL LETTER AE
+ $$@
+ _|_|_|_|_|_| $@
+ _| _| $@
+ _|_|_|_|_|_| $ @
+ _| _| $@
+ _| _|_|_|_| $@
+ $$@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $ @
+ _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ _| $ @
+ _| $@
+ _|_|_|_| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _| $ @
+ _| $@
+ _|_|_|_| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_|_|_| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ _| $ @
+ _| $@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _| $@
+ _| $@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+208 LATIN CAPITAL LETTER ETH
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| _| $@
+ _| _|_| $@
+ _| _| $@
+ $$@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ _| $ @
+ _| $ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _| $ @
+ _| $ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ $$@
+ _| _| $@
+ _| $@
+ _| _| $@
+ $$@
+ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ $$@
+ _|_|_|_| $@
+ _| _|_| $@
+ _| _| _| $@
+ _|_| _| $@
+ _|_|_|_| $@
+ $$ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ _| $ @
+ _| $ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _| $ @
+ _| $ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _| $ @
+ _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ $$ @
+ _| $ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| $ @
+ $$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ $$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ _| $ @
+ _| $ @
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _| $@
+ _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ _| $@
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ _| _| $@
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ _| $@
+ _| _| $@
+ _| $@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ $$ @
+ _|_|_| _|_| $@
+ _| _|_|_|_|_| $@
+ _| _|_| $@
+ _|_|_| _|_|_| $@
+ $$@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ _| $@
+ _| $ @
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _| $@
+ _| $@
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ _| $@
+ _| $@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _| $@
+ _| $@
+ $$ @
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ _| $@
+ _| _| $@
+ $$@
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _| _| $@
+ $$@
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ _| _| $ @
+ _| $ @
+ _| _| $@
+ _|_|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ _| _| $@
+ _| _| $@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ _| $ @
+ _| $ @
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _| $ @
+ _| $ @
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ _|_|_| $@
+ _| _| $@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+247 DIVISION SIGN
+ $$ @
+ _| $ @
+ $$@
+ _|_|_|_|_| $@
+ $$@
+ _| $ @
+ $$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ $$@
+ _|_|_| $@
+ _| _|_| $@
+ _|_| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ _| $ @
+ _| $ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _| $@
+ _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _| $ @
+ _| $ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $@@
+254 LATIN SMALL LETTER THORN
+ $$ @
+ _| $ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $ @
+ _| $ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $@@
diff --git a/externals/figlet/fonts/bubble.flf b/externals/figlet/fonts/bubble.flf
new file mode 100644
index 0000000000..efd0a71964
--- /dev/null
+++ b/externals/figlet/fonts/bubble.flf
@@ -0,0 +1,1630 @@
+flf2a 4 3 8 15 11 0 10127 242
+Bubble by Glenn Chappell 4/93
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ @
+ @
+ @
+ @@
+ _ @
+ / \ @
+ ( ! )@
+ \_/ @@
+ _ @
+ / \ @
+ ( " )@
+ \_/ @@
+ _ @
+ / \ @
+ ( # )@
+ \_/ @@
+ _ @
+ / \ @
+ ( $ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( % )@
+ \_/ @@
+ _ @
+ / \ @
+ ( & )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ' )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ( )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ) )@
+ \_/ @@
+ _ @
+ / \ @
+ ( * )@
+ \_/ @@
+ _ @
+ / \ @
+ ( + )@
+ \_/ @@
+ _ @
+ / \ @
+ ( , )@
+ \_/ @@
+ _ @
+ / \ @
+ ( - )@
+ \_/ @@
+ _ @
+ / \ @
+ ( . )@
+ \_/ @@
+ _ @
+ / \ @
+ ( / )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 0 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 1 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 2 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 3 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 4 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 5 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 6 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 7 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 8 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 9 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( : )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ; )@
+ \_/ @@
+ _ @
+ / \ @
+ ( < )@
+ \_/ @@
+ _ @
+ / \ @
+ ( = )@
+ \_/ @@
+ _ @
+ / \ @
+ ( > )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ? )@
+ \_/ @@
+ _ @
+ / \ @
+ ( @ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( A )@
+ \_/ @@
+ _ @
+ / \ @
+ ( B )@
+ \_/ @@
+ _ @
+ / \ @
+ ( C )@
+ \_/ @@
+ _ @
+ / \ @
+ ( D )@
+ \_/ @@
+ _ @
+ / \ @
+ ( E )@
+ \_/ @@
+ _ @
+ / \ @
+ ( F )@
+ \_/ @@
+ _ @
+ / \ @
+ ( G )@
+ \_/ @@
+ _ @
+ / \ @
+ ( H )@
+ \_/ @@
+ _ @
+ / \ @
+ ( I )@
+ \_/ @@
+ _ @
+ / \ @
+ ( J )@
+ \_/ @@
+ _ @
+ / \ @
+ ( K )@
+ \_/ @@
+ _ @
+ / \ @
+ ( L )@
+ \_/ @@
+ _ @
+ / \ @
+ ( M )@
+ \_/ @@
+ _ @
+ / \ @
+ ( N )@
+ \_/ @@
+ _ @
+ / \ @
+ ( O )@
+ \_/ @@
+ _ @
+ / \ @
+ ( P )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Q )@
+ \_/ @@
+ _ @
+ / \ @
+ ( R )@
+ \_/ @@
+ _ @
+ / \ @
+ ( S )@
+ \_/ @@
+ _ @
+ / \ @
+ ( T )@
+ \_/ @@
+ _ @
+ / \ @
+ ( U )@
+ \_/ @@
+ _ @
+ / \ @
+ ( V )@
+ \_/ @@
+ _ @
+ / \ @
+ ( W )@
+ \_/ @@
+ _ @
+ / \ @
+ ( X )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Y )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Z )@
+ \_/ @@
+ _ @
+ / \ @
+ ( [ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( \ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ] )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ^ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( _ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ` )@
+ \_/ @@
+ _ @
+ / \ @
+ ( a )@
+ \_/ @@
+ _ @
+ / \ @
+ ( b )@
+ \_/ @@
+ _ @
+ / \ @
+ ( c )@
+ \_/ @@
+ _ @
+ / \ @
+ ( d )@
+ \_/ @@
+ _ @
+ / \ @
+ ( e )@
+ \_/ @@
+ _ @
+ / \ @
+ ( f )@
+ \_/ @@
+ _ @
+ / \ @
+ ( g )@
+ \_/ @@
+ _ @
+ / \ @
+ ( h )@
+ \_/ @@
+ _ @
+ / \ @
+ ( i )@
+ \_/ @@
+ _ @
+ / \ @
+ ( j )@
+ \_/ @@
+ _ @
+ / \ @
+ ( k )@
+ \_/ @@
+ _ @
+ / \ @
+ ( l )@
+ \_/ @@
+ _ @
+ / \ @
+ ( m )@
+ \_/ @@
+ _ @
+ / \ @
+ ( n )@
+ \_/ @@
+ _ @
+ / \ @
+ ( o )@
+ \_/ @@
+ _ @
+ / \ @
+ ( p )@
+ \_/ @@
+ _ @
+ / \ @
+ ( q )@
+ \_/ @@
+ _ @
+ / \ @
+ ( r )@
+ \_/ @@
+ _ @
+ / \ @
+ ( s )@
+ \_/ @@
+ _ @
+ / \ @
+ ( t )@
+ \_/ @@
+ _ @
+ / \ @
+ ( u )@
+ \_/ @@
+ _ @
+ / \ @
+ ( v )@
+ \_/ @@
+ _ @
+ / \ @
+ ( w )@
+ \_/ @@
+ _ @
+ / \ @
+ ( x )@
+ \_/ @@
+ _ @
+ / \ @
+ ( y )@
+ \_/ @@
+ _ @
+ / \ @
+ ( z )@
+ \_/ @@
+ _ @
+ / \ @
+ ( { )@
+ \_/ @@
+ _ @
+ / \ @
+ ( | )@
+ \_/ @@
+ _ @
+ / \ @
+ ( } )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ~ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ä )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ö )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ü )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ä )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ö )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ü )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ß )@
+ \_/ @@
+128
+ _ @
+ / \ @
+ ( € )@
+ \_/ @@
+129
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+130
+ _ @
+ / \ @
+ ( ‚ )@
+ \_/ @@
+131
+ _ @
+ / \ @
+ ( ƒ )@
+ \_/ @@
+132
+ _ @
+ / \ @
+ ( „ )@
+ \_/ @@
+133
+ _ @
+ / \ @
+ ( … )@
+ \_/ @@
+134
+ _ @
+ / \ @
+ ( † )@
+ \_/ @@
+135
+ _ @
+ / \ @
+ ( ‡ )@
+ \_/ @@
+136
+ _ @
+ / \ @
+ ( ˆ )@
+ \_/ @@
+137
+ _ @
+ / \ @
+ ( ‰ )@
+ \_/ @@
+138
+ _ @
+ / \ @
+ ( Š )@
+ \_/ @@
+139
+ _ @
+ / \ @
+ ( ‹ )@
+ \_/ @@
+140
+ _ @
+ / \ @
+ ( Π)@
+ \_/ @@
+141
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+142
+ _ @
+ / \ @
+ ( Ž )@
+ \_/ @@
+143
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+144
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+145
+ _ @
+ / \ @
+ ( ‘ )@
+ \_/ @@
+146
+ _ @
+ / \ @
+ ( ’ )@
+ \_/ @@
+147
+ _ @
+ / \ @
+ ( “ )@
+ \_/ @@
+148
+ _ @
+ / \ @
+ ( ” )@
+ \_/ @@
+149
+ _ @
+ / \ @
+ ( • )@
+ \_/ @@
+150
+ _ @
+ / \ @
+ ( – )@
+ \_/ @@
+151
+ _ @
+ / \ @
+ ( — )@
+ \_/ @@
+152
+ _ @
+ / \ @
+ ( ˜ )@
+ \_/ @@
+153
+ _ @
+ / \ @
+ ( ™ )@
+ \_/ @@
+154
+ _ @
+ / \ @
+ ( š )@
+ \_/ @@
+155
+ _ @
+ / \ @
+ ( › )@
+ \_/ @@
+156
+ _ @
+ / \ @
+ ( œ )@
+ \_/ @@
+157
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+158
+ _ @
+ / \ @
+ ( ž )@
+ \_/ @@
+159
+ _ @
+ / \ @
+ ( Ÿ )@
+ \_/ @@
+160 NO-BREAK SPACE
+ _ @
+ / \ @
+ (   )@
+ \_/ @@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ / \ @
+ ( ¡ )@
+ \_/ @@
+162 CENT SIGN
+ _ @
+ / \ @
+ ( ¢ )@
+ \_/ @@
+163 POUND SIGN
+ _ @
+ / \ @
+ ( £ )@
+ \_/ @@
+164 CURRENCY SIGN
+ _ @
+ / \ @
+ ( ¤ )@
+ \_/ @@
+165 YEN SIGN
+ _ @
+ / \ @
+ ( ¥ )@
+ \_/ @@
+166 BROKEN BAR
+ _ @
+ / \ @
+ ( ¦ )@
+ \_/ @@
+167 SECTION SIGN
+ _ @
+ / \ @
+ ( § )@
+ \_/ @@
+168 DIAERESIS
+ _ @
+ / \ @
+ ( ¨ )@
+ \_/ @@
+169 COPYRIGHT SIGN
+ _ @
+ / \ @
+ ( © )@
+ \_/ @@
+170 FEMININE ORDINAL INDICATOR
+ _ @
+ / \ @
+ ( ª )@
+ \_/ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ _ @
+ / \ @
+ ( « )@
+ \_/ @@
+172 NOT SIGN
+ _ @
+ / \ @
+ ( ¬ )@
+ \_/ @@
+173 SOFT HYPHEN
+ _ @
+ / \ @
+ ( ­ )@
+ \_/ @@
+174 REGISTERED SIGN
+ _ @
+ / \ @
+ ( ® )@
+ \_/ @@
+175 MACRON
+ _ @
+ / \ @
+ ( ¯ )@
+ \_/ @@
+176 DEGREE SIGN
+ _ @
+ / \ @
+ ( ° )@
+ \_/ @@
+177 PLUS-MINUS SIGN
+ _ @
+ / \ @
+ ( ± )@
+ \_/ @@
+178 SUPERSCRIPT TWO
+ _ @
+ / \ @
+ ( ² )@
+ \_/ @@
+179 SUPERSCRIPT THREE
+ _ @
+ / \ @
+ ( ³ )@
+ \_/ @@
+180 ACUTE ACCENT
+ _ @
+ / \ @
+ ( ´ )@
+ \_/ @@
+181 MICRO SIGN
+ _ @
+ / \ @
+ ( µ )@
+ \_/ @@
+182 PILCROW SIGN
+ _ @
+ / \ @
+ ( ¶ )@
+ \_/ @@
+183 MIDDLE DOT
+ _ @
+ / \ @
+ ( · )@
+ \_/ @@
+184 CEDILLA
+ _ @
+ / \ @
+ ( ¸ )@
+ \_/ @@
+185 SUPERSCRIPT ONE
+ _ @
+ / \ @
+ ( ¹ )@
+ \_/ @@
+186 MASCULINE ORDINAL INDICATOR
+ _ @
+ / \ @
+ ( º )@
+ \_/ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ _ @
+ / \ @
+ ( » )@
+ \_/ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ @
+ / \ @
+ ( ¼ )@
+ \_/ @@
+189 VULGAR FRACTION ONE HALF
+ _ @
+ / \ @
+ ( ½ )@
+ \_/ @@
+190 VULGAR FRACTION THREE QUARTERS
+ _ @
+ / \ @
+ ( ¾ )@
+ \_/ @@
+191 INVERTED QUESTION MARK
+ _ @
+ / \ @
+ ( ¿ )@
+ \_/ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ _ @
+ / \ @
+ ( À )@
+ \_/ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _ @
+ / \ @
+ ( Á )@
+ \_/ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Â )@
+ \_/ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ _ @
+ / \ @
+ ( Ã )@
+ \_/ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ä )@
+ \_/ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ / \ @
+ ( Å )@
+ \_/ @@
+198 LATIN CAPITAL LETTER AE
+ _ @
+ / \ @
+ ( Æ )@
+ \_/ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ _ @
+ / \ @
+ ( Ç )@
+ \_/ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ _ @
+ / \ @
+ ( È )@
+ \_/ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _ @
+ / \ @
+ ( É )@
+ \_/ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Ê )@
+ \_/ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ë )@
+ \_/ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ _ @
+ / \ @
+ ( Ì )@
+ \_/ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _ @
+ / \ @
+ ( Í )@
+ \_/ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Î )@
+ \_/ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ï )@
+ \_/ @@
+208 LATIN CAPITAL LETTER ETH
+ _ @
+ / \ @
+ ( Ð )@
+ \_/ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ _ @
+ / \ @
+ ( Ñ )@
+ \_/ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ _ @
+ / \ @
+ ( Ò )@
+ \_/ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _ @
+ / \ @
+ ( Ó )@
+ \_/ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Ô )@
+ \_/ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ _ @
+ / \ @
+ ( Õ )@
+ \_/ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ö )@
+ \_/ @@
+215 MULTIPLICATION SIGN
+ _ @
+ / \ @
+ ( × )@
+ \_/ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _ @
+ / \ @
+ ( Ø )@
+ \_/ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ _ @
+ / \ @
+ ( Ù )@
+ \_/ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _ @
+ / \ @
+ ( Ú )@
+ \_/ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Û )@
+ \_/ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ü )@
+ \_/ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _ @
+ / \ @
+ ( Ý )@
+ \_/ @@
+222 LATIN CAPITAL LETTER THORN
+ _ @
+ / \ @
+ ( Þ )@
+ \_/ @@
+223 LATIN SMALL LETTER SHARP S
+ _ @
+ / \ @
+ ( ß )@
+ \_/ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ _ @
+ / \ @
+ ( à )@
+ \_/ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _ @
+ / \ @
+ ( á )@
+ \_/ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( â )@
+ \_/ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ _ @
+ / \ @
+ ( ã )@
+ \_/ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ @
+ / \ @
+ ( ä )@
+ \_/ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ _ @
+ / \ @
+ ( å )@
+ \_/ @@
+230 LATIN SMALL LETTER AE
+ _ @
+ / \ @
+ ( æ )@
+ \_/ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ _ @
+ / \ @
+ ( ç )@
+ \_/ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ _ @
+ / \ @
+ ( è )@
+ \_/ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _ @
+ / \ @
+ ( é )@
+ \_/ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ê )@
+ \_/ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ @
+ / \ @
+ ( ë )@
+ \_/ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ _ @
+ / \ @
+ ( ì )@
+ \_/ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _ @
+ / \ @
+ ( í )@
+ \_/ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( î )@
+ \_/ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ @
+ / \ @
+ ( ï )@
+ \_/ @@
+240 LATIN SMALL LETTER ETH
+ _ @
+ / \ @
+ ( ð )@
+ \_/ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ _ @
+ / \ @
+ ( ñ )@
+ \_/ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ _ @
+ / \ @
+ ( ò )@
+ \_/ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _ @
+ / \ @
+ ( ó )@
+ \_/ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ô )@
+ \_/ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ _ @
+ / \ @
+ ( õ )@
+ \_/ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ @
+ / \ @
+ ( ö )@
+ \_/ @@
+247 DIVISION SIGN
+ _ @
+ / \ @
+ ( ÷ )@
+ \_/ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ _ @
+ / \ @
+ ( ø )@
+ \_/ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ _ @
+ / \ @
+ ( ù )@
+ \_/ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _ @
+ / \ @
+ ( ú )@
+ \_/ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( û )@
+ \_/ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ @
+ / \ @
+ ( ü )@
+ \_/ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _ @
+ / \ @
+ ( ý )@
+ \_/ @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ / \ @
+ ( þ )@
+ \_/ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ @
+ / \ @
+ ( ÿ )@
+ \_/ @@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+ _ @
+ / \ @
+ ( À )@
+ \_/ @@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+ _ @
+ / \ @
+ ( à )@
+ \_/ @@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+ _ @
+ / \ @
+ ( Ã )@
+ \_/ @@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+ _ @
+ / \ @
+ ( ã )@
+ \_/ @@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+ _ @
+ / \ @
+ ( ¡ )@
+ \_/ @@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+ _ @
+ / \ @
+ ( ± )@
+ \_/ @@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+ _ @
+ / \ @
+ ( Æ )@
+ \_/ @@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+ _ @
+ / \ @
+ ( æ )@
+ \_/ @@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Æ )@
+ \_/ @@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( æ )@
+ \_/ @@
+0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+ _ @
+ / \ @
+ ( Å )@
+ \_/ @@
+0x010B LATIN SMALL LETTER C WITH DOT ABOVE
+ _ @
+ / \ @
+ ( å )@
+ \_/ @@
+0x010C LATIN CAPITAL LETTER C WITH CARON
+ _ @
+ / \ @
+ ( È )@
+ \_/ @@
+0x010D LATIN SMALL LETTER C WITH CARON
+ _ @
+ / \ @
+ ( è )@
+ \_/ @@
+0x010E LATIN CAPITAL LETTER D WITH CARON
+ _ @
+ / \ @
+ ( Ï )@
+ \_/ @@
+0x010F LATIN SMALL LETTER D WITH CARON
+ _ @
+ / \ @
+ ( ï )@
+ \_/ @@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+ _ @
+ / \ @
+ ( Ð )@
+ \_/ @@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+ _ @
+ / \ @
+ ( ð )@
+ \_/ @@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+ _ @
+ / \ @
+ ( ª )@
+ \_/ @@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+ _ @
+ / \ @
+ ( º )@
+ \_/ @@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+ _ @
+ / \ @
+ ( Ì )@
+ \_/ @@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ _ @
+ / \ @
+ ( ì )@
+ \_/ @@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+ _ @
+ / \ @
+ ( Ê )@
+ \_/ @@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+ _ @
+ / \ @
+ ( ê )@
+ \_/ @@
+0x011A LATIN CAPITAL LETTER E WITH CARON
+ _ @
+ / \ @
+ ( Ì )@
+ \_/ @@
+0x011B LATIN SMALL LETTER E WITH CARON
+ _ @
+ / \ @
+ ( ì )@
+ \_/ @@
+0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Ø )@
+ \_/ @@
+0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ø )@
+ \_/ @@
+0x011E LATIN CAPITAL LETTER G WITH BREVE
+ _ @
+ / \ @
+ ( « )@
+ \_/ @@
+0x011F LATIN SMALL LETTER G WITH BREVE
+ _ @
+ / \ @
+ ( » )@
+ \_/ @@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+ _ @
+ / \ @
+ ( Õ )@
+ \_/ @@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+ _ @
+ / \ @
+ ( õ )@
+ \_/ @@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+ _ @
+ / \ @
+ ( « )@
+ \_/ @@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+ _ @
+ / \ @
+ ( » )@
+ \_/ @@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ¦ )@
+ \_/ @@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ¶ )@
+ \_/ @@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+ _ @
+ / \ @
+ ( ¡ )@
+ \_/ @@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+ _ @
+ / \ @
+ ( ± )@
+ \_/ @@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+ _ @
+ / \ @
+ ( ¥ )@
+ \_/ @@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+ _ @
+ / \ @
+ ( µ )@
+ \_/ @@
+0x012A LATIN CAPITAL LETTER I WITH MACRON
+ _ @
+ / \ @
+ ( Ï )@
+ \_/ @@
+0x012B LATIN SMALL LETTER I WITH MACRON
+ _ @
+ / \ @
+ ( ï )@
+ \_/ @@
+0x012E LATIN CAPITAL LETTER I WITH OGONEK
+ _ @
+ / \ @
+ ( Ç )@
+ \_/ @@
+0x012F LATIN SMALL LETTER I WITH OGONEK
+ _ @
+ / \ @
+ ( ç )@
+ \_/ @@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+ _ @
+ / \ @
+ ( © )@
+ \_/ @@
+0x0131 LATIN SMALL LETTER DOTLESS I
+ _ @
+ / \ @
+ ( ¹ )@
+ \_/ @@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ¬ )@
+ \_/ @@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ¼ )@
+ \_/ @@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+ _ @
+ / \ @
+ ( Ó )@
+ \_/ @@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+ _ @
+ / \ @
+ ( ó )@
+ \_/ @@
+0x0138 LATIN SMALL LETTER KRA
+ _ @
+ / \ @
+ ( ¢ )@
+ \_/ @@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+ _ @
+ / \ @
+ ( Å )@
+ \_/ @@
+0x013A LATIN SMALL LETTER L WITH ACUTE
+ _ @
+ / \ @
+ ( å )@
+ \_/ @@
+0x013B LATIN CAPITAL LETTER L WITH CEDILLA
+ _ @
+ / \ @
+ ( ¦ )@
+ \_/ @@
+0x013C LATIN SMALL LETTER L WITH CEDILLA
+ _ @
+ / \ @
+ ( ¶ )@
+ \_/ @@
+0x013D LATIN CAPITAL LETTER L WITH CARON
+ _ @
+ / \ @
+ ( ¥ )@
+ \_/ @@
+0x013E LATIN SMALL LETTER L WITH CARON
+ _ @
+ / \ @
+ ( µ )@
+ \_/ @@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+ _ @
+ / \ @
+ ( £ )@
+ \_/ @@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+ _ @
+ / \ @
+ ( ³ )@
+ \_/ @@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+ _ @
+ / \ @
+ ( Ñ )@
+ \_/ @@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+ _ @
+ / \ @
+ ( ñ )@
+ \_/ @@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+ _ @
+ / \ @
+ ( Ñ )@
+ \_/ @@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+ _ @
+ / \ @
+ ( ñ )@
+ \_/ @@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+ _ @
+ / \ @
+ ( Ò )@
+ \_/ @@
+0x0148 LATIN SMALL LETTER N WITH CARON
+ _ @
+ / \ @
+ ( ò )@
+ \_/ @@
+0x014A LATIN CAPITAL LETTER ENG
+ _ @
+ / \ @
+ ( ½ )@
+ \_/ @@
+0x014B LATIN SMALL LETTER ENG
+ _ @
+ / \ @
+ ( ¿ )@
+ \_/ @@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+ _ @
+ / \ @
+ ( Ò )@
+ \_/ @@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ _ @
+ / \ @
+ ( ò )@
+ \_/ @@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( Õ )@
+ \_/ @@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( õ )@
+ \_/ @@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+ _ @
+ / \ @
+ ( À )@
+ \_/ @@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+ _ @
+ / \ @
+ ( à )@
+ \_/ @@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+ _ @
+ / \ @
+ ( £ )@
+ \_/ @@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+ _ @
+ / \ @
+ ( ³ )@
+ \_/ @@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+ _ @
+ / \ @
+ ( Ø )@
+ \_/ @@
+0x0159 LATIN SMALL LETTER R WITH CARON
+ _ @
+ / \ @
+ ( ø )@
+ \_/ @@
+0x015A LATIN CAPITAL LETTER S WITH ACUTE
+ _ @
+ / \ @
+ ( ¦ )@
+ \_/ @@
+0x015B LATIN SMALL LETTER S WITH ACUTE
+ _ @
+ / \ @
+ ( ¶ )@
+ \_/ @@
+0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Þ )@
+ \_/ @@
+0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( þ )@
+ \_/ @@
+0x015E LATIN CAPITAL LETTER S WITH CEDILLA
+ _ @
+ / \ @
+ ( ª )@
+ \_/ @@
+0x015F LATIN SMALL LETTER S WITH CEDILLA
+ _ @
+ / \ @
+ ( º )@
+ \_/ @@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+ _ @
+ / \ @
+ ( © )@
+ \_/ @@
+0x0161 LATIN SMALL LETTER S WITH CARON
+ _ @
+ / \ @
+ ( ¹ )@
+ \_/ @@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+ _ @
+ / \ @
+ ( Þ )@
+ \_/ @@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+ _ @
+ / \ @
+ ( þ )@
+ \_/ @@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+ _ @
+ / \ @
+ ( « )@
+ \_/ @@
+0x0165 LATIN SMALL LETTER T WITH CARON
+ _ @
+ / \ @
+ ( » )@
+ \_/ @@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+ _ @
+ / \ @
+ ( ¬ )@
+ \_/ @@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+ _ @
+ / \ @
+ ( ¼ )@
+ \_/ @@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+ _ @
+ / \ @
+ ( Ý )@
+ \_/ @@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+ _ @
+ / \ @
+ ( ý )@
+ \_/ @@
+0x016A LATIN CAPITAL LETTER U WITH MACRON
+ _ @
+ / \ @
+ ( Þ )@
+ \_/ @@
+0x016B LATIN SMALL LETTER U WITH MACRON
+ _ @
+ / \ @
+ ( þ )@
+ \_/ @@
+0x016C LATIN CAPITAL LETTER U WITH BREVE
+ _ @
+ / \ @
+ ( Ý )@
+ \_/ @@
+0x016D LATIN SMALL LETTER U WITH BREVE
+ _ @
+ / \ @
+ ( ý )@
+ \_/ @@
+0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
+ _ @
+ / \ @
+ ( Ù )@
+ \_/ @@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ _ @
+ / \ @
+ ( ù )@
+ \_/ @@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( Û )@
+ \_/ @@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( û )@
+ \_/ @@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+ _ @
+ / \ @
+ ( Ù )@
+ \_/ @@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+ _ @
+ / \ @
+ ( ù )@
+ \_/ @@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+ _ @
+ / \ @
+ ( ¬ )@
+ \_/ @@
+0x017A LATIN SMALL LETTER Z WITH ACUTE
+ _ @
+ / \ @
+ ( ¼ )@
+ \_/ @@
+0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ _ @
+ / \ @
+ ( ¯ )@
+ \_/ @@
+0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
+ _ @
+ / \ @
+ ( ¿ )@
+ \_/ @@
+0x017D LATIN CAPITAL LETTER Z WITH CARON
+ _ @
+ / \ @
+ ( ® )@
+ \_/ @@
+0x017E LATIN SMALL LETTER Z WITH CARON
+ _ @
+ / \ @
+ ( ¾ )@
+ \_/ @@
+0x02C7 CARON
+ _ @
+ / \ @
+ ( · )@
+ \_/ @@
+0x02D8 BREVE
+ _ @
+ / \ @
+ ( ¢ )@
+ \_/ @@
+0x02D9 DOT ABOVE
+ _ @
+ / \ @
+ ( ÿ )@
+ \_/ @@
+0x02DB OGONEK
+ _ @
+ / \ @
+ ( ² )@
+ \_/ @@
+0x02DD DOUBLE ACUTE ACCENT
+ _ @
+ / \ @
+ ( ½ )@
+ \_/ @@
diff --git a/externals/figlet/fonts/digital.flf b/externals/figlet/fonts/digital.flf
new file mode 100644
index 0000000000..6b7a1cabbf
--- /dev/null
+++ b/externals/figlet/fonts/digital.flf
@@ -0,0 +1,1286 @@
+flf2a 3 2 6 1 11 0 16513 242
+Digital by Glenn Chappell 1/94 -- based on Bubble
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ @
+ @
+ @@
+ +-+@
+ |!|@
+ +-+@@
+ +-+@
+ |"|@
+ +-+@@
+ +-+@
+ |#|@
+ +-+@@
+ +-+@
+ |$|@
+ +-+@@
+ +-+@
+ |%|@
+ +-+@@
+ +-+@
+ |&|@
+ +-+@@
+ +-+@
+ |'|@
+ +-+@@
+ +-+@
+ |(|@
+ +-+@@
+ +-+@
+ |)|@
+ +-+@@
+ +-+@
+ |*|@
+ +-+@@
+ +-+@
+ |+|@
+ +-+@@
+ +-+@
+ |,|@
+ +-+@@
+ +-+@
+ |-|@
+ +-+@@
+ +-+@
+ |.|@
+ +-+@@
+ +-+@
+ |/|@
+ +-+@@
+ +-+@
+ |0|@
+ +-+@@
+ +-+@
+ |1|@
+ +-+@@
+ +-+@
+ |2|@
+ +-+@@
+ +-+@
+ |3|@
+ +-+@@
+ +-+@
+ |4|@
+ +-+@@
+ +-+@
+ |5|@
+ +-+@@
+ +-+@
+ |6|@
+ +-+@@
+ +-+@
+ |7|@
+ +-+@@
+ +-+@
+ |8|@
+ +-+@@
+ +-+@
+ |9|@
+ +-+@@
+ +-+@
+ |:|@
+ +-+@@
+ +-+@
+ |;|@
+ +-+@@
+ +-+@
+ |<|@
+ +-+@@
+ +-+@
+ |=|@
+ +-+@@
+ +-+@
+ |>|@
+ +-+@@
+ +-+@
+ |?|@
+ +-+@@
+ +-+@
+ |@|@
+ +-+@@
+ +-+@
+ |A|@
+ +-+@@
+ +-+@
+ |B|@
+ +-+@@
+ +-+@
+ |C|@
+ +-+@@
+ +-+@
+ |D|@
+ +-+@@
+ +-+@
+ |E|@
+ +-+@@
+ +-+@
+ |F|@
+ +-+@@
+ +-+@
+ |G|@
+ +-+@@
+ +-+@
+ |H|@
+ +-+@@
+ +-+@
+ |I|@
+ +-+@@
+ +-+@
+ |J|@
+ +-+@@
+ +-+@
+ |K|@
+ +-+@@
+ +-+@
+ |L|@
+ +-+@@
+ +-+@
+ |M|@
+ +-+@@
+ +-+@
+ |N|@
+ +-+@@
+ +-+@
+ |O|@
+ +-+@@
+ +-+@
+ |P|@
+ +-+@@
+ +-+@
+ |Q|@
+ +-+@@
+ +-+@
+ |R|@
+ +-+@@
+ +-+@
+ |S|@
+ +-+@@
+ +-+@
+ |T|@
+ +-+@@
+ +-+@
+ |U|@
+ +-+@@
+ +-+@
+ |V|@
+ +-+@@
+ +-+@
+ |W|@
+ +-+@@
+ +-+@
+ |X|@
+ +-+@@
+ +-+@
+ |Y|@
+ +-+@@
+ +-+@
+ |Z|@
+ +-+@@
+ +-+@
+ |[|@
+ +-+@@
+ +-+@
+ |\|@
+ +-+@@
+ +-+@
+ |]|@
+ +-+@@
+ +-+@
+ |^|@
+ +-+@@
+ +-+@
+ |_|@
+ +-+@@
+ +-+@
+ |`|@
+ +-+@@
+ +-+@
+ |a|@
+ +-+@@
+ +-+@
+ |b|@
+ +-+@@
+ +-+@
+ |c|@
+ +-+@@
+ +-+@
+ |d|@
+ +-+@@
+ +-+@
+ |e|@
+ +-+@@
+ +-+@
+ |f|@
+ +-+@@
+ +-+@
+ |g|@
+ +-+@@
+ +-+@
+ |h|@
+ +-+@@
+ +-+@
+ |i|@
+ +-+@@
+ +-+@
+ |j|@
+ +-+@@
+ +-+@
+ |k|@
+ +-+@@
+ +-+@
+ |l|@
+ +-+@@
+ +-+@
+ |m|@
+ +-+@@
+ +-+@
+ |n|@
+ +-+@@
+ +-+@
+ |o|@
+ +-+@@
+ +-+@
+ |p|@
+ +-+@@
+ +-+@
+ |q|@
+ +-+@@
+ +-+@
+ |r|@
+ +-+@@
+ +-+@
+ |s|@
+ +-+@@
+ +-+@
+ |t|@
+ +-+@@
+ +-+@
+ |u|@
+ +-+@@
+ +-+@
+ |v|@
+ +-+@@
+ +-+@
+ |w|@
+ +-+@@
+ +-+@
+ |x|@
+ +-+@@
+ +-+@
+ |y|@
+ +-+@@
+ +-+@
+ |z|@
+ +-+@@
+ +-+@
+ |{|@
+ +-+@@
+ +-+@
+ |||@
+ +-+@@
+ +-+@
+ |}|@
+ +-+@@
+ +-+@
+ |~|@
+ +-+@@
+ +-+@
+ |Ä|@
+ +-+@@
+ +-+@
+ |Ö|@
+ +-+@@
+ +-+@
+ |Ü|@
+ +-+@@
+ +-+@
+ |ä|@
+ +-+@@
+ +-+@
+ |ö|@
+ +-+@@
+ +-+@
+ |ü|@
+ +-+@@
+ +-+@
+ |ß|@
+ +-+@@
+128
+ +-+@
+ |€|@
+ +-+@@
+129
+ +-+@
+ ||@
+ +-+@@
+130
+ +-+@
+ |‚|@
+ +-+@@
+131
+ +-+@
+ |ƒ|@
+ +-+@@
+132
+ +-+@
+ |„|@
+ +-+@@
+133
+ +-+@
+ |…|@
+ +-+@@
+134
+ +-+@
+ |†|@
+ +-+@@
+135
+ +-+@
+ |‡|@
+ +-+@@
+136
+ +-+@
+ |ˆ|@
+ +-+@@
+137
+ +-+@
+ |‰|@
+ +-+@@
+138
+ +-+@
+ |Š|@
+ +-+@@
+139
+ +-+@
+ |‹|@
+ +-+@@
+140
+ +-+@
+ |Œ|@
+ +-+@@
+141
+ +-+@
+ ||@
+ +-+@@
+142
+ +-+@
+ |Ž|@
+ +-+@@
+143
+ +-+@
+ ||@
+ +-+@@
+144
+ +-+@
+ ||@
+ +-+@@
+145
+ +-+@
+ |‘|@
+ +-+@@
+146
+ +-+@
+ |’|@
+ +-+@@
+147
+ +-+@
+ |“|@
+ +-+@@
+148
+ +-+@
+ |”|@
+ +-+@@
+149
+ +-+@
+ |•|@
+ +-+@@
+150
+ +-+@
+ |–|@
+ +-+@@
+151
+ +-+@
+ |—|@
+ +-+@@
+152
+ +-+@
+ |˜|@
+ +-+@@
+153
+ +-+@
+ |™|@
+ +-+@@
+154
+ +-+@
+ |š|@
+ +-+@@
+155
+ +-+@
+ |›|@
+ +-+@@
+156
+ +-+@
+ |œ|@
+ +-+@@
+157
+ +-+@
+ ||@
+ +-+@@
+158
+ +-+@
+ |ž|@
+ +-+@@
+159
+ +-+@
+ |Ÿ|@
+ +-+@@
+160 NO-BREAK SPACE
+ +-+@
+ | |@
+ +-+@@
+161 INVERTED EXCLAMATION MARK
+ +-+@
+ |¡|@
+ +-+@@
+162 CENT SIGN
+ +-+@
+ |¢|@
+ +-+@@
+163 POUND SIGN
+ +-+@
+ |£|@
+ +-+@@
+164 CURRENCY SIGN
+ +-+@
+ |¤|@
+ +-+@@
+165 YEN SIGN
+ +-+@
+ |¥|@
+ +-+@@
+166 BROKEN BAR
+ +-+@
+ |¦|@
+ +-+@@
+167 SECTION SIGN
+ +-+@
+ |§|@
+ +-+@@
+168 DIAERESIS
+ +-+@
+ |¨|@
+ +-+@@
+169 COPYRIGHT SIGN
+ +-+@
+ |©|@
+ +-+@@
+170 FEMININE ORDINAL INDICATOR
+ +-+@
+ |ª|@
+ +-+@@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ +-+@
+ |«|@
+ +-+@@
+172 NOT SIGN
+ +-+@
+ |¬|@
+ +-+@@
+173 SOFT HYPHEN
+ +-+@
+ |­|@
+ +-+@@
+174 REGISTERED SIGN
+ +-+@
+ |®|@
+ +-+@@
+175 MACRON
+ +-+@
+ |¯|@
+ +-+@@
+176 DEGREE SIGN
+ +-+@
+ |°|@
+ +-+@@
+177 PLUS-MINUS SIGN
+ +-+@
+ |±|@
+ +-+@@
+178 SUPERSCRIPT TWO
+ +-+@
+ |²|@
+ +-+@@
+179 SUPERSCRIPT THREE
+ +-+@
+ |³|@
+ +-+@@
+180 ACUTE ACCENT
+ +-+@
+ |´|@
+ +-+@@
+181 MICRO SIGN
+ +-+@
+ |µ|@
+ +-+@@
+182 PILCROW SIGN
+ +-+@
+ |¶|@
+ +-+@@
+183 MIDDLE DOT
+ +-+@
+ |·|@
+ +-+@@
+184 CEDILLA
+ +-+@
+ |¸|@
+ +-+@@
+185 SUPERSCRIPT ONE
+ +-+@
+ |¹|@
+ +-+@@
+186 MASCULINE ORDINAL INDICATOR
+ +-+@
+ |º|@
+ +-+@@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ +-+@
+ |»|@
+ +-+@@
+188 VULGAR FRACTION ONE QUARTER
+ +-+@
+ |¼|@
+ +-+@@
+189 VULGAR FRACTION ONE HALF
+ +-+@
+ |½|@
+ +-+@@
+190 VULGAR FRACTION THREE QUARTERS
+ +-+@
+ |¾|@
+ +-+@@
+191 INVERTED QUESTION MARK
+ +-+@
+ |¿|@
+ +-+@@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ +-+@
+ |À|@
+ +-+@@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ +-+@
+ |Á|@
+ +-+@@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ +-+@
+ |Â|@
+ +-+@@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ +-+@
+ |Ã|@
+ +-+@@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ +-+@
+ |Ä|@
+ +-+@@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ +-+@
+ |Å|@
+ +-+@@
+198 LATIN CAPITAL LETTER AE
+ +-+@
+ |Æ|@
+ +-+@@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ +-+@
+ |Ç|@
+ +-+@@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ +-+@
+ |È|@
+ +-+@@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ +-+@
+ |É|@
+ +-+@@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ +-+@
+ |Ê|@
+ +-+@@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ +-+@
+ |Ë|@
+ +-+@@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ +-+@
+ |Ì|@
+ +-+@@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ +-+@
+ |Í|@
+ +-+@@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ +-+@
+ |Î|@
+ +-+@@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ +-+@
+ |Ï|@
+ +-+@@
+208 LATIN CAPITAL LETTER ETH
+ +-+@
+ |Ð|@
+ +-+@@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ +-+@
+ |Ñ|@
+ +-+@@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ +-+@
+ |Ò|@
+ +-+@@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ +-+@
+ |Ó|@
+ +-+@@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ +-+@
+ |Ô|@
+ +-+@@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ +-+@
+ |Õ|@
+ +-+@@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ +-+@
+ |Ö|@
+ +-+@@
+215 MULTIPLICATION SIGN
+ +-+@
+ |×|@
+ +-+@@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ +-+@
+ |Ø|@
+ +-+@@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ +-+@
+ |Ù|@
+ +-+@@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ +-+@
+ |Ú|@
+ +-+@@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ +-+@
+ |Û|@
+ +-+@@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ +-+@
+ |Ü|@
+ +-+@@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ +-+@
+ |Ý|@
+ +-+@@
+222 LATIN CAPITAL LETTER THORN
+ +-+@
+ |Þ|@
+ +-+@@
+223 LATIN SMALL LETTER SHARP S
+ +-+@
+ |ß|@
+ +-+@@
+224 LATIN SMALL LETTER A WITH GRAVE
+ +-+@
+ |à|@
+ +-+@@
+225 LATIN SMALL LETTER A WITH ACUTE
+ +-+@
+ |á|@
+ +-+@@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ +-+@
+ |â|@
+ +-+@@
+227 LATIN SMALL LETTER A WITH TILDE
+ +-+@
+ |ã|@
+ +-+@@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ +-+@
+ |ä|@
+ +-+@@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ +-+@
+ |å|@
+ +-+@@
+230 LATIN SMALL LETTER AE
+ +-+@
+ |æ|@
+ +-+@@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ +-+@
+ |ç|@
+ +-+@@
+232 LATIN SMALL LETTER E WITH GRAVE
+ +-+@
+ |è|@
+ +-+@@
+233 LATIN SMALL LETTER E WITH ACUTE
+ +-+@
+ |é|@
+ +-+@@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ +-+@
+ |ê|@
+ +-+@@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ +-+@
+ |ë|@
+ +-+@@
+236 LATIN SMALL LETTER I WITH GRAVE
+ +-+@
+ |ì|@
+ +-+@@
+237 LATIN SMALL LETTER I WITH ACUTE
+ +-+@
+ |í|@
+ +-+@@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ +-+@
+ |î|@
+ +-+@@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ +-+@
+ |ï|@
+ +-+@@
+240 LATIN SMALL LETTER ETH
+ +-+@
+ |ð|@
+ +-+@@
+241 LATIN SMALL LETTER N WITH TILDE
+ +-+@
+ |ñ|@
+ +-+@@
+242 LATIN SMALL LETTER O WITH GRAVE
+ +-+@
+ |ò|@
+ +-+@@
+243 LATIN SMALL LETTER O WITH ACUTE
+ +-+@
+ |ó|@
+ +-+@@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ +-+@
+ |ô|@
+ +-+@@
+245 LATIN SMALL LETTER O WITH TILDE
+ +-+@
+ |õ|@
+ +-+@@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ +-+@
+ |ö|@
+ +-+@@
+247 DIVISION SIGN
+ +-+@
+ |÷|@
+ +-+@@
+248 LATIN SMALL LETTER O WITH STROKE
+ +-+@
+ |ø|@
+ +-+@@
+249 LATIN SMALL LETTER U WITH GRAVE
+ +-+@
+ |ù|@
+ +-+@@
+250 LATIN SMALL LETTER U WITH ACUTE
+ +-+@
+ |ú|@
+ +-+@@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ +-+@
+ |û|@
+ +-+@@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ +-+@
+ |ü|@
+ +-+@@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ +-+@
+ |ý|@
+ +-+@@
+254 LATIN SMALL LETTER THORN
+ +-+@
+ |þ|@
+ +-+@@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ +-+@
+ |ÿ|@
+ +-+@@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+ +-+@
+ |À|@
+ +-+@@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+ +-+@
+ |à|@
+ +-+@@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+ +-+@
+ |Ã|@
+ +-+@@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+ +-+@
+ |ã|@
+ +-+@@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+ +-+@
+ |¡|@
+ +-+@@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+ +-+@
+ |±|@
+ +-+@@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+ +-+@
+ |Æ|@
+ +-+@@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+ +-+@
+ |æ|@
+ +-+@@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ +-+@
+ |Æ|@
+ +-+@@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+ +-+@
+ |æ|@
+ +-+@@
+0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+ +-+@
+ |Å|@
+ +-+@@
+0x010B LATIN SMALL LETTER C WITH DOT ABOVE
+ +-+@
+ |å|@
+ +-+@@
+0x010C LATIN CAPITAL LETTER C WITH CARON
+ +-+@
+ |È|@
+ +-+@@
+0x010D LATIN SMALL LETTER C WITH CARON
+ +-+@
+ |è|@
+ +-+@@
+0x010E LATIN CAPITAL LETTER D WITH CARON
+ +-+@
+ |Ï|@
+ +-+@@
+0x010F LATIN SMALL LETTER D WITH CARON
+ +-+@
+ |ï|@
+ +-+@@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+ +-+@
+ |Ð|@
+ +-+@@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+ +-+@
+ |ð|@
+ +-+@@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+ +-+@
+ |ª|@
+ +-+@@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+ +-+@
+ |º|@
+ +-+@@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+ +-+@
+ |Ì|@
+ +-+@@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ +-+@
+ |ì|@
+ +-+@@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+ +-+@
+ |Ê|@
+ +-+@@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+ +-+@
+ |ê|@
+ +-+@@
+0x011A LATIN CAPITAL LETTER E WITH CARON
+ +-+@
+ |Ì|@
+ +-+@@
+0x011B LATIN SMALL LETTER E WITH CARON
+ +-+@
+ |ì|@
+ +-+@@
+0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ +-+@
+ |Ø|@
+ +-+@@
+0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ +-+@
+ |ø|@
+ +-+@@
+0x011E LATIN CAPITAL LETTER G WITH BREVE
+ +-+@
+ |«|@
+ +-+@@
+0x011F LATIN SMALL LETTER G WITH BREVE
+ +-+@
+ |»|@
+ +-+@@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+ +-+@
+ |Õ|@
+ +-+@@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+ +-+@
+ |õ|@
+ +-+@@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+ +-+@
+ |«|@
+ +-+@@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+ +-+@
+ |»|@
+ +-+@@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ +-+@
+ |¦|@
+ +-+@@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+ +-+@
+ |¶|@
+ +-+@@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+ +-+@
+ |¡|@
+ +-+@@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+ +-+@
+ |±|@
+ +-+@@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+ +-+@
+ |¥|@
+ +-+@@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+ +-+@
+ |µ|@
+ +-+@@
+0x012A LATIN CAPITAL LETTER I WITH MACRON
+ +-+@
+ |Ï|@
+ +-+@@
+0x012B LATIN SMALL LETTER I WITH MACRON
+ +-+@
+ |ï|@
+ +-+@@
+0x012E LATIN CAPITAL LETTER I WITH OGONEK
+ +-+@
+ |Ç|@
+ +-+@@
+0x012F LATIN SMALL LETTER I WITH OGONEK
+ +-+@
+ |ç|@
+ +-+@@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+ +-+@
+ |©|@
+ +-+@@
+0x0131 LATIN SMALL LETTER DOTLESS I
+ +-+@
+ |¹|@
+ +-+@@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ +-+@
+ |¬|@
+ +-+@@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+ +-+@
+ |¼|@
+ +-+@@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+ +-+@
+ |Ó|@
+ +-+@@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+ +-+@
+ |ó|@
+ +-+@@
+0x0138 LATIN SMALL LETTER KRA
+ +-+@
+ |¢|@
+ +-+@@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+ +-+@
+ |Å|@
+ +-+@@
+0x013A LATIN SMALL LETTER L WITH ACUTE
+ +-+@
+ |å|@
+ +-+@@
+0x013B LATIN CAPITAL LETTER L WITH CEDILLA
+ +-+@
+ |¦|@
+ +-+@@
+0x013C LATIN SMALL LETTER L WITH CEDILLA
+ +-+@
+ |¶|@
+ +-+@@
+0x013D LATIN CAPITAL LETTER L WITH CARON
+ +-+@
+ |¥|@
+ +-+@@
+0x013E LATIN SMALL LETTER L WITH CARON
+ +-+@
+ |µ|@
+ +-+@@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+ +-+@
+ |£|@
+ +-+@@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+ +-+@
+ |³|@
+ +-+@@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+ +-+@
+ |Ñ|@
+ +-+@@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+ +-+@
+ |ñ|@
+ +-+@@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+ +-+@
+ |Ñ|@
+ +-+@@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+ +-+@
+ |ñ|@
+ +-+@@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+ +-+@
+ |Ò|@
+ +-+@@
+0x0148 LATIN SMALL LETTER N WITH CARON
+ +-+@
+ |ò|@
+ +-+@@
+0x014A LATIN CAPITAL LETTER ENG
+ +-+@
+ |½|@
+ +-+@@
+0x014B LATIN SMALL LETTER ENG
+ +-+@
+ |¿|@
+ +-+@@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+ +-+@
+ |Ò|@
+ +-+@@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ +-+@
+ |ò|@
+ +-+@@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ +-+@
+ |Õ|@
+ +-+@@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ +-+@
+ |õ|@
+ +-+@@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+ +-+@
+ |À|@
+ +-+@@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+ +-+@
+ |à|@
+ +-+@@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+ +-+@
+ |£|@
+ +-+@@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+ +-+@
+ |³|@
+ +-+@@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+ +-+@
+ |Ø|@
+ +-+@@
+0x0159 LATIN SMALL LETTER R WITH CARON
+ +-+@
+ |ø|@
+ +-+@@
+0x015A LATIN CAPITAL LETTER S WITH ACUTE
+ +-+@
+ |¦|@
+ +-+@@
+0x015B LATIN SMALL LETTER S WITH ACUTE
+ +-+@
+ |¶|@
+ +-+@@
+0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ +-+@
+ |Þ|@
+ +-+@@
+0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+ +-+@
+ |þ|@
+ +-+@@
+0x015E LATIN CAPITAL LETTER S WITH CEDILLA
+ +-+@
+ |ª|@
+ +-+@@
+0x015F LATIN SMALL LETTER S WITH CEDILLA
+ +-+@
+ |º|@
+ +-+@@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+ +-+@
+ |©|@
+ +-+@@
+0x0161 LATIN SMALL LETTER S WITH CARON
+ +-+@
+ |¹|@
+ +-+@@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+ +-+@
+ |Þ|@
+ +-+@@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+ +-+@
+ |þ|@
+ +-+@@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+ +-+@
+ |«|@
+ +-+@@
+0x0165 LATIN SMALL LETTER T WITH CARON
+ +-+@
+ |»|@
+ +-+@@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+ +-+@
+ |¬|@
+ +-+@@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+ +-+@
+ |¼|@
+ +-+@@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+ +-+@
+ |Ý|@
+ +-+@@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+ +-+@
+ |ý|@
+ +-+@@
+0x016A LATIN CAPITAL LETTER U WITH MACRON
+ +-+@
+ |Þ|@
+ +-+@@
+0x016B LATIN SMALL LETTER U WITH MACRON
+ +-+@
+ |þ|@
+ +-+@@
+0x016C LATIN CAPITAL LETTER U WITH BREVE
+ +-+@
+ |Ý|@
+ +-+@@
+0x016D LATIN SMALL LETTER U WITH BREVE
+ +-+@
+ |ý|@
+ +-+@@
+0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
+ +-+@
+ |Ù|@
+ +-+@@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ +-+@
+ |ù|@
+ +-+@@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ +-+@
+ |Û|@
+ +-+@@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ +-+@
+ |û|@
+ +-+@@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+ +-+@
+ |Ù|@
+ +-+@@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+ +-+@
+ |ù|@
+ +-+@@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+ +-+@
+ |¬|@
+ +-+@@
+0x017A LATIN SMALL LETTER Z WITH ACUTE
+ +-+@
+ |¼|@
+ +-+@@
+0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ +-+@
+ |¯|@
+ +-+@@
+0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
+ +-+@
+ |¿|@
+ +-+@@
+0x017D LATIN CAPITAL LETTER Z WITH CARON
+ +-+@
+ |®|@
+ +-+@@
+0x017E LATIN SMALL LETTER Z WITH CARON
+ +-+@
+ |¾|@
+ +-+@@
+0x02C7 CARON
+ +-+@
+ |·|@
+ +-+@@
+0x02D8 BREVE
+ +-+@
+ |¢|@
+ +-+@@
+0x02D9 DOT ABOVE
+ +-+@
+ |ÿ|@
+ +-+@@
+0x02DB OGONEK
+ +-+@
+ |²|@
+ +-+@@
+0x02DD DOUBLE ACUTE ACCENT
+ +-+@
+ |½|@
+ +-+@@
diff --git a/externals/figlet/fonts/frango.flc b/externals/figlet/fonts/frango.flc
new file mode 100644
index 0000000000..0196230a2e
--- /dev/null
+++ b/externals/figlet/fonts/frango.flc
@@ -0,0 +1,65 @@
+flc2a
+# This file can be used with a Unicode-Greek FIGfont
+# to convert "frangovlakhika" (Greek written in Latin
+# letters) into real Greek.
+#
+# The mapping is the same as that used by the "ntgreek" FIGfont.
+
+t ( \0x02BD
+t ) \0x02BC
+t : \0x0387
+t A \0x0391
+t B \0x0392
+t C \0x03A7
+t D \0x0394
+t E \0x0395
+t F \0x03A6
+t G \0x0393
+t H \0x0397
+t I \0x0399
+t J \0x03D1
+t K \0x039A
+t L \0x039B
+t M \0x039C
+t N \0x039D
+t O \0x039F
+t P \0x03A0
+t Q \0x0398
+t R \0x03A1
+t S \0x03A3
+t T \0x03A4
+t U \0x03A5
+t V \0x03C2 sigma
+t W \0x03A9
+t X \0x039E
+t Y \0x03A8
+t Z \0x0396
+t _ \0x037A
+t a \0x03b1
+t b \0x03b2
+t c \0x03C7
+t d \0x03B4
+t e \0x03B5
+t f \0x03C6
+t g \0x03B3
+t h \0x03B7
+t i \0x03B9
+t j \0x03D5
+t k \0x03BA
+t l \0x03BB
+t m \0x03BC
+t n \0x03BD
+t o \0x03BF
+t p \0x03C0
+t q \0x03B8
+t r \0x03C1
+t s \0x03C3
+t t \0x03C4
+t u \0x03C5
+t v \0x03D6
+t w \0x03C9
+t x \0x03BE
+t y \0x03C8
+t z \0x03B6
+t ' \0x00A8
+t ~ \-5
diff --git a/externals/figlet/fonts/hz.flc b/externals/figlet/fonts/hz.flc
new file mode 100644
index 0000000000..2d89e4bcf8
--- /dev/null
+++ b/externals/figlet/fonts/hz.flc
@@ -0,0 +1,4 @@
+flc2a
+# Set HZ input mode (a 7-bit encoding of GB Chinese text)
+# Meaningful only to FIGlet 2.2 beta 4 or better
+h
diff --git a/externals/figlet/fonts/ilhebrew.flc b/externals/figlet/fonts/ilhebrew.flc
new file mode 100644
index 0000000000..1b46d79563
--- /dev/null
+++ b/externals/figlet/fonts/ilhebrew.flc
@@ -0,0 +1,38 @@
+flc2a
+# implements a natural mapping from the Hebrew keyboard
+# to Hebrew letters in the Ivrit font.
+# Note that capital letters remain unchanged.
+
+t t \0x05d0
+t c \0x05d1
+t d \0x05d2
+t s \0x05d3
+t v \0x05d4
+t u \0x05d5
+t z \0x05d6
+t j \0x05d7
+t y \0x05d8
+t h \0x05d9
+t f \0x05db
+t l \0x05da
+t k \0x05dc
+t n \0x05de
+t o \0x05dd
+t b \0x05e0
+t i \0x05df
+t x \0x05e1
+t g \0x05e2
+t p \0x05e3
+t ; \0x05e4
+t m \0x05e6
+t . \0x05e5
+t e \0x05e7
+t r \0x05e8
+t a \0x05e9
+t , \0x05ea
+t ' ,
+t / .
+t ` ;
+t q /
+t w '
+t ~ \-2
diff --git a/externals/figlet/fonts/ivrit.flf b/externals/figlet/fonts/ivrit.flf
new file mode 100644
index 0000000000..69f16d4948
--- /dev/null
+++ b/externals/figlet/fonts/ivrit.flf
@@ -0,0 +1,900 @@
+flf2a$ 6 5 76 15 14 1 16271 39
+Ivrit (Hebrew) Unicode font assembled by John Cowan <cowan@ccil.org>
+Latin chars from Standard by G. Chappell & Ian Chai
+Hebrew chars from Jerusalem by Gedaliah Friedenberg <gfrieden@nyx.cs.du.edu>
+ Use "ilhebrew.flc" for Hebrew keyboard mapping
+ Use "ushebrew.flc" for U.S.-style keyboard mapping ("febrew" script)
+ Use "8859-8.flc" for ISO 8859-8 text
+ Or use UTF-8
+WARNING! FIGfonts aren't bidirectional; this is strictly right-to-left
+ (by default) even for the Latin characters.
+figlet release 2.2 -- November 1996
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ _ @
+ | |@
+ | |@
+ |_|@
+ (_)@
+ @@
+ _ _ @
+ ( | )@
+ V V @
+ $ @
+ $ @
+ @@
+ _ _ @
+ _| || |_ @
+ |_ .. _|@
+ |_ _|@
+ |_||_| @
+ @@
+ _ @
+ | | @
+ / __)@
+ \__ \@
+ ( /@
+ |_| @@
+ _ __@
+ (_)/ /@
+ / / @
+ / /_ @
+ /_/(_)@
+ @@
+ ___ @
+ ( _ ) @
+ / _ \/\@
+ | (_> <@
+ \___/\/@
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+ $ @
+ @@
+ __@
+ / /@
+ | | @
+ | | @
+ | | @
+ \_\@@
+ __ @
+ \ \ @
+ | |@
+ | |@
+ | |@
+ /_/ @@
+ @
+ __/\__@
+ \ /@
+ /_ _\@
+ \/ @
+ @@
+ @
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ @@
+ @
+ @
+ @
+ _ @
+ ( )@
+ |/ @@
+ @
+ @
+ _____ @
+ |_____|@
+ $ @
+ @@
+ @
+ @
+ @
+ _ @
+ (_)@
+ @@
+ __@
+ / /@
+ / / @
+ / / @
+ /_/ @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ @
+ / |@
+ | |@
+ | |@
+ |_|@
+ @@
+ ____ @
+ |___ \ @
+ __) |@
+ / __/ @
+ |_____|@
+ @@
+ _____ @
+ |___ / @
+ |_ \ @
+ ___) |@
+ |____/ @
+ @@
+ _ _ @
+ | || | @
+ | || |_ @
+ |__ _|@
+ |_| @
+ @@
+ ____ @
+ | ___| @
+ |___ \ @
+ ___) |@
+ |____/ @
+ @@
+ __ @
+ / /_ @
+ | '_ \ @
+ | (_) |@
+ \___/ @
+ @@
+ _____ @
+ |___ |@
+ / / @
+ / / @
+ /_/ @
+ @@
+ ___ @
+ ( _ ) @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \__, |@
+ /_/ @
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+ (_)@
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+ ( )@
+ |/ @@
+ __@
+ / /@
+ / / @
+ \ \ @
+ \_\@
+ @@
+ @
+ _____ @
+ |_____|@
+ |_____|@
+ $ @
+ @@
+ __ @
+ \ \ @
+ \ \@
+ / /@
+ /_/ @
+ @@
+ ___ @
+ |__ \@
+ / /@
+ |_| @
+ (_) @
+ @@
+ ____ @
+ / __ \ @
+ / / _` |@
+ | | (_| |@
+ \ \__,_|@
+ \____/ @@
+ _ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @@
+ ____ @
+ | __ ) @
+ | _ \ @
+ | |_) |@
+ |____/ @
+ @@
+ ____ @
+ / ___|@
+ | | @
+ | |___ @
+ \____|@
+ @@
+ ____ @
+ | _ \ @
+ | | | |@
+ | |_| |@
+ |____/ @
+ @@
+ _____ @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @@
+ _____ @
+ | ___|@
+ | |_ @
+ | _| @
+ |_| @
+ @@
+ ____ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+ _ _ @
+ | | | |@
+ | |_| |@
+ | _ |@
+ |_| |_|@
+ @@
+ ___ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+ _ @
+ | |@
+ _ | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ __@
+ | |/ /@
+ | ' / @
+ | . \ @
+ |_|\_\@
+ @@
+ _ @
+ | | @
+ | | @
+ | |___ @
+ |_____|@
+ @@
+ __ __ @
+ | \/ |@
+ | |\/| |@
+ | | | |@
+ |_| |_|@
+ @@
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | __/ @
+ |_| @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \__\_\@
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ @@
+ ____ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ |_| @
+ @@
+ _ _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ / / @
+ \ V / @
+ \_/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ /\ / / @
+ \ V V / @
+ \_/\_/ @
+ @@
+ __ __@
+ \ \/ /@
+ \ / @
+ / \ @
+ /_/\_\@
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ | | @
+ |_| @
+ @@
+ _____@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+ __ @
+ | _|@
+ | | @
+ | | @
+ | | @
+ |__|@@
+ __ @
+ \ \ @
+ \ \ @
+ \ \ @
+ \_\@
+ @@
+ __ @
+ |_ |@
+ | |@
+ | |@
+ | |@
+ |__|@@
+ /\ @
+ |/\|@
+ $ @
+ $ @
+ $ @
+ @@
+ @
+ @
+ @
+ @
+ _____ @
+ |_____|@@
+ _ @
+ ( )@
+ \|@
+ $ @
+ $ @
+ @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ _ @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+ @@
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+ _ @
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+ __ @
+ / _|@
+ | |_ @
+ | _|@
+ |_| @
+ @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+ _ @
+ | |__ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ | |@
+ _/ |@
+ |__/ @@
+ _ @
+ | | __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ @@
+ _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+ @@
+ @
+ _ __ ___ @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+ @@
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ @
+ _ __ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_| @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |_|@@
+ @
+ _ __ @
+ | '__|@
+ | | @
+ |_| @
+ @@
+ @
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ @@
+ _ @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ @@
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+ @
+ __ __@
+ \ \ / /@
+ \ V / @
+ \_/ @
+ @@
+ @
+ __ __@
+ \ \ /\ / /@
+ \ V V / @
+ \_/\_/ @
+ @@
+ @
+ __ __@
+ \ \/ /@
+ > < @
+ /_/\_\@
+ @@
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+ @
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @@
+ __@
+ / /@
+ | | @
+ < < @
+ | | @
+ \_\@@
+ _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __ @
+ \ \ @
+ | | @
+ > >@
+ | | @
+ /_/ @@
+ /\/|@
+ |/\/ @
+ $ @
+ $ @
+ $ @
+ @@
+ _ _ @
+ (_)_(_)@
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+ ___ @
+ / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_| @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+173 SOFT HYPHEN
+ @
+ @
+ _____ @
+ |_____|@
+ $ @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ___ @
+ / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_| @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x05D0 HEBREW LETTER ALEF
+ __ __@
+ \ \ / /@
+ | V / @
+ | |\ \ @
+ |_| \_\@
+ @@
+0x05D1 HEBREW LETTER BET
+ ______ @
+ |____ | @
+ | | @
+ _____| |_@
+ /________/@
+ @@
+0x05D2 HEBREW LETTER GIMEL
+ ____ @
+ |__ | @
+ | | @
+ ____| | @
+ /____/\_\@
+ @@
+0x05D3 HEBREW LETTER DALET
+ _______ @
+ |____ |@
+ | | @
+ | | @
+ |_| @
+ @@
+0x05D4 HEBREW LETTER HE
+ _______ @
+ |_____ |@
+ _ | |@
+ | | | |@
+ |_| |_|@
+ @@
+0x05D5 HEBREW LETTER VAV
+ ___ @
+ |_ |@
+ | |@
+ | |@
+ |_|@
+ @@
+0x05D6 HEBREW LETTER ZAYIN
+ ________ @
+ \__ __\@
+ | | @
+ | | @
+ |_| @
+ @@
+0x05D7 HEBREW LETTER HET
+ _______ @
+ |. __ |@
+ | | | |@
+ | | | |@
+ |_| |_|@
+ @@
+0x05D8 HEBREW LETTER TET
+ __ ___ @
+ |. | /_ |@
+ | | | |@
+ | |___| |@
+ |_______|@
+ @@
+0x05D9 HEBREW LETTER YOD
+ ___ @
+ |_ |@
+ |_|@
+ $ @
+ $ @
+ @@
+0x05DA HEBREW LETTER FINAL KAF
+ _______ @
+ |____ .|@
+ | | @
+ | | @
+ | | @
+ |_| @@
+0x05DB HEBREW LETTER KAF
+ _____ @
+ |____ \ @
+ | |@
+ ____| |@
+ |_____/ @
+ @@
+0x05DC HEBREW LETTER LAMED
+ |=|____ @
+ |____ |@
+ / / @
+ / / @
+ /_/ @
+ @@
+0x05DD HEBREW LETTER FINAL MEM
+ ________ @
+ |. ___ |@
+ | | | |@
+ | |___| |@
+ |_______|@
+ @@
+0x05DE HEBREW LETTER MEM
+ _______ @
+ |. __ |@
+ | | | |@
+ | | _| |@
+ |_||___|@
+ @@
+0x05DF HEBREW LETTER FINAL NUN
+ ___ @
+ |_ |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+0x05E0 HEBREW LETTER NUN
+ ___ @
+ |_ |@
+ | |@
+ __| |@
+ |____|@
+ @@
+0x05E1 HEBREW LETTER SAMEKH
+ _______ @
+ |. __ |@
+ | | | |@
+ | |__/ |@
+ |_____/ @
+ @@
+0x05E2 HEBREW LETTER AYIN
+ __ _ @
+ \ \ | |@
+ \ \| |@
+ __\ ` |@
+ |______|@
+ @@
+0x05E3 HEBREW LETTER FINAL PE
+ ______ @
+ | __ |@
+ | |_ | |@
+ |___|| |@
+ | |@
+ |_|@@
+0x05E4 HEBREW LETTER PE
+ _______ @
+ | ___ |@
+ \_\ | |@
+ _____| |@
+ |_______|@
+ @@
+0x05E5 HEBREW LETTER FINAL TSADI
+ __ _ @
+ |. | | |@
+ | | // @
+ | |// @
+ | | @
+ |_| @@
+0x05E6 HEBREW LETTER TSADI
+ __ __.@
+ \ \ / / @
+ \ V / @
+ ___\ \ @
+ |______| @
+ @@
+0x05E7 HEBREW LETTER QOF
+ ______ @
+ |____ |@
+ _ | |@
+ | | |_|@
+ | | @
+ |_| @@
+0x05E8 HEBREW LETTER RESH
+ ______ @
+ |____ |@
+ | |@
+ | |@
+ |_|@
+ @@
+0x05E9 HEBREW LETTER SHIN
+ _ _ _ @
+ | | | | | |@
+ | | | | | |@
+ | |/ /_/ / @
+ |_______/ @
+ @@
+0x05EA HEBREW LETTER TAV
+ ______ @
+ | __ |@
+ | | | |@
+ _| | | |@
+ |___| |_|@
+ @@
+0x2721 STAR OF DAVID
+ @
+ __/\__@
+ \ /@
+ /_ _\@
+ \/ @
+ @@
+-0x0002
+aleph = t, bet/vet = c, gimel = d, dalet = s, he = v, vav = u, zayin = z @
+het = j, tet = y, yod = h, kaf/chaf = f, final kaf = l, lamed = k, mem = n@
+final mem = o, nun = b, final nun = i, samekh = x, ayin = g, pe/fe = p, @
+final pe = ;, tsadi = m, final tsadi = ., qof = e, resh = r, shin/sin = a @
+tav = , comma = ', period = /, semicolon = `, slash = q, apostrophe = w @
+Star of David = * @@
+-0x0003
+aleph = a, bet/vet = b, gimel = g, dalet = d, he = h, vav = v, zayin = z @
+het = c, tet = t, yod = y, kaf/chaf = k, final kaf = f, lamed = l, mem = m@
+final mem = o, nun = n, final nun = i, samekh = e, ayin = _, pe/fe = p, @
+final pe = u, tsadi = j, final tsadi = w, qof = q, resh = r, shin/sin = s @
+tav = x @
+Star of David = * @@
diff --git a/externals/figlet/fonts/jis0201.flc b/externals/figlet/fonts/jis0201.flc
new file mode 100644
index 0000000000..6a32e62ef9
--- /dev/null
+++ b/externals/figlet/fonts/jis0201.flc
@@ -0,0 +1,249 @@
+# JIS X 0201 (1976) mappings for ISO 2022 usage.
+
+# Invoke JIS Roman in G0/GL, and JIS Katakana ("halfwidth" katakana, but
+# we map it to fullwidth for compatibility with existing fonts) in
+# G1/GR.
+#
+# This means that the Katakana is available in the high bytes, or you
+# can use SHIFT OUT (0x1E) to cause the low-value bytes (in the ASCII
+# code value range) to invoke Katakana characters (using SHIFT IN (0x1F)
+# to switch back). Of course, this being ISO 2022, you can also use the
+# escape sequences ESC ( I and ESC ( J to shift it in and out.
+
+g 0 94 J
+g 1 94 I
+g L 0
+g R 1
+
+# JIS Roman: ISO 646 variant just like ASCII, but with <Yen> for
+# <backslash>, and <overline> for <tilde>.
+
+0x4A0020 0x20
+0x4A0021 0x21
+0x4A0022 0x22
+0x4A0023 0x23
+0x4A0024 0x24
+0x4A0025 0x25
+0x4A0026 0x26
+0x4A0027 0x27
+0x4A0028 0x28
+0x4A0029 0x29
+0x4A002A 0x2A
+0x4A002B 0x2B
+0x4A002C 0x2C
+0x4A002D 0x2D
+0x4A002E 0x2E
+0x4A002F 0x2F
+0x4A0030 0x30
+0x4A0031 0x31
+0x4A0032 0x32
+0x4A0033 0x33
+0x4A0034 0x34
+0x4A0035 0x35
+0x4A0036 0x36
+0x4A0037 0x37
+0x4A0038 0x38
+0x4A0039 0x39
+0x4A003A 0x3A
+0x4A003B 0x3B
+0x4A003C 0x3C
+0x4A003D 0x3D
+0x4A003E 0x3E
+0x4A003F 0x3F
+0x4A0040 0x40
+0x4A0041 0x41
+0x4A0042 0x42
+0x4A0043 0x43
+0x4A0044 0x44
+0x4A0045 0x45
+0x4A0046 0x46
+0x4A0047 0x47
+0x4A0048 0x48
+0x4A0049 0x49
+0x4A004A 0x4A
+0x4A004B 0x4B
+0x4A004C 0x4C
+0x4A004D 0x4D
+0x4A004E 0x4E
+0x4A004F 0x4F
+0x4A0050 0x50
+0x4A0051 0x51
+0x4A0052 0x52
+0x4A0053 0x53
+0x4A0054 0x54
+0x4A0055 0x55
+0x4A0056 0x56
+0x4A0057 0x57
+0x4A0058 0x58
+0x4A0059 0x59
+0x4A005A 0x5A
+0x4A005B 0x5B
+0x4A005C 0xA5 # \ -> Yen
+0x4A005D 0x5D
+0x4A005E 0x5E
+0x4A005F 0x5F
+0x4A0060 0x60
+0x4A0061 0x61
+0x4A0062 0x62
+0x4A0063 0x63
+0x4A0064 0x64
+0x4A0065 0x65
+0x4A0066 0x66
+0x4A0067 0x67
+0x4A0068 0x68
+0x4A0069 0x69
+0x4A006A 0x6A
+0x4A006B 0x6B
+0x4A006C 0x6C
+0x4A006D 0x6D
+0x4A006E 0x6E
+0x4A006F 0x6F
+0x4A0070 0x70
+0x4A0071 0x71
+0x4A0072 0x72
+0x4A0073 0x73
+0x4A0074 0x74
+0x4A0075 0x75
+0x4A0076 0x76
+0x4A0077 0x77
+0x4A0078 0x78
+0x4A0079 0x79
+0x4A007A 0x7A
+0x4A007B 0x7B
+0x4A007C 0x7C
+0x4A007D 0x7D
+0x4A007E 0x203E
+
+
+# Mappings for JIS Katakana.
+
+0x490021 0x3002
+0x490022 0x300C
+0x490023 0x300D
+0x490024 0x3001
+0x490025 0x30FB
+0x490026 0x30F2
+0x490027 0x30A1
+0x490028 0x30A3
+0x490029 0x30A5
+0x49002A 0x30A7
+0x49002B 0x30A9
+0x49002C 0x30E3
+0x49002D 0x30E5
+0x49002E 0x30E7
+0x49002F 0x30C3
+0x490030 0x30FC
+0x490031 0x30A2
+0x490032 0x30A4
+0x490033 0x30A6
+0x490034 0x30A8
+0x490035 0x30AA
+0x490036 0x30AB
+0x490037 0x30AD
+0x490038 0x30AF
+0x490039 0x30B1
+0x49003A 0x30B3
+0x49003B 0x30B5
+0x49003C 0x30B7
+0x49003D 0x30B9
+0x49003E 0x30BB
+0x49003F 0x30BD
+0x490040 0x30BF
+0x490041 0x30C1
+0x490042 0x30C4
+0x490043 0x30C6
+0x490044 0x30C8
+0x490045 0x30CA
+0x490046 0x30CB
+0x490047 0x30CC
+0x490048 0x30CD
+0x490049 0x30CE
+0x49004A 0x30CF
+0x49004B 0x30D2
+0x49004C 0x30D5
+0x49004D 0x30D8
+0x49004E 0x30DB
+0x49004F 0x30DE
+0x490050 0x30DF
+0x490051 0x30E0
+0x490052 0x30E1
+0x490053 0x30E2
+0x490054 0x30E4
+0x490055 0x30E6
+0x490056 0x30E8
+0x490057 0x30E9
+0x490058 0x30EA
+0x490059 0x30EB
+0x49005A 0x30EC
+0x49005B 0x30ED
+0x49005C 0x30EF
+0x49005D 0x30F3
+0x49005E 0x309B
+0x49005F 0x309C
+
+# For reference, here's what they'd map to if we were mapping to
+# halfwidth Katakana.
+#
+# 0x490021 0xFF61
+# 0x490022 0xFF62
+# 0x490023 0xFF63
+# 0x490024 0xFF64
+# 0x490025 0xFF65
+# 0x490026 0xFF66
+# 0x490027 0xFF67
+# 0x490028 0xFF68
+# 0x490029 0xFF69
+# 0x49002A 0xFF6A
+# 0x49002B 0xFF6B
+# 0x49002C 0xFF6C
+# 0x49002D 0xFF6D
+# 0x49002E 0xFF6E
+# 0x49002F 0xFF6F
+# 0x490030 0xFF70
+# 0x490031 0xFF71
+# 0x490032 0xFF72
+# 0x490033 0xFF73
+# 0x490034 0xFF74
+# 0x490035 0xFF75
+# 0x490036 0xFF76
+# 0x490037 0xFF77
+# 0x490038 0xFF78
+# 0x490039 0xFF79
+# 0x49003A 0xFF7A
+# 0x49003B 0xFF7B
+# 0x49003C 0xFF7C
+# 0x49003D 0xFF7D
+# 0x49003E 0xFF7E
+# 0x49003F 0xFF7F
+# 0x490040 0xFF80
+# 0x490041 0xFF81
+# 0x490042 0xFF82
+# 0x490043 0xFF83
+# 0x490044 0xFF84
+# 0x490045 0xFF85
+# 0x490046 0xFF86
+# 0x490047 0xFF87
+# 0x490048 0xFF88
+# 0x490049 0xFF89
+# 0x49004A 0xFF8A
+# 0x49004B 0xFF8B
+# 0x49004C 0xFF8C
+# 0x49004D 0xFF8D
+# 0x49004E 0xFF8E
+# 0x49004F 0xFF8F
+# 0x490050 0xFF90
+# 0x490051 0xFF91
+# 0x490052 0xFF92
+# 0x490053 0xFF93
+# 0x490054 0xFF94
+# 0x490055 0xFF95
+# 0x490056 0xFF96
+# 0x490057 0xFF97
+# 0x490058 0xFF98
+# 0x490059 0xFF99
+# 0x49005A 0xFF9A
+# 0x49005B 0xFF9B
+# 0x49005C 0xFF9C
+# 0x49005D 0xFF9D
+# 0x49005E 0xFF9E
+# 0x49005F 0xFF9F
diff --git a/externals/figlet/fonts/koi8r.flc b/externals/figlet/fonts/koi8r.flc
new file mode 100644
index 0000000000..e324d8b049
--- /dev/null
+++ b/externals/figlet/fonts/koi8r.flc
@@ -0,0 +1,128 @@
+t \0x80 \0x2500
+t \0x81 \0x2502
+t \0x82 \0x250c
+t \0x83 \0x2510
+t \0x84 \0x2514
+t \0x85 \0x2518
+t \0x86 \0x251c
+t \0x87 \0x2524
+t \0x88 \0x252c
+t \0x89 \0x2534
+t \0x8a \0x253c
+t \0x8b \0x2580
+t \0x8c \0x2584
+t \0x8d \0x2588
+t \0x8e \0x258c
+t \0x8f \0x2590
+t \0x90 \0x2591
+t \0x91 \0x2592
+t \0x92 \0x2593
+t \0x93 \0x2320
+t \0x94 \0x25a0
+t \0x95 \0x2219
+t \0x96 \0x221a
+t \0x97 \0x2248
+t \0x98 \0x2264
+t \0x99 \0x2265
+t \0x9a \0x00a0
+t \0x9b \0x2321
+t \0x9c \0x00b0
+t \0x9d \0x00b2
+t \0x9e \0x00b7
+t \0x9f \0x00f7
+t \0xa0 \0x2550
+t \0xa1 \0x2551
+t \0xa2 \0x2552
+t \0xa3 \0x0451
+t \0xa4 \0x2553
+t \0xa5 \0x2554
+t \0xa6 \0x2555
+t \0xa7 \0x2556
+t \0xa8 \0x2557
+t \0xa9 \0x2558
+t \0xaa \0x2559
+t \0xab \0x255a
+t \0xac \0x255b
+t \0xad \0x255c
+t \0xae \0x255d
+t \0xaf \0x255e
+t \0xb0 \0x255f
+t \0xb1 \0x2560
+t \0xb2 \0x2561
+t \0xb3 \0x0401
+t \0xb4 \0x2562
+t \0xb5 \0x2563
+t \0xb6 \0x2564
+t \0xb7 \0x2565
+t \0xb8 \0x2566
+t \0xb9 \0x2567
+t \0xba \0x2568
+t \0xbb \0x2569
+t \0xbc \0x256a
+t \0xbd \0x256b
+t \0xbe \0x256c
+t \0xbf \0x00a9
+t \0xc0 \0x044e
+t \0xc1 \0x0430
+t \0xc2 \0x0431
+t \0xc3 \0x0446
+t \0xc4 \0x0434
+t \0xc5 \0x0435
+t \0xc6 \0x0444
+t \0xc7 \0x0433
+t \0xc8 \0x0445
+t \0xc9 \0x0438
+t \0xca \0x0439
+t \0xcb \0x043a
+t \0xcc \0x043b
+t \0xcd \0x043c
+t \0xce \0x043d
+t \0xcf \0x043e
+t \0xd0 \0x043f
+t \0xd1 \0x044f
+t \0xd2 \0x0440
+t \0xd3 \0x0441
+t \0xd4 \0x0442
+t \0xd5 \0x0443
+t \0xd6 \0x0436
+t \0xd7 \0x0432
+t \0xd8 \0x044c
+t \0xd9 \0x044b
+t \0xda \0x0437
+t \0xdb \0x0448
+t \0xdc \0x044d
+t \0xdd \0x0449
+t \0xde \0x0447
+t \0xdf \0x044a
+t \0xe0 \0x042e
+t \0xe1 \0x0410
+t \0xe2 \0x0411
+t \0xe3 \0x0426
+t \0xe4 \0x0414
+t \0xe5 \0x0415
+t \0xe6 \0x0424
+t \0xe7 \0x0413
+t \0xe8 \0x0425
+t \0xe9 \0x0418
+t \0xea \0x0419
+t \0xeb \0x041a
+t \0xec \0x041b
+t \0xed \0x041c
+t \0xee \0x041d
+t \0xef \0x041e
+t \0xf0 \0x041f
+t \0xf1 \0x042f
+t \0xf2 \0x0420
+t \0xf3 \0x0421
+t \0xf4 \0x0422
+t \0xf5 \0x0423
+t \0xf6 \0x0416
+t \0xf7 \0x0412
+t \0xf8 \0x042c
+t \0xf9 \0x042b
+t \0xfa \0x0417
+t \0xfb \0x0428
+t \0xfc \0x042d
+t \0xfd \0x0429
+t \0xfe \0x0427
+t \0xff \0x042a
diff --git a/externals/figlet/fonts/lean.flf b/externals/figlet/fonts/lean.flf
new file mode 100644
index 0000000000..7e53563c0a
--- /dev/null
+++ b/externals/figlet/fonts/lean.flf
@@ -0,0 +1,1691 @@
+flf2a$ 8 6 27 0 10 0 576 96
+Lean by Glenn Chappell 4/93 -- based on various .sig's
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $ $@
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+$ $ @@
+ $$@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ _/ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ $$ @
+ _/ _/ $@
+ _/_/_/_/_/ $ @
+ _/ _/ $ @
+_/_/_/_/_/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $@
+ _/_/_/ $ @
+ _/_/ $ @
+ _/_/ $ @
+_/_/_/ $ @
+ _/ $ @
+ $$ @@
+ $$@
+ _/_/ _/ $ @
+ _/_/ _/ $ @
+ _/ $ @
+ _/ _/_/ $ @
+_/ _/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $ @
+ _/ _/ $@
+ _/_/ _/ $ @
+_/ _/ $ @
+ _/_/ _/ $ @
+ $$ @
+ @@
+ _/ $@
+ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ _/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ _/ $ @
+ $$ @@
+ _/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @@
+ $$@
+ _/ _/ _/ $ @
+ _/_/_/ $ @
+ _/_/_/_/_/ $ @
+ _/_/_/ $ @
+_/ _/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $ @
+ _/ $@
+_/_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ @
+ @
+ @
+ @
+ $$@
+ _/ $ @
+_/ $ @
+ $$ @@
+ @
+ @
+ $$@
+_/_/_/_/_/ $ @
+ $$ @
+ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ $$@
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/_/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ $ @
+ _/_/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $@
+_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ $ @
+ $$ @
+ $$ @
+_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ $ @
+ $$ @
+ $$ @
+ _/ $ @
+_/ $ @
+ $$ @@
+ $$@
+ _/ $ @
+ _/ $ @
+_/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/_/_/_/_/ $ @
+ $$ @
+_/_/_/_/_/ $ @
+ $$ @
+ @
+ @@
+ $$ @
+ _/ $ @
+ _/ $@
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ $ @
+ _/_/ $ @
+ $$ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/_/_/ $@
+ _/ _/ $ @
+ _/ _/_/_/ _/ $ @
+ _/ _/ _/ _/ $ @
+_/ _/_/_/_/ $ @
+ _/ $ @
+ _/_/_/_/_/_/ $ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ _/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $@
+_/_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/_/ _/_/ $ @
+ _/ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/_/ _/ $ @
+ _/ _/ _/ $ @
+ _/ _/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ _/_/ $ @
+_/ _/ $ @
+ _/_/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/_/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+_/_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ _/ $ @
+ _/ _/ _/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+_/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/_/_/ $ @
+ $$ @
+ @@
+ _/_/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/ $ @
+ $$ @@
+ $$ @
+_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $@
+ _/ $ @
+ $$ @
+ @@
+ _/_/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/ $ @
+ $$ @@
+ _/ $@
+ _/ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ @
+ $$ @
+ $$@
+_/_/_/_/_/ $ @@
+ _/ $@
+ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/ $@
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/ $ @
+ _/ $ @
+_/_/_/_/ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+ $$ @
+ _/ $ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @@
+ $$ @
+ _/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/_/ _/_/ $@
+ _/ _/ _/ $ @
+ _/ _/ _/ $ @
+_/ _/ _/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @@
+ @
+ $$@
+ _/ _/_/ $ @
+ _/_/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/_/ $ @
+ _/_/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $@
+_/_/_/_/ @
+ _/ $ @
+_/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ $ @
+_/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ _/ $ @
+_/ _/ _/ $ @
+ _/ _/ _/ _/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+ @
+ $$@
+ _/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+ _/ $@
+ _/ $ @
+ _/ $ @
+_/ $ @
+ _/ $ @
+_/ $ @
+ _/ $ @
+ $$ @@
+ _/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @@
+ _/ $ @
+ _/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @@
+ _/ _/ $@
+_/ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ $ @
+ $$ @@
+160 NO-BREAK SPACE
+ $ $@
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+$ $ @@
+161 INVERTED EXCLAMATION MARK
+ $$@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+162 CENT SIGN
+ $$ @
+ _/ $@
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ $$ @@
+163 POUND SIGN
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ _/_/_/ _/ $ @
+_/_/ _/_/ $ @
+ @@
+164 CURRENCY SIGN
+ $$@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @@
+165 YEN SIGN
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/_/ $ @
+ _/ $ @
+_/_/_/_/_/ $ @
+ _/ $ @
+ $$ @@
+166 BROKEN BAR
+ _/ $@
+ _/ $ @
+ _/ $ @
+ $$ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @@
+167 SECTION SIGN
+ _/_/ $@
+ _/ $ @
+ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/ $ @
+ $$ @@
+168 DIAERESIS
+ _/ _/ $@
+ $$ @
+ $ $ @
+ $ $ @
+ $ $ @
+$ $ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ _/_/_/_/ $ @
+ _/ _/ $@
+ _/ _/_/_/ _/ $ @
+ _/ _/ _/ $ @
+ _/ _/ _/ $ @
+_/ _/_/_/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @@
+170 FEMININE ORDINAL INDICATOR
+ $$@
+ _/_/_/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+_/_/_/_/ $ @
+ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+172 NOT SIGN
+ @
+ @
+ $$@
+_/_/_/_/_/ $ @
+ _/ $ @
+ $$ @
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ $$@
+_/_/_/_/ $ @
+ $$ @
+ $$ @
+ @
+ @@
+174 REGISTERED SIGN
+ _/_/_/_/ $ @
+ _/ _/ $@
+ _/ _/_/_/ _/ $ @
+ _/ _/ _/ _/ $ @
+ _/ _/_/_/ _/ $ @
+_/ _/ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @@
+175 MACRON
+ _/_/_/_/_/ $@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+176 DEGREE SIGN
+ _/ $@
+ _/ _/ $ @
+ _/ $ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ $$ @
+ _/ $ @
+ _/ $@
+ _/_/_/_/_/ $ @
+ _/ $ @
+_/_/_/_/_/ $ @
+ $$ @
+ @@
+178 SUPERSCRIPT TWO
+ $$ @
+ _/_/ $@
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @
+ @@
+179 SUPERSCRIPT THREE
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/ $ @
+ $$ @
+ @
+ @@
+180 ACUTE ACCENT
+ _/ $@
+ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/ $ @
+_/ $ @@
+182 PILCROW SIGN
+ $$@
+ _/_/_/_/ $ @
+_/_/_/ _/ $ @
+ _/_/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+183 MIDDLE DOT
+ @
+ @
+ $$@
+ _/ $ @
+ $$ @
+$$ @
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ @
+ $$@
+ _/ $ @
+_/_/ $ @@
+185 SUPERSCRIPT ONE
+ $$@
+ _/ $ @
+_/_/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ $$ @
+_/_/_/_/ $ @
+ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $$ @
+ _/ _/ $ @
+ _/ _/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ $$ @
+ _/ _/ $@
+_/_/ _/ _/ _/ $ @
+ _/ _/ _/ _/ $@
+_/ _/ _/_/_/_/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ $$ @
+ _/ _/ $ @
+_/_/ _/ _/_/ $@
+ _/ _/ _/ $ @
+_/ _/ _/ $ @
+ _/ _/_/_/ $ @
+ $$ @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ $$ @
+ _/_/_/ _/ $@
+ _/ _/ _/ _/ $ @
+ _/ _/ _/ _/ $@
+_/_/ _/ _/_/_/_/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+191 INVERTED QUESTION MARK
+ $$@
+ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ _/ $@
+ _/ $ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _/ $@
+ _/ $ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+198 LATIN CAPITAL LETTER AE
+ $$@
+ _/_/_/_/_/_/ $ @
+ _/ _/ $ @
+ _/_/_/_/_/_/ $ @
+ _/ _/ $ @
+_/ _/_/_/_/ $ @
+ $$ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ _/ $ @
+ _/ $@
+ _/_/_/_/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _/ $ @
+ _/ $@
+ _/_/_/_/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/_/_/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ _/ $ @
+ _/ $@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _/ $@
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ _/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+_/_/_/ _/ $ @
+ _/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/ _/ $ @
+ _/ _/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ _/ $@
+ _/ $ @
+ _/_/ $@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _/ $@
+ _/ $ @
+ _/_/ $@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ $$@
+ _/ _/ $ @
+ _/ $ @
+_/ _/ $ @
+ $$ @
+ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ $$@
+ _/_/_/_/ $ @
+ _/ _/_/ $ @
+ _/ _/ _/ $ @
+ _/_/ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ _/ $@
+ _/ $ @
+ $$@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _/ $ @
+ _/ $@
+_/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ $$ @
+ _/ $ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+_/ $ @
+ $$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ $ @
+ $$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ _/ $@
+ _/ $ @
+ $$@
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ _/ $@
+ _/ _/ $ @
+ _/ $ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ $$ @
+ _/_/_/ _/_/ $@
+ _/ _/_/_/_/_/ $ @
+_/ _/_/ $ @
+ _/_/_/ _/_/_/ $ @
+ $$ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ _/ $@
+ _/ $ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _/ $@
+ _/ $ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ _/ _/ $@
+ _/ $ @
+ _/ _/ $@
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ _/_/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+247 DIVISION SIGN
+ $$ @
+ _/ $ @
+ $$@
+_/_/_/_/_/ $ @
+ $$ @
+ _/ $ @
+ $$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ $$@
+ _/_/_/ $ @
+ _/ _/_/ $ @
+ _/_/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ _/ $ @
+ _/ $ @
+ $$@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+254 LATIN SMALL LETTER THORN
+ $$ @
+ _/ $ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
diff --git a/externals/figlet/fonts/mini.flf b/externals/figlet/fonts/mini.flf
new file mode 100644
index 0000000000..3b72606ca0
--- /dev/null
+++ b/externals/figlet/fonts/mini.flf
@@ -0,0 +1,899 @@
+flf2a$ 4 3 10 0 10 0 1920 96
+Mini by Glenn Chappell 4/93
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$$@
+$$@
+$$@
+$$@@
+ @
+ |$@
+ o$@
+ @@
+ @
+ ||$@
+ @
+ @@
+ @
+ -|-|-$@
+ -|-|-$@
+ @@
+ _$@
+ (|$ @
+ _|)$@
+ @@
+ @
+ O/$@
+ /O$@
+ @@
+ @
+ ()$ @
+ (_X$@
+ @@
+ @
+ /$@
+ @
+ @@
+ @
+ /$@
+ |$ @
+ \$@@
+ @
+ \$ @
+ |$@
+ /$ @@
+ @
+ \|/$@
+ /|\$@
+ @@
+ @
+ _|_$@
+ |$ @
+ @@
+ @
+ @
+ o$@
+ /$@@
+ @
+ __$@
+ @
+ @@
+ @
+ @
+ o$@
+ @@
+ @
+ /$@
+ /$ @
+ @@
+ _$ @
+ / \$@
+ \_/$@
+ @@
+ @
+ /|$@
+ |$@
+ @@
+ _$ @
+ )$@
+ /_$@
+ @@
+ _$ @
+ _)$@
+ _)$@
+ @@
+ @
+ |_|_$@
+ |$ @
+ @@
+ _$ @
+ |_$ @
+ _)$@
+ @@
+ _$ @
+ |_$ @
+ |_)$@
+ @@
+ __$@
+ /$@
+ /$ @
+ @@
+ _$ @
+ (_)$@
+ (_)$@
+ @@
+ _$ @
+ (_|$@
+ |$@
+ @@
+ @
+ o$@
+ o$@
+ @@
+ @
+ o$@
+ o$@
+ /$@@
+ @
+ /$@
+ \$@
+ @@
+ @
+ --$@
+ --$@
+ @@
+ @
+ \$@
+ /$@
+ @@
+ _$ @
+ )$@
+ o$ @
+ @@
+ __$ @
+ / \$@
+ | (|/$@
+ \__$ @@
+ @
+ /\$ @
+ /--\$@
+ @@
+ _$ @
+ |_)$@
+ |_)$@
+ @@
+ _$@
+ /$ @
+ \_$@
+ @@
+ _$ @
+ | \$@
+ |_/$@
+ @@
+ _$@
+ |_$@
+ |_$@
+ @@
+ _$@
+ |_$@
+ |$ @
+ @@
+ __$@
+ /__$@
+ \_|$@
+ @@
+ @
+ |_|$@
+ | |$@
+ @@
+ ___$@
+ |$ @
+ _|_$@
+ @@
+ @
+ |$@
+ \_|$@
+ @@
+ @
+ |/$@
+ |\$@
+ @@
+ @
+ |$ @
+ |_$@
+ @@
+ @
+ |\/|$@
+ | |$@
+ @@
+ @
+ |\ |$@
+ | \|$@
+ @@
+ _$ @
+ / \$@
+ \_/$@
+ @@
+ _$ @
+ |_)$@
+ |$ @
+ @@
+ _$ @
+ / \$@
+ \_X$@
+ @@
+ _$ @
+ |_)$@
+ | \$@
+ @@
+ __$@
+ (_$ @
+ __)$@
+ @@
+ ___$@
+ |$ @
+ |$ @
+ @@
+ @
+ | |$@
+ |_|$@
+ @@
+ @
+ \ /$@
+ \/$ @
+ @@
+ @
+ \ /$@
+ \/\/$ @
+ @@
+ @
+ \/$@
+ /\$@
+ @@
+ @
+ \_/$@
+ |$ @
+ @@
+ __$@
+ /$@
+ /_$@
+ @@
+ _$@
+ |$ @
+ |_$@
+ @@
+ @
+ \$ @
+ \$@
+ @@
+ _$ @
+ |$@
+ _|$@
+ @@
+ /\$@
+ @
+ @
+ @@
+ @
+ @
+ @
+ __$@@
+ @
+ \$@
+ @
+ @@
+ @
+ _.$@
+ (_|$@
+ @@
+ @
+ |_$ @
+ |_)$@
+ @@
+ @
+ _$@
+ (_$@
+ @@
+ @
+ _|$@
+ (_|$@
+ @@
+ @
+ _$ @
+ (/_$@
+ @@
+ _$@
+ _|_$@
+ |$ @
+ @@
+ @
+ _$ @
+ (_|$@
+ _|$@@
+ @
+ |_$ @
+ | |$@
+ @@
+ @
+ o$@
+ |$@
+ @@
+ @
+ o$@
+ |$@
+ _|$@@
+ @
+ |$ @
+ |<$@
+ @@
+ @
+ |$@
+ |$@
+ @@
+ @
+ ._ _$ @
+ | | |$@
+ @@
+ @
+ ._$ @
+ | |$@
+ @@
+ @
+ _$ @
+ (_)$@
+ @@
+ @
+ ._$ @
+ |_)$@
+ |$ @@
+ @
+ _.$@
+ (_|$@
+ |$@@
+ @
+ ._$@
+ |$ @
+ @@
+ @
+ _$@
+ _>$@
+ @@
+ @
+ _|_$@
+ |_$@
+ @@
+ @
+ @
+ |_|$@
+ @@
+ @
+ @
+ \/$@
+ @@
+ @
+ @
+ \/\/$@
+ @@
+ @
+ @
+ ><$@
+ @@
+ @
+ @
+ \/$@
+ /$ @@
+ @
+ _$ @
+ /_$@
+ @@
+ ,-$@
+ _|$ @
+ |$ @
+ `-$@@
+ |$@
+ |$@
+ |$@
+ |$@@
+ -.$ @
+ |_$@
+ |$ @
+ -'$ @@
+ /\/$@
+ @
+ @
+ @@
+ o o$@
+ /\$ @
+ /--\$@
+ @@
+ o_o$@
+ / \$@
+ \_/$@
+ @@
+ o o$@
+ | |$@
+ |_|$@
+ @@
+ o o$@
+ _.$@
+ (_|$@
+ @@
+ o o$@
+ _$ @
+ (_)$@
+ @@
+ o o$@
+ @
+ |_|$@
+ @@
+ _$ @
+ | )$@
+ | )$@
+ |$ @@
+160 NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@@
+161 INVERTED EXCLAMATION MARK
+ @
+ o$@
+ |$@
+ @@
+162 CENT SIGN
+ @
+ |_$@
+ (__$@
+ |$ @@
+163 POUND SIGN
+ _$ @
+ _/_`$ @
+ |___$@
+ @@
+164 CURRENCY SIGN
+ @
+ `o'$@
+ ' `$@
+ @@
+165 YEN SIGN
+ @
+ _\_/_$@
+ --|--$@
+ @@
+166 BROKEN BAR
+ |$@
+ |$@
+ |$@
+ |$@@
+167 SECTION SIGN
+ _$@
+ ($ @
+ ()$@
+ _)$@@
+168 DIAERESIS
+ o o$@
+ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ _$ @
+ |C|$@
+ `-'$@
+ @@
+170 FEMININE ORDINAL INDICATOR
+ _.$@
+ (_|$@
+ ---$@
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ //$@
+ \\$@
+ @@
+172 NOT SIGN
+ @
+ __$ @
+ |$@
+ @@
+173 SOFT HYPHEN
+ @
+ _$@
+ @
+ @@
+174 REGISTERED SIGN
+ _$ @
+ |R|$@
+ `-'$@
+ @@
+175 MACRON
+ __$@
+ @
+ @
+ @@
+176 DEGREE SIGN
+ O$@
+ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ @
+ _|_$@
+ _|_$@
+ @@
+178 SUPERSCRIPT TWO
+ 2$@
+ @
+ @
+ @@
+179 SUPERSCRIPT THREE
+ 3$@
+ @
+ @
+ @@
+180 ACUTE ACCENT
+ /$@
+ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ @
+ |_|$@
+ |$ @@
+182 PILCROW SIGN
+ __$ @
+ (| |$@
+ | |$@
+ @@
+183 MIDDLE DOT
+ @
+ o$@
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ S$@@
+185 SUPERSCRIPT ONE
+ 1$@
+ @
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ _$ @
+ (_)$@
+ ---$@
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ \\$@
+ //$@
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ @
+ 1/$@
+ /4$@
+ @@
+189 VULGAR FRACTION ONE HALF
+ @
+ 1/$@
+ /2$@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ @
+ 3/$@
+ /4$@
+ @@
+191 INVERTED QUESTION MARK
+ @
+ o$@
+ (_$@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \$ @
+ /\$ @
+ /--\$@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ /$ @
+ /\$ @
+ /--\$@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\$ @
+ /\$ @
+ /--\$@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/$@
+ /\$ @
+ /--\$@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ o o$@
+ /\$ @
+ /--\$@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ O$ @
+ / \$ @
+ /---\$@
+ @@
+198 LATIN CAPITAL LETTER AE
+ _$@
+ /|_$@
+ /-|_$@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ _$@
+ /$ @
+ \_$@
+ S$@@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \_$@
+ |_$@
+ |_$@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _/$@
+ |_$ @
+ |_$ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\$@
+ |_$ @
+ |_$ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ o_o$@
+ |_$ @
+ |_$ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \__$@
+ |$ @
+ _|_$@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __/$@
+ |$ @
+ _|_$@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\$@
+ ___$@
+ _|_$@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ o_o$@
+ |$ @
+ _|_$@
+ @@
+208 LATIN CAPITAL LETTER ETH
+ _$ @
+ _|_\$@
+ |_/$@
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/$@
+ |\ |$@
+ | \|$@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \$ @
+ / \$@
+ \_/$@
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ /$ @
+ / \$@
+ \_/$@
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\$@
+ / \$@
+ \_/$@
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/$@
+ / \$@
+ \_/$@
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ o_o$@
+ / \$@
+ \_/$@
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ X$@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ __$ @
+ / /\$@
+ \/_/$@
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \$ @
+ | |$@
+ |_|$@
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ /$ @
+ | |$@
+ |_|$@
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\$@
+ | |$@
+ |_|$@
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ o o$@
+ | |$@
+ |_|$@
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ /$ @
+ \_/$@
+ |$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ |_$ @
+ |_)$@
+ |$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ _$ @
+ | )$@
+ | )$@
+ |$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \$ @
+ _.$@
+ (_|$@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ /$ @
+ _.$@
+ (_|$@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\$@
+ _.$@
+ (_|$@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/$@
+ _.$@
+ (_|$@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ o o$@
+ _.$@
+ (_|$@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ O$ @
+ _.$@
+ (_|$@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ ___$ @
+ (_|/_$@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ _$@
+ (_$@
+ S$@@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \$ @
+ _$ @
+ (/_$@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ /$ @
+ _$ @
+ (/_$@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\$@
+ _$ @
+ (/_$@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ o o$@
+ _$ @
+ (/_$@
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \$@
+ @
+ |$@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ /$@
+ @
+ |$@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\$@
+ @
+ |$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ o o$@
+ @
+ |$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ X$ @
+ \$ @
+ (_|$@
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/$@
+ ._$ @
+ | |$@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \$ @
+ _$ @
+ (_)$@
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ /$ @
+ _$ @
+ (_)$@
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\$@
+ _$ @
+ (_)$@
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/$@
+ _$ @
+ (_)$@
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ o o$@
+ _$ @
+ (_)$@
+ @@
+247 DIVISION SIGN
+ o$ @
+ ---$@
+ o$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ _$ @
+ (/)$@
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \$ @
+ @
+ |_|$@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ /$ @
+ @
+ |_|$@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\$@
+ @
+ |_|$@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ o o$@
+ @
+ |_|$@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ /$@
+ @
+ \/$@
+ /$ @@
+254 LATIN SMALL LETTER THORN
+ @
+ |_$ @
+ |_)$@
+ |$ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ oo$@
+ @
+ \/$@
+ /$ @@
diff --git a/externals/figlet/fonts/mnemonic.flf b/externals/figlet/fonts/mnemonic.flf
new file mode 100644
index 0000000000..03e4baa786
--- /dev/null
+++ b/externals/figlet/fonts/mnemonic.flf
@@ -0,0 +1,3702 @@
+flf2a$ 1 1 12 -1 5 0 0 1797
+mnemonic - a FIGfont by John Cowan <cowan@@ccil.org>
+This font uses the mnemonics of RFC1345
+(http://ds.internic.net/rfc/rfc1345.txt) to implement a really large character
+set rather crudely, but reversibly. Two-letter mnemonics
+are prefixed by &; larger mnemonics are prefixed by &_ and followed by _.
+&SP@@
+!@@
+"@@
+&Nb@@
+&DO@@
+%@@
+&@@
+'@@
+(@@
+)@@
+*@@
++@@
+,@@
+-@@
+.@@
+/@@
+0@@
+1@@
+2@@
+3@@
+4@@
+5@@
+6@@
+7@@
+8@@
+9@@
+:@@
+;@@
+<@@
+=@@
+>@@
+?@@
+&At@@
+A@@
+B@@
+C@@
+D@@
+E@@
+F@@
+G@@
+H@@
+I@@
+J@@
+K@@
+L@@
+M@@
+N@@
+O@@
+P@@
+Q@@
+R@@
+S@@
+T@@
+U@@
+V@@
+W@@
+X@@
+Y@@
+Z@@
+&<(@@
+&//@@
+&)>@@
+&'>@@
+_@@
+&'!@@
+a@@
+b@@
+c@@
+d@@
+e@@
+f@@
+g@@
+h@@
+i@@
+j@@
+k@@
+l@@
+m@@
+n@@
+o@@
+p@@
+q@@
+r@@
+s@@
+t@@
+u@@
+v@@
+w@@
+x@@
+y@@
+z@@
+&(!@@
+&!!@@
+&!)@@
+&'?@@
+&A:@@
+&O:@@
+&U:@@
+&a:@@
+&o:@@
+&u:@@
+&ss@@
+0x0001 START OF HEADING (SOH)
+&SH@@
+0x0002 START OF TEXT (STX)
+&SX@@
+0x0003 END OF TEXT (ETX)
+&EX@@
+0x0004 END OF TRANSMISSION (EOT)
+&ET@@
+0x0005 ENQUIRY (ENQ)
+&EQ@@
+0x0006 ACKNOWLEDGE (ACK)
+&AK@@
+0x0007 BELL (BEL)
+&BL@@
+0x0008 BACKSPACE (BS)
+&BS@@
+0x0009 CHARACTER TABULATION (HT)
+&HT@@
+0x000a LINE FEED (LF)
+&LF@@
+0x000b LINE TABULATION (VT)
+&VT@@
+0x000c FORM FEED (FF)
+&FF@@
+0x000d CARRIAGE RETURN (CR)
+&CR@@
+0x000e SHIFT OUT (SO)
+&SO@@
+0x000f SHIFT IN (SI)
+&SI@@
+0x0010 DATALINK ESCAPE (DLE)
+&DL@@
+0x0011 DEVICE CONTROL ONE (DC1)
+&D1@@
+0x0012 DEVICE CONTROL TWO (DC2)
+&D2@@
+0x0013 DEVICE CONTROL THREE (DC3)
+&D3@@
+0x0014 DEVICE CONTROL FOUR (DC4)
+&D4@@
+0x0015 NEGATIVE ACKNOWLEDGE (NAK)
+&NK@@
+0x0016 SYNCRONOUS IDLE (SYN)
+&SY@@
+0x0017 END OF TRANSMISSION BLOCK (ETB)
+&EB@@
+0x0018 CANCEL (CAN)
+&CN@@
+0x0019 END OF MEDIUM (EM)
+&EM@@
+0x001a SUBSTITUTE (SUB)
+&SB@@
+0x001b ESCAPE (ESC)
+&EC@@
+0x001c FILE SEPARATOR (IS4)
+&FS@@
+0x001d GROUP SEPARATOR (IS3)
+&GS@@
+0x001e RECORD SEPARATOR (IS2)
+&RS@@
+0x001f UNIT SEPARATOR (IS1)
+&US@@
+0x007f DELETE (DEL)
+&DT@@
+0x0080 PADDING CHARACTER (PAD)
+&PA@@
+0x0081 HIGH OCTET PRESET (HOP)
+&HO@@
+0x0082 BREAK PERMITTED HERE (BPH)
+&BH@@
+0x0083 NO BREAK HERE (NBH)
+&NH@@
+0x0084 INDEX (IND)
+&IN@@
+0x0085 NEXT LINE (NEL)
+&NL@@
+0x0086 START OF SELECTED AREA (SSA)
+&SA@@
+0x0087 END OF SELECTED AREA (ESA)
+&ES@@
+0x0088 CHARACTER TABULATION SET (HTS)
+&HS@@
+0x0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
+&HJ@@
+0x008a LINE TABULATION SET (VTS)
+&VS@@
+0x008b PARTIAL LINE FORWARD (PLD)
+&PD@@
+0x008c PARTIAL LINE BACKWARD (PLU)
+&PU@@
+0x008d REVERSE LINE FEED (RI)
+&RI@@
+0x008e SINGLE-SHIFT TWO (SS2)
+&S2@@
+0x008f SINGLE-SHIFT THREE (SS3)
+&S3@@
+0x0090 DEVICE CONTROL STRING (DCS)
+&DC@@
+0x0091 PRIVATE USE ONE (PU1)
+&P1@@
+0x0092 PRIVATE USE TWO (PU2)
+&P2@@
+0x0093 SET TRANSMIT STATE (STS)
+&TS@@
+0x0094 CANCEL CHARACTER (CCH)
+&CC@@
+0x0095 MESSAGE WAITING (MW)
+&MW@@
+0x0096 START OF GUARDED AREA (SPA)
+&SG@@
+0x0097 END OF GUARDED AREA (EPA)
+&EG@@
+0x0098 START OF STRING (SOS)
+&SS@@
+0x0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
+&GC@@
+0x009a SINGLE CHARACTER INTRODUCER (SCI)
+&SC@@
+0x009b CONTROL SEQUENCE INTRODUCER (CSI)
+&CI@@
+0x009c STRING TERMINATOR (ST)
+&ST@@
+0x009d OPERATING SYSTEM COMMAND (OSC)
+&OC@@
+0x009e PRIVACY MESSAGE (PM)
+&PM@@
+0x009f APPLICATION PROGRAM COMMAND (APC)
+&AC@@
+0x00a0 NO-BREAK SPACE
+&NS@@
+0x00a1 INVERTED EXCLAMATION MARK
+&!I@@
+0x00a2 CENT SIGN
+&Ct@@
+0x00a3 POUND SIGN
+&Pd@@
+0x00a4 CURRENCY SIGN
+&Cu@@
+0x00a5 YEN SIGN
+&Ye@@
+0x00a6 BROKEN BAR
+&BB@@
+0x00a7 SECTION SIGN
+&SE@@
+0x00a8 DIAERESIS
+&':@@
+0x00a9 COPYRIGHT SIGN
+&Co@@
+0x00aa FEMININE ORDINAL INDICATOR
+&-a@@
+0x00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+&<<@@
+0x00ac NOT SIGN
+&NO@@
+0x00ad SOFT HYPHEN
+&--@@
+0x00ae REGISTERED SIGN
+&Rg@@
+0x00af MACRON
+&'m@@
+0x00b0 DEGREE SIGN
+&DG@@
+0x00b1 PLUS-MINUS SIGN
+&+-@@
+0x00b2 SUPERSCRIPT TWO
+&2S@@
+0x00b3 SUPERSCRIPT THREE
+&3S@@
+0x00b4 ACUTE ACCENT
+&''@@
+0x00b5 MICRO SIGN
+&My@@
+0x00b6 PILCROW SIGN
+&PI@@
+0x00b7 MIDDLE DOT
+&.M@@
+0x00b8 CEDILLA
+&',@@
+0x00b9 SUPERSCRIPT ONE
+&1S@@
+0x00ba MASCULINE ORDINAL INDICATOR
+&-o@@
+0x00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+&>>@@
+0x00bc VULGAR FRACTION ONE QUARTER
+&14@@
+0x00bd VULGAR FRACTION ONE HALF
+&12@@
+0x00be VULGAR FRACTION THREE QUARTERS
+&34@@
+0x00bf INVERTED QUESTION MARK
+&?I@@
+0x00c0 LATIN CAPITAL LETTER A WITH GRAVE
+&A!@@
+0x00c1 LATIN CAPITAL LETTER A WITH ACUTE
+&A'@@
+0x00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+&A>@@
+0x00c3 LATIN CAPITAL LETTER A WITH TILDE
+&A?@@
+0x00c4 LATIN CAPITAL LETTER A WITH DIAERESIS
+&A:@@
+0x00c5 LATIN CAPITAL LETTER A WITH RING ABOVE
+&AA@@
+0x00c6 LATIN CAPITAL LETTER AE
+&AE@@
+0x00c7 LATIN CAPITAL LETTER C WITH CEDILLA
+&C,@@
+0x00c8 LATIN CAPITAL LETTER E WITH GRAVE
+&E!@@
+0x00c9 LATIN CAPITAL LETTER E WITH ACUTE
+&E'@@
+0x00ca LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+&E>@@
+0x00cb LATIN CAPITAL LETTER E WITH DIAERESIS
+&E:@@
+0x00cc LATIN CAPITAL LETTER I WITH GRAVE
+&I!@@
+0x00cd LATIN CAPITAL LETTER I WITH ACUTE
+&I'@@
+0x00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+&I>@@
+0x00cf LATIN CAPITAL LETTER I WITH DIAERESIS
+&I:@@
+0x00d0 LATIN CAPITAL LETTER ETH (Icelandic)
+&D-@@
+0x00d1 LATIN CAPITAL LETTER N WITH TILDE
+&N?@@
+0x00d2 LATIN CAPITAL LETTER O WITH GRAVE
+&O!@@
+0x00d3 LATIN CAPITAL LETTER O WITH ACUTE
+&O'@@
+0x00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+&O>@@
+0x00d5 LATIN CAPITAL LETTER O WITH TILDE
+&O?@@
+0x00d6 LATIN CAPITAL LETTER O WITH DIAERESIS
+&O:@@
+0x00d7 MULTIPLICATION SIGN
+&*X@@
+0x00d8 LATIN CAPITAL LETTER O WITH STROKE
+&O/@@
+0x00d9 LATIN CAPITAL LETTER U WITH GRAVE
+&U!@@
+0x00da LATIN CAPITAL LETTER U WITH ACUTE
+&U'@@
+0x00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+&U>@@
+0x00dc LATIN CAPITAL LETTER U WITH DIAERESIS
+&U:@@
+0x00dd LATIN CAPITAL LETTER Y WITH ACUTE
+&Y'@@
+0x00de LATIN CAPITAL LETTER THORN (Icelandic)
+&TH@@
+0x00df LATIN SMALL LETTER SHARP S (German)
+&ss@@
+0x00e0 LATIN SMALL LETTER A WITH GRAVE
+&a!@@
+0x00e1 LATIN SMALL LETTER A WITH ACUTE
+&a'@@
+0x00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX
+&a>@@
+0x00e3 LATIN SMALL LETTER A WITH TILDE
+&a?@@
+0x00e4 LATIN SMALL LETTER A WITH DIAERESIS
+&a:@@
+0x00e5 LATIN SMALL LETTER A WITH RING ABOVE
+&aa@@
+0x00e6 LATIN SMALL LETTER AE
+&ae@@
+0x00e7 LATIN SMALL LETTER C WITH CEDILLA
+&c,@@
+0x00e8 LATIN SMALL LETTER E WITH GRAVE
+&e!@@
+0x00e9 LATIN SMALL LETTER E WITH ACUTE
+&e'@@
+0x00ea LATIN SMALL LETTER E WITH CIRCUMFLEX
+&e>@@
+0x00eb LATIN SMALL LETTER E WITH DIAERESIS
+&e:@@
+0x00ec LATIN SMALL LETTER I WITH GRAVE
+&i!@@
+0x00ed LATIN SMALL LETTER I WITH ACUTE
+&i'@@
+0x00ee LATIN SMALL LETTER I WITH CIRCUMFLEX
+&i>@@
+0x00ef LATIN SMALL LETTER I WITH DIAERESIS
+&i:@@
+0x00f0 LATIN SMALL LETTER ETH (Icelandic)
+&d-@@
+0x00f1 LATIN SMALL LETTER N WITH TILDE
+&n?@@
+0x00f2 LATIN SMALL LETTER O WITH GRAVE
+&o!@@
+0x00f3 LATIN SMALL LETTER O WITH ACUTE
+&o'@@
+0x00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX
+&o>@@
+0x00f5 LATIN SMALL LETTER O WITH TILDE
+&o?@@
+0x00f6 LATIN SMALL LETTER O WITH DIAERESIS
+&o:@@
+0x00f7 DIVISION SIGN
+&-:@@
+0x00f8 LATIN SMALL LETTER O WITH STROKE
+&o/@@
+0x00f9 LATIN SMALL LETTER U WITH GRAVE
+&u!@@
+0x00fa LATIN SMALL LETTER U WITH ACUTE
+&u'@@
+0x00fb LATIN SMALL LETTER U WITH CIRCUMFLEX
+&u>@@
+0x00fc LATIN SMALL LETTER U WITH DIAERESIS
+&u:@@
+0x00fd LATIN SMALL LETTER Y WITH ACUTE
+&y'@@
+0x00fe LATIN SMALL LETTER THORN (Icelandic)
+&th@@
+0x00ff LATIN SMALL LETTER Y WITH DIAERESIS
+&y:@@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+&A-@@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+&a-@@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+&A(@@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+&a(@@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+&A;@@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+&a;@@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+&C'@@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+&c'@@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+&C>@@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+&c>@@
+0x010a LATIN CAPITAL LETTER C WITH DOT ABOVE
+&C.@@
+0x010b LATIN SMALL LETTER C WITH DOT ABOVE
+&c.@@
+0x010c LATIN CAPITAL LETTER C WITH CARON
+&C<@@
+0x010d LATIN SMALL LETTER C WITH CARON
+&c<@@
+0x010e LATIN CAPITAL LETTER D WITH CARON
+&D<@@
+0x010f LATIN SMALL LETTER D WITH CARON
+&d<@@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+&D/@@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+&d/@@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+&E-@@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+&e-@@
+0x0114 LATIN CAPITAL LETTER E WITH BREVE
+&E(@@
+0x0115 LATIN SMALL LETTER E WITH BREVE
+&e(@@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+&E.@@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+&e.@@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+&E;@@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+&e;@@
+0x011a LATIN CAPITAL LETTER E WITH CARON
+&E<@@
+0x011b LATIN SMALL LETTER E WITH CARON
+&e<@@
+0x011c LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+&G>@@
+0x011d LATIN SMALL LETTER G WITH CIRCUMFLEX
+&g>@@
+0x011e LATIN CAPITAL LETTER G WITH BREVE
+&G(@@
+0x011f LATIN SMALL LETTER G WITH BREVE
+&g(@@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+&G.@@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+&g.@@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+&G,@@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+&g,@@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+&H>@@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+&h>@@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+&H/@@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+&h/@@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+&I?@@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+&i?@@
+0x012a LATIN CAPITAL LETTER I WITH MACRON
+&I-@@
+0x012b LATIN SMALL LETTER I WITH MACRON
+&i-@@
+0x012c LATIN CAPITAL LETTER I WITH BREVE
+&I(@@
+0x012d LATIN SMALL LETTER I WITH BREVE
+&i(@@
+0x012e LATIN CAPITAL LETTER I WITH OGONEK
+&I;@@
+0x012f LATIN SMALL LETTER I WITH OGONEK
+&i;@@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+&I.@@
+0x0131 LATIN SMALL LETTER I DOTLESS
+&i.@@
+0x0132 LATIN CAPITAL LIGATURE IJ
+&IJ@@
+0x0133 LATIN SMALL LIGATURE IJ
+&ij@@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+&J>@@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+&j>@@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+&K,@@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+&k,@@
+0x0138 LATIN SMALL LETTER KRA (Greenlandic)
+&kk@@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+&L'@@
+0x013a LATIN SMALL LETTER L WITH ACUTE
+&l'@@
+0x013b LATIN CAPITAL LETTER L WITH CEDILLA
+&L,@@
+0x013c LATIN SMALL LETTER L WITH CEDILLA
+&l,@@
+0x013d LATIN CAPITAL LETTER L WITH CARON
+&L<@@
+0x013e LATIN SMALL LETTER L WITH CARON
+&l<@@
+0x013f LATIN CAPITAL LETTER L WITH MIDDLE DOT
+&L.@@
+0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT
+&l.@@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+&L/@@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+&l/@@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+&N'@@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+&n'@@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+&N,@@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+&n,@@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+&N<@@
+0x0148 LATIN SMALL LETTER N WITH CARON
+&n<@@
+0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+&'n@@
+0x014a LATIN CAPITAL LETTER ENG (Lappish)
+&NG@@
+0x014b LATIN SMALL LETTER ENG (Lappish)
+&ng@@
+0x014c LATIN CAPITAL LETTER O WITH MACRON
+&O-@@
+0x014d LATIN SMALL LETTER O WITH MACRON
+&o-@@
+0x014e LATIN CAPITAL LETTER O WITH BREVE
+&O(@@
+0x014f LATIN SMALL LETTER O WITH BREVE
+&o(@@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+&O"@@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+&o"@@
+0x0152 LATIN CAPITAL LIGATURE OE
+&OE@@
+0x0153 LATIN SMALL LIGATURE OE
+&oe@@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+&R'@@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+&r'@@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+&R,@@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+&r,@@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+&R<@@
+0x0159 LATIN SMALL LETTER R WITH CARON
+&r<@@
+0x015a LATIN CAPITAL LETTER S WITH ACUTE
+&S'@@
+0x015b LATIN SMALL LETTER S WITH ACUTE
+&s'@@
+0x015c LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+&S>@@
+0x015d LATIN SMALL LETTER S WITH CIRCUMFLEX
+&s>@@
+0x015e LATIN CAPITAL LETTER S WITH CEDILLA
+&S,@@
+0x015f LATIN SMALL LETTER S WITH CEDILLA
+&s,@@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+&S<@@
+0x0161 LATIN SMALL LETTER S WITH CARON
+&s<@@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+&T,@@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+&t,@@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+&T<@@
+0x0165 LATIN SMALL LETTER T WITH CARON
+&t<@@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+&T/@@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+&t/@@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+&U?@@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+&u?@@
+0x016a LATIN CAPITAL LETTER U WITH MACRON
+&U-@@
+0x016b LATIN SMALL LETTER U WITH MACRON
+&u-@@
+0x016c LATIN CAPITAL LETTER U WITH BREVE
+&U(@@
+0x016d LATIN SMALL LETTER U WITH BREVE
+&u(@@
+0x016e LATIN CAPITAL LETTER U WITH RING ABOVE
+&U0@@
+0x016f LATIN SMALL LETTER U WITH RING ABOVE
+&u0@@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+&U"@@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+&u"@@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+&U;@@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+&u;@@
+0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+&W>@@
+0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
+&w>@@
+0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+&Y>@@
+0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
+&y>@@
+0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+&Y:@@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+&Z'@@
+0x017a LATIN SMALL LETTER Z WITH ACUTE
+&z'@@
+0x017b LATIN CAPITAL LETTER Z WITH DOT ABOVE
+&Z.@@
+0x017c LATIN SMALL LETTER Z WITH DOT ABOVE
+&z.@@
+0x017d LATIN CAPITAL LETTER Z WITH CARON
+&Z<@@
+0x017e LATIN SMALL LETTER Z WITH CARON
+&z<@@
+0x01a0 LATIN CAPITAL LETTER O WITH HORN
+&O9@@
+0x01a1 LATIN SMALL LETTER O WITH HORN
+&o9@@
+0x01a2 LATIN CAPITAL LETTER OI
+&OI@@
+0x01a3 LATIN SMALL LETTER OI
+&oi@@
+0x01a6 LATIN LETTER YR
+&yr@@
+0x01af LATIN CAPITAL LETTER U WITH HORN
+&U9@@
+0x01b0 LATIN SMALL LETTER U WITH HORN
+&u9@@
+0x01b5 LATIN CAPITAL LETTER Z WITH STROKE
+&Z/@@
+0x01b6 LATIN SMALL LETTER Z WITH STROKE
+&z/@@
+0x01b7 LATIN CAPITAL LETTER EZH
+&ED@@
+0x01cd LATIN CAPITAL LETTER A WITH CARON
+&A<@@
+0x01ce LATIN SMALL LETTER A WITH CARON
+&a<@@
+0x01cf LATIN CAPITAL LETTER I WITH CARON
+&I<@@
+0x01d0 LATIN SMALL LETTER I WITH CARON
+&i<@@
+0x01d1 LATIN CAPITAL LETTER O WITH CARON
+&O<@@
+0x01d2 LATIN SMALL LETTER O WITH CARON
+&o<@@
+0x01d3 LATIN CAPITAL LETTER U WITH CARON
+&U<@@
+0x01d4 LATIN SMALL LETTER U WITH CARON
+&u<@@
+0x01d5 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+&_U:-_@@
+0x01d6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+&_u:-_@@
+0x01d7 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+&_U:'_@@
+0x01d8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+&_u:'_@@
+0x01d9 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+&_U:<_@@
+0x01da LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+&_u:<_@@
+0x01db LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+&_U:!_@@
+0x01dc LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+&_u:!_@@
+0x01de LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+&A1@@
+0x01df LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+&a1@@
+0x01e0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+&A7@@
+0x01e1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+&a7@@
+0x01e2 LATIN CAPITAL LETTER AE WITH MACRON
+&A3@@
+0x01e3 LATIN SMALL LETTER AE WITH MACRON
+&a3@@
+0x01e4 LATIN CAPITAL LETTER G WITH STROKE
+&G/@@
+0x01e5 LATIN SMALL LETTER G WITH STROKE
+&g/@@
+0x01e6 LATIN CAPITAL LETTER G WITH CARON
+&G<@@
+0x01e7 LATIN SMALL LETTER G WITH CARON
+&g<@@
+0x01e8 LATIN CAPITAL LETTER K WITH CARON
+&K<@@
+0x01e9 LATIN SMALL LETTER K WITH CARON
+&k<@@
+0x01ea LATIN CAPITAL LETTER O WITH OGONEK
+&O;@@
+0x01eb LATIN SMALL LETTER O WITH OGONEK
+&o;@@
+0x01ec LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+&O1@@
+0x01ed LATIN SMALL LETTER O WITH OGONEK AND MACRON
+&o1@@
+0x01ee LATIN CAPITAL LETTER EZH WITH CARON
+&EZ@@
+0x01ef LATIN SMALL LETTER EZH WITH CARON
+&ez@@
+0x01f0 LATIN SMALL LETTER J WITH CARON
+&j<@@
+0x01f4 LATIN CAPITAL LETTER G WITH ACUTE
+&G'@@
+0x01f5 LATIN SMALL LETTER G WITH ACUTE
+&g'@@
+0x01fa LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+&_AA'_@@
+0x01fb LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+&_aa'_@@
+0x01fc LATIN CAPITAL LETTER AE WITH ACUTE
+&_AE'_@@
+0x01fd LATIN SMALL LETTER AE WITH ACUTE
+&_ae'_@@
+0x01fe LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+&_O/'_@@
+0x01ff LATIN SMALL LETTER O WITH STROKE AND ACUTE
+&_o/'_@@
+0x02bf MODIFIER LETTER LEFT HALF RING
+&;S@@
+0x02c7 CARON
+&'<@@
+0x02d8 BREVE
+&'(@@
+0x02d9 DOT ABOVE
+&'.@@
+0x02da RING ABOVE
+&'0@@
+0x02db OGONEK
+&';@@
+0x02dd DOUBLE ACUTE ACCENT
+&'"@@
+0x0386 GREEK CAPITAL LETTER ALPHA WITH ACUTE
+&A%@@
+0x0388 GREEK CAPITAL LETTER EPSILON WITH ACUTE
+&E%@@
+0x0389 GREEK CAPITAL LETTER ETA WITH ACUTE
+&Y%@@
+0x038a GREEK CAPITAL LETTER IOTA WITH ACUTE
+&I%@@
+0x038c GREEK CAPITAL LETTER OMICRON WITH ACUTE
+&O%@@
+0x038e GREEK CAPITAL LETTER UPSILON WITH ACUTE
+&U%@@
+0x038f GREEK CAPITAL LETTER OMEGA WITH ACUTE
+&W%@@
+0x0390 GREEK SMALL LETTER IOTA WITH ACUTE AND DIAERESIS
+&i3@@
+0x0391 GREEK CAPITAL LETTER ALPHA
+&A*@@
+0x0392 GREEK CAPITAL LETTER BETA
+&B*@@
+0x0393 GREEK CAPITAL LETTER GAMMA
+&G*@@
+0x0394 GREEK CAPITAL LETTER DELTA
+&D*@@
+0x0395 GREEK CAPITAL LETTER EPSILON
+&E*@@
+0x0396 GREEK CAPITAL LETTER ZETA
+&Z*@@
+0x0397 GREEK CAPITAL LETTER ETA
+&Y*@@
+0x0398 GREEK CAPITAL LETTER THETA
+&H*@@
+0x0399 GREEK CAPITAL LETTER IOTA
+&I*@@
+0x039a GREEK CAPITAL LETTER KAPPA
+&K*@@
+0x039b GREEK CAPITAL LETTER LAMDA
+&L*@@
+0x039c GREEK CAPITAL LETTER MU
+&M*@@
+0x039d GREEK CAPITAL LETTER NU
+&N*@@
+0x039e GREEK CAPITAL LETTER XI
+&C*@@
+0x039f GREEK CAPITAL LETTER OMICRON
+&O*@@
+0x03a0 GREEK CAPITAL LETTER PI
+&P*@@
+0x03a1 GREEK CAPITAL LETTER RHO
+&R*@@
+0x03a3 GREEK CAPITAL LETTER SIGMA
+&S*@@
+0x03a4 GREEK CAPITAL LETTER TAU
+&T*@@
+0x03a5 GREEK CAPITAL LETTER UPSILON
+&U*@@
+0x03a6 GREEK CAPITAL LETTER PHI
+&F*@@
+0x03a7 GREEK CAPITAL LETTER CHI
+&X*@@
+0x03a8 GREEK CAPITAL LETTER PSI
+&Q*@@
+0x03a9 GREEK CAPITAL LETTER OMEGA
+&W*@@
+0x03aa GREEK CAPITAL LETTER IOTA WITH DIAERESIS
+&J*@@
+0x03ab GREEK CAPITAL LETTER UPSILON WITH DIAERESIS
+&V*@@
+0x03ac GREEK SMALL LETTER ALPHA WITH ACUTE
+&a%@@
+0x03ad GREEK SMALL LETTER EPSILON WITH ACUTE
+&e%@@
+0x03ae GREEK SMALL LETTER ETA WITH ACUTE
+&y%@@
+0x03af GREEK SMALL LETTER IOTA WITH ACUTE
+&i%@@
+0x03b0 GREEK SMALL LETTER UPSILON WITH ACUTE AND DIAERESIS
+&u3@@
+0x03b1 GREEK SMALL LETTER ALPHA
+&a*@@
+0x03b2 GREEK SMALL LETTER BETA
+&b*@@
+0x03b3 GREEK SMALL LETTER GAMMA
+&g*@@
+0x03b4 GREEK SMALL LETTER DELTA
+&d*@@
+0x03b5 GREEK SMALL LETTER EPSILON
+&e*@@
+0x03b6 GREEK SMALL LETTER ZETA
+&z*@@
+0x03b7 GREEK SMALL LETTER ETA
+&y*@@
+0x03b8 GREEK SMALL LETTER THETA
+&h*@@
+0x03b9 GREEK SMALL LETTER IOTA
+&i*@@
+0x03ba GREEK SMALL LETTER KAPPA
+&k*@@
+0x03bb GREEK SMALL LETTER LAMDA
+&l*@@
+0x03bc GREEK SMALL LETTER MU
+&m*@@
+0x03bd GREEK SMALL LETTER NU
+&n*@@
+0x03be GREEK SMALL LETTER XI
+&c*@@
+0x03bf GREEK SMALL LETTER OMICRON
+&o*@@
+0x03c0 GREEK SMALL LETTER PI
+&p*@@
+0x03c1 GREEK SMALL LETTER RHO
+&r*@@
+0x03c2 GREEK SMALL LETTER FINAL SIGMA
+&*s@@
+0x03c3 GREEK SMALL LETTER SIGMA
+&s*@@
+0x03c4 GREEK SMALL LETTER TAU
+&t*@@
+0x03c5 GREEK SMALL LETTER UPSILON
+&u*@@
+0x03c6 GREEK SMALL LETTER PHI
+&f*@@
+0x03c7 GREEK SMALL LETTER CHI
+&x*@@
+0x03c8 GREEK SMALL LETTER PSI
+&q*@@
+0x03c9 GREEK SMALL LETTER OMEGA
+&w*@@
+0x03ca GREEK SMALL LETTER IOTA WITH DIAERESIS
+&j*@@
+0x03cb GREEK SMALL LETTER UPSILON WITH DIAERESIS
+&v*@@
+0x03cc GREEK SMALL LETTER OMICRON WITH ACUTE
+&o%@@
+0x03cd GREEK SMALL LETTER UPSILON WITH ACUTE
+&u%@@
+0x03ce GREEK SMALL LETTER OMEGA WITH ACUTE
+&w%@@
+0x03d8 GREEK NUMERAL SIGN
+&'G@@
+0x03d9 GREEK LOWER NUMERAL SIGN
+&,G@@
+0x03da GREEK CAPITAL LETTER STIGMA
+&T3@@
+0x03db GREEK SMALL LETTER STIGMA
+&t3@@
+0x03dc GREEK CAPITAL LETTER DIGAMMA
+&M3@@
+0x03dd GREEK SMALL LETTER DIGAMMA
+&m3@@
+0x03de GREEK CAPITAL LETTER KOPPA
+&K3@@
+0x03df GREEK SMALL LETTER KOPPA
+&k3@@
+0x03e0 GREEK CAPITAL LETTER SAMPI
+&P3@@
+0x03e1 GREEK SMALL LETTER SAMPI
+&p3@@
+0x03f4 ACUTE ACCENT AND DIAERESIS (Tonos and Dialytika)
+&'%@@
+0x03f5 GREEK IOTA BELOW
+&j3@@
+0x0401 CYRILLIC CAPITAL LETTER IO
+&IO@@
+0x0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+&D%@@
+0x0403 CYRILLIC CAPITAL LETTER GJE (Macedonian)
+&G%@@
+0x0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE
+&IE@@
+0x0405 CYRILLIC CAPITAL LETTER DZE (Macedonian)
+&DS@@
+0x0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+&II@@
+0x0407 CYRILLIC CAPITAL LETTER YI (Ukrainian)
+&YI@@
+0x0408 CYRILLIC CAPITAL LETTER JE
+&J%@@
+0x0409 CYRILLIC CAPITAL LETTER LJE
+&LJ@@
+0x040a CYRILLIC CAPITAL LETTER NJE
+&NJ@@
+0x040b CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+&Ts@@
+0x040c CYRILLIC CAPITAL LETTER KJE (Macedonian)
+&KJ@@
+0x040e CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+&V%@@
+0x040f CYRILLIC CAPITAL LETTER DZHE
+&DZ@@
+0x0410 CYRILLIC CAPITAL LETTER A
+&A=@@
+0x0411 CYRILLIC CAPITAL LETTER BE
+&B=@@
+0x0412 CYRILLIC CAPITAL LETTER VE
+&V=@@
+0x0413 CYRILLIC CAPITAL LETTER GHE
+&G=@@
+0x0414 CYRILLIC CAPITAL LETTER DE
+&D=@@
+0x0415 CYRILLIC CAPITAL LETTER IE
+&E=@@
+0x0416 CYRILLIC CAPITAL LETTER ZHE
+&Z%@@
+0x0417 CYRILLIC CAPITAL LETTER ZE
+&Z=@@
+0x0418 CYRILLIC CAPITAL LETTER I
+&I=@@
+0x0419 CYRILLIC CAPITAL LETTER SHORT I
+&J=@@
+0x041a CYRILLIC CAPITAL LETTER KA
+&K=@@
+0x041b CYRILLIC CAPITAL LETTER EL
+&L=@@
+0x041c CYRILLIC CAPITAL LETTER EM
+&M=@@
+0x041d CYRILLIC CAPITAL LETTER EN
+&N=@@
+0x041e CYRILLIC CAPITAL LETTER O
+&O=@@
+0x041f CYRILLIC CAPITAL LETTER PE
+&P=@@
+0x0420 CYRILLIC CAPITAL LETTER ER
+&R=@@
+0x0421 CYRILLIC CAPITAL LETTER ES
+&S=@@
+0x0422 CYRILLIC CAPITAL LETTER TE
+&T=@@
+0x0423 CYRILLIC CAPITAL LETTER U
+&U=@@
+0x0424 CYRILLIC CAPITAL LETTER EF
+&F=@@
+0x0425 CYRILLIC CAPITAL LETTER HA
+&H=@@
+0x0426 CYRILLIC CAPITAL LETTER TSE
+&C=@@
+0x0427 CYRILLIC CAPITAL LETTER CHE
+&C%@@
+0x0428 CYRILLIC CAPITAL LETTER SHA
+&S%@@
+0x0429 CYRILLIC CAPITAL LETTER SHCHA
+&Sc@@
+0x042a CYRILLIC CAPITAL LETTER HARD SIGN
+&="@@
+0x042b CYRILLIC CAPITAL LETTER YERU
+&Y=@@
+0x042c CYRILLIC CAPITAL LETTER SOFT SIGN
+&%"@@
+0x042d CYRILLIC CAPITAL LETTER E
+&JE@@
+0x042e CYRILLIC CAPITAL LETTER YU
+&JU@@
+0x042f CYRILLIC CAPITAL LETTER YA
+&JA@@
+0x0430 CYRILLIC SMALL LETTER A
+&a=@@
+0x0431 CYRILLIC SMALL LETTER BE
+&b=@@
+0x0432 CYRILLIC SMALL LETTER VE
+&v=@@
+0x0433 CYRILLIC SMALL LETTER GHE
+&g=@@
+0x0434 CYRILLIC SMALL LETTER DE
+&d=@@
+0x0435 CYRILLIC SMALL LETTER IE
+&e=@@
+0x0436 CYRILLIC SMALL LETTER ZHE
+&z%@@
+0x0437 CYRILLIC SMALL LETTER ZE
+&z=@@
+0x0438 CYRILLIC SMALL LETTER I
+&i=@@
+0x0439 CYRILLIC SMALL LETTER SHORT I
+&j=@@
+0x043a CYRILLIC SMALL LETTER KA
+&k=@@
+0x043b CYRILLIC SMALL LETTER EL
+&l=@@
+0x043c CYRILLIC SMALL LETTER EM
+&m=@@
+0x043d CYRILLIC SMALL LETTER EN
+&n=@@
+0x043e CYRILLIC SMALL LETTER O
+&o=@@
+0x043f CYRILLIC SMALL LETTER PE
+&p=@@
+0x0440 CYRILLIC SMALL LETTER ER
+&r=@@
+0x0441 CYRILLIC SMALL LETTER ES
+&s=@@
+0x0442 CYRILLIC SMALL LETTER TE
+&t=@@
+0x0443 CYRILLIC SMALL LETTER U
+&u=@@
+0x0444 CYRILLIC SMALL LETTER EF
+&f=@@
+0x0445 CYRILLIC SMALL LETTER HA
+&h=@@
+0x0446 CYRILLIC SMALL LETTER TSE
+&c=@@
+0x0447 CYRILLIC SMALL LETTER CHE
+&c%@@
+0x0448 CYRILLIC SMALL LETTER SHA
+&s%@@
+0x0449 CYRILLIC SMALL LETTER SHCHA
+&sc@@
+0x044a CYRILLIC SMALL LETTER HARD SIGN
+&='@@
+0x044b CYRILLIC SMALL LETTER YERU
+&y=@@
+0x044c CYRILLIC SMALL LETTER SOFT SIGN
+&%'@@
+0x044d CYRILLIC SMALL LETTER E
+&je@@
+0x044e CYRILLIC SMALL LETTER YU
+&ju@@
+0x044f CYRILLIC SMALL LETTER YA
+&ja@@
+0x0451 CYRILLIC SMALL LETTER IO
+&io@@
+0x0452 CYRILLIC SMALL LETTER DJE (Serbocroatian)
+&d%@@
+0x0453 CYRILLIC SMALL LETTER GJE (Macedonian)
+&g%@@
+0x0454 CYRILLIC SMALL LETTER UKRAINIAN IE
+&ie@@
+0x0455 CYRILLIC SMALL LETTER DZE (Macedonian)
+&ds@@
+0x0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+&ii@@
+0x0457 CYRILLIC SMALL LETTER YI (Ukrainian)
+&yi@@
+0x0458 CYRILLIC SMALL LETTER JE
+&j%@@
+0x0459 CYRILLIC SMALL LETTER LJE
+&lj@@
+0x045a CYRILLIC SMALL LETTER NJE
+&nj@@
+0x045b CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+&ts@@
+0x045c CYRILLIC SMALL LETTER KJE (Macedonian)
+&kj@@
+0x045e CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+&v%@@
+0x045f CYRILLIC SMALL LETTER DZHE
+&dz@@
+0x0462 CYRILLIC CAPITAL LETTER YAT
+&Y3@@
+0x0463 CYRILLIC SMALL LETTER YAT
+&y3@@
+0x046a CYRILLIC CAPITAL LETTER BIG YUS
+&O3@@
+0x046b CYRILLIC SMALL LETTER BIG YUS
+&o3@@
+0x0472 CYRILLIC CAPITAL LETTER FITA
+&F3@@
+0x0473 CYRILLIC SMALL LETTER FITA
+&f3@@
+0x0474 CYRILLIC CAPITAL LETTER IZHITSA
+&V3@@
+0x0475 CYRILLIC SMALL LETTER IZHITSA
+&v3@@
+0x0480 CYRILLIC CAPITAL LETTER KOPPA
+&C3@@
+0x0481 CYRILLIC SMALL LETTER KOPPA
+&c3@@
+0x0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+&G3@@
+0x0491 CYRILLIC SMALL LETTER GHE WITH UPTURN
+&g3@@
+0x05d0 HEBREW LETTER ALEF
+&A+@@
+0x05d1 HEBREW LETTER BET
+&B+@@
+0x05d2 HEBREW LETTER GIMEL
+&G+@@
+0x05d3 HEBREW LETTER DALET
+&D+@@
+0x05d4 HEBREW LETTER HE
+&H+@@
+0x05d5 HEBREW LETTER VAV
+&W+@@
+0x05d6 HEBREW LETTER ZAYIN
+&Z+@@
+0x05d7 HEBREW LETTER HET
+&X+@@
+0x05d8 HEBREW LETTER TET
+&Tj@@
+0x05d9 HEBREW LETTER YOD
+&J+@@
+0x05da HEBREW LETTER FINAL KAF
+&K%@@
+0x05db HEBREW LETTER KAF
+&K+@@
+0x05dc HEBREW LETTER LAMED
+&L+@@
+0x05dd HEBREW LETTER FINAL MEM
+&M%@@
+0x05de HEBREW LETTER MEM
+&M+@@
+0x05df HEBREW LETTER FINAL NUN
+&N%@@
+0x05e0 HEBREW LETTER NUN
+&N+@@
+0x05e1 HEBREW LETTER SAMEKH
+&S+@@
+0x05e2 HEBREW LETTER AYIN
+&E+@@
+0x05e3 HEBREW LETTER FINAL PE
+&P%@@
+0x05e4 HEBREW LETTER PE
+&P+@@
+0x05e5 HEBREW LETTER FINAL TSADI
+&Zj@@
+0x05e6 HEBREW LETTER TSADI
+&ZJ@@
+0x05e7 HEBREW LETTER QOF
+&Q+@@
+0x05e8 HEBREW LETTER RESH
+&R+@@
+0x05e9 HEBREW LETTER SHIN
+&Sh@@
+0x05ea HEBREW LETTER TAV
+&T+@@
+0x060c ARABIC COMMA
+&,+@@
+0x061b ARABIC SEMICOLON
+&;+@@
+0x061f ARABIC QUESTION MARK
+&?+@@
+0x0621 ARABIC LETTER HAMZA
+&H'@@
+0x0622 ARABIC LETTER ALEF WITH MADDA ABOVE
+&aM@@
+0x0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
+&aH@@
+0x0624 ARABIC LETTER WAW WITH HAMZA ABOVE
+&wH@@
+0x0625 ARABIC LETTER ALEF WITH HAMZA BELOW
+&ah@@
+0x0626 ARABIC LETTER YEH WITH HAMZA ABOVE
+&yH@@
+0x0627 ARABIC LETTER ALEF
+&a+@@
+0x0628 ARABIC LETTER BEH
+&b+@@
+0x0629 ARABIC LETTER TEH MARBUTA
+&tm@@
+0x062a ARABIC LETTER TEH
+&t+@@
+0x062b ARABIC LETTER THEH
+&tk@@
+0x062c ARABIC LETTER JEEM
+&g+@@
+0x062d ARABIC LETTER HAH
+&hk@@
+0x062e ARABIC LETTER KHAH
+&x+@@
+0x062f ARABIC LETTER DAL
+&d+@@
+0x0630 ARABIC LETTER THAL
+&dk@@
+0x0631 ARABIC LETTER REH
+&r+@@
+0x0632 ARABIC LETTER ZAIN
+&z+@@
+0x0633 ARABIC LETTER SEEN
+&s+@@
+0x0634 ARABIC LETTER SHEEN
+&sn@@
+0x0635 ARABIC LETTER SAD
+&c+@@
+0x0636 ARABIC LETTER DAD
+&dd@@
+0x0637 ARABIC LETTER TAH
+&tj@@
+0x0638 ARABIC LETTER ZAH
+&zH@@
+0x0639 ARABIC LETTER AIN
+&e+@@
+0x063a ARABIC LETTER GHAIN
+&i+@@
+0x0640 ARABIC TATWEEL
+&++@@
+0x0641 ARABIC LETTER FEH
+&f+@@
+0x0642 ARABIC LETTER QAF
+&q+@@
+0x0643 ARABIC LETTER KAF
+&k+@@
+0x0644 ARABIC LETTER LAM
+&l+@@
+0x0645 ARABIC LETTER MEEM
+&m+@@
+0x0646 ARABIC LETTER NOON
+&n+@@
+0x0647 ARABIC LETTER HEH
+&h+@@
+0x0648 ARABIC LETTER WAW
+&w+@@
+0x0649 ARABIC LETTER ALEF MAKSURA
+&j+@@
+0x064a ARABIC LETTER YEH
+&y+@@
+0x064b ARABIC FATHATAN
+&:+@@
+0x064c ARABIC DAMMATAN
+&"+@@
+0x064d ARABIC KASRATAN
+&=+@@
+0x064e ARABIC FATHA
+&/+@@
+0x064f ARABIC DAMMA
+&'+@@
+0x0650 ARABIC KASRA
+&1+@@
+0x0651 ARABIC SHADDA
+&3+@@
+0x0652 ARABIC SUKUN
+&0+@@
+0x0670 SUPERSCRIPT ARABIC LETTER ALEF
+&aS@@
+0x067e ARABIC LETTER PEH
+&p+@@
+0x06a4 ARABIC LETTER VEH
+&v+@@
+0x06af ARABIC LETTER GAF
+&gf@@
+0x06f0 EASTERN ARABIC-INDIC DIGIT ZERO
+&0a@@
+0x06f1 EASTERN ARABIC-INDIC DIGIT ONE
+&1a@@
+0x06f2 EASTERN ARABIC-INDIC DIGIT TWO
+&2a@@
+0x06f3 EASTERN ARABIC-INDIC DIGIT THREE
+&3a@@
+0x06f4 EASTERN ARABIC-INDIC DIGIT FOUR
+&4a@@
+0x06f5 EASTERN ARABIC-INDIC DIGIT FIVE
+&5a@@
+0x06f6 EASTERN ARABIC-INDIC DIGIT SIX
+&6a@@
+0x06f7 EASTERN ARABIC-INDIC DIGIT SEVEN
+&7a@@
+0x06f8 EASTERN ARABIC-INDIC DIGIT EIGHT
+&8a@@
+0x06f9 EASTERN ARABIC-INDIC DIGIT NINE
+&9a@@
+0x1e00 LATIN CAPITAL LETTER A WITH RING BELOW
+&_A-0_@@
+0x1e01 LATIN SMALL LETTER A WITH RING BELOW
+&_a-0_@@
+0x1e02 LATIN CAPITAL LETTER B WITH DOT ABOVE
+&B.@@
+0x1e03 LATIN SMALL LETTER B WITH DOT ABOVE
+&b.@@
+0x1e04 LATIN CAPITAL LETTER B WITH DOT BELOW
+&_B-._@@
+0x1e05 LATIN SMALL LETTER B WITH DOT BELOW
+&_b-._@@
+0x1e06 LATIN CAPITAL LETTER B WITH LINE BELOW
+&B_@@
+0x1e07 LATIN SMALL LETTER B WITH LINE BELOW
+&b_@@
+0x1e08 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+&_C,'_@@
+0x1e09 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+&_c,'_@@
+0x1e0a LATIN CAPITAL LETTER D WITH DOT ABOVE
+&D.@@
+0x1e0b LATIN SMALL LETTER D WITH DOT ABOVE
+&d.@@
+0x1e0c LATIN CAPITAL LETTER D WITH DOT BELOW
+&_D-._@@
+0x1e0d LATIN SMALL LETTER D WITH DOT BELOW
+&_d-._@@
+0x1e0e LATIN CAPITAL LETTER D WITH LINE BELOW
+&D_@@
+0x1e0f LATIN SMALL LETTER D WITH LINE BELOW
+&d_@@
+0x1e10 LATIN CAPITAL LETTER D WITH CEDILLA
+&D,@@
+0x1e11 LATIN SMALL LETTER D WITH CEDILLA
+&d,@@
+0x1e12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+&_D->_@@
+0x1e13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+&_d->_@@
+0x1e14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+&_E-!_@@
+0x1e15 LATIN SMALL LETTER E WITH MACRON AND GRAVE
+&_e-!_@@
+0x1e16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+&_E-'_@@
+0x1e17 LATIN SMALL LETTER E WITH MACRON AND ACUTE
+&_e-'_@@
+0x1e18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+&_E->_@@
+0x1e19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+&_e->_@@
+0x1e1a LATIN CAPITAL LETTER E WITH TILDE BELOW
+&_E-?_@@
+0x1e1b LATIN SMALL LETTER E WITH TILDE BELOW
+&_e-?_@@
+0x1e1c LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+&_E,(_@@
+0x1e1d LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+&_e,(_@@
+0x1e1e LATIN CAPITAL LETTER F WITH DOT ABOVE
+&F.@@
+0x1e1f LATIN SMALL LETTER F WITH DOT ABOVE
+&f.@@
+0x1e20 LATIN CAPITAL LETTER G WITH MACRON
+&G-@@
+0x1e21 LATIN SMALL LETTER G WITH MACRON
+&g-@@
+0x1e22 LATIN CAPITAL LETTER H WITH DOT ABOVE
+&H.@@
+0x1e23 LATIN SMALL LETTER H WITH DOT ABOVE
+&h.@@
+0x1e24 LATIN CAPITAL LETTER H WITH DOT BELOW
+&_H-._@@
+0x1e25 LATIN SMALL LETTER H WITH DOT BELOW
+&_h-._@@
+0x1e26 LATIN CAPITAL LETTER H WITH DIAERESIS
+&H:@@
+0x1e27 LATIN SMALL LETTER H WITH DIAERESIS
+&h:@@
+0x1e28 LATIN CAPITAL LETTER H WITH CEDILLA
+&H,@@
+0x1e29 LATIN SMALL LETTER H WITH CEDILLA
+&h,@@
+0x1e2a LATIN CAPITAL LETTER H WITH BREVE BELOW
+&_H-(_@@
+0x1e2b LATIN SMALL LETTER H WITH BREVE BELOW
+&_h-(_@@
+0x1e2c LATIN CAPITAL LETTER I WITH TILDE BELOW
+&_I-?_@@
+0x1e2d LATIN SMALL LETTER I WITH TILDE BELOW
+&_i-?_@@
+0x1e2e LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+&_I:'_@@
+0x1e2f LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+&_i:'_@@
+0x1e30 LATIN CAPITAL LETTER K WITH ACUTE
+&K'@@
+0x1e31 LATIN SMALL LETTER K WITH ACUTE
+&k'@@
+0x1e32 LATIN CAPITAL LETTER K WITH DOT BELOW
+&_K-._@@
+0x1e33 LATIN SMALL LETTER K WITH DOT BELOW
+&_k-._@@
+0x1e34 LATIN CAPITAL LETTER K WITH LINE BELOW
+&K_@@
+0x1e35 LATIN SMALL LETTER K WITH LINE BELOW
+&k_@@
+0x1e36 LATIN CAPITAL LETTER L WITH DOT BELOW
+&_L-._@@
+0x1e37 LATIN SMALL LETTER L WITH DOT BELOW
+&_l-._@@
+0x1e38 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+&_L--._@@
+0x1e39 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+&_l--._@@
+0x1e3a LATIN CAPITAL LETTER L WITH LINE BELOW
+&L_@@
+0x1e3b LATIN SMALL LETTER L WITH LINE BELOW
+&l_@@
+0x1e3c LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+&_L->_@@
+0x1e3d LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+&_l->_@@
+0x1e3e LATIN CAPITAL LETTER M WITH ACUTE
+&M'@@
+0x1e3f LATIN SMALL LETTER M WITH ACUTE
+&m'@@
+0x1e40 LATIN CAPITAL LETTER M WITH DOT ABOVE
+&M.@@
+0x1e41 LATIN SMALL LETTER M WITH DOT ABOVE
+&m.@@
+0x1e42 LATIN CAPITAL LETTER M WITH DOT BELOW
+&_M-._@@
+0x1e43 LATIN SMALL LETTER M WITH DOT BELOW
+&_m-._@@
+0x1e44 LATIN CAPITAL LETTER N WITH DOT ABOVE
+&N.@@
+0x1e45 LATIN SMALL LETTER N WITH DOT ABOVE
+&n.@@
+0x1e46 LATIN CAPITAL LETTER N WITH DOT BELOW
+&_N-._@@
+0x1e47 LATIN SMALL LETTER N WITH DOT BELOW
+&_n-._@@
+0x1e48 LATIN CAPITAL LETTER N WITH LINE BELOW
+&N_@@
+0x1e49 LATIN SMALL LETTER N WITH LINE BELOW
+&n_@@
+0x1e4a LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+&_N->_@@
+0x1e4b LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+&_N->_@@
+0x1e4c LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+&_O?'_@@
+0x1e4d LATIN SMALL LETTER O WITH TILDE AND ACUTE
+&_o?'_@@
+0x1e4e LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+&_O?:_@@
+0x1e4f LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+&_o?:_@@
+0x1e50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+&_O-!_@@
+0x1e51 LATIN SMALL LETTER O WITH MACRON AND GRAVE
+&_o-!_@@
+0x1e52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+&_O-'_@@
+0x1e53 LATIN SMALL LETTER O WITH MACRON AND ACUTE
+&_o-'_@@
+0x1e54 LATIN CAPITAL LETTER P WITH ACUTE
+&P'@@
+0x1e55 LATIN SMALL LETTER P WITH ACUTE
+&p'@@
+0x1e56 LATIN CAPITAL LETTER P WITH DOT ABOVE
+&P.@@
+0x1e57 LATIN SMALL LETTER P WITH DOT ABOVE
+&p.@@
+0x1e58 LATIN CAPITAL LETTER R WITH DOT ABOVE
+&R.@@
+0x1e59 LATIN SMALL LETTER R WITH DOT ABOVE
+&r.@@
+0x1e5a LATIN CAPITAL LETTER R WITH DOT BELOW
+&_R-._@@
+0x1e5b LATIN SMALL LETTER R WITH DOT BELOW
+&_r-._@@
+0x1e5c LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+&_R--._@@
+0x1e5d LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+&_r--._@@
+0x1e5e LATIN CAPITAL LETTER R WITH LINE BELOW
+&R_@@
+0x1e5f LATIN SMALL LETTER R WITH LINE BELOW
+&r_@@
+0x1e60 LATIN CAPITAL LETTER S WITH DOT ABOVE
+&S.@@
+0x1e61 LATIN SMALL LETTER S WITH DOT ABOVE
+&s.@@
+0x1e62 LATIN CAPITAL LETTER S WITH DOT BELOW
+&_S-._@@
+0x1e63 LATIN SMALL LETTER S WITH DOT BELOW
+&_s-._@@
+0x1e64 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+&_S'._@@
+0x1e65 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+&_s'._@@
+0x1e66 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+&_S<._@@
+0x1e67 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+&_s<._@@
+0x1e68 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+&_S.-._@@
+0x1e69 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+&_S.-._@@
+0x1e6a LATIN CAPITAL LETTER T WITH DOT ABOVE
+&T.@@
+0x1e6b LATIN SMALL LETTER T WITH DOT ABOVE
+&t.@@
+0x1e6c LATIN CAPITAL LETTER T WITH DOT BELOW
+&_T-._@@
+0x1e6d LATIN SMALL LETTER T WITH DOT BELOW
+&_t-._@@
+0x1e6e LATIN CAPITAL LETTER T WITH LINE BELOW
+&T_@@
+0x1e6f LATIN SMALL LETTER T WITH LINE BELOW
+&t_@@
+0x1e70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+&_T->_@@
+0x1e71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+&_t->_@@
+0x1e72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+&_U--:_@@
+0x1e73 LATIN SMALL LETTER U WITH DIAERESIS BELOW
+&_u--:_@@
+0x1e74 LATIN CAPITAL LETTER U WITH TILDE BELOW
+&_U-?_@@
+0x1e75 LATIN SMALL LETTER U WITH TILDE BELOW
+&_u-?_@@
+0x1e76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+&_U->_@@
+0x1e77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+&_u->_@@
+0x1e78 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+&_U?'_@@
+0x1e79 LATIN SMALL LETTER U WITH TILDE AND ACUTE
+&_u?'_@@
+0x1e7a LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+&_U-:_@@
+0x1e7b LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+&_u-:_@@
+0x1e7c LATIN CAPITAL LETTER V WITH TILDE
+&V?@@
+0x1e7d LATIN SMALL LETTER V WITH TILDE
+&v?@@
+0x1e7e LATIN CAPITAL LETTER V WITH DOT BELOW
+&_V-._@@
+0x1e7f LATIN SMALL LETTER V WITH DOT BELOW
+&_v-._@@
+0x1e80 LATIN CAPITAL LETTER W WITH GRAVE
+&W!@@
+0x1e81 LATIN SMALL LETTER W WITH GRAVE
+&w!@@
+0x1e82 LATIN CAPITAL LETTER W WITH ACUTE
+&W'@@
+0x1e83 LATIN SMALL LETTER W WITH ACUTE
+&w'@@
+0x1e84 LATIN CAPITAL LETTER W WITH DIAERESIS
+&W:@@
+0x1e85 LATIN SMALL LETTER W WITH DIAERESIS
+&w:@@
+0x1e86 LATIN CAPITAL LETTER W WITH DOT ABOVE
+&W.@@
+0x1e87 LATIN SMALL LETTER W WITH DOT ABOVE
+&w.@@
+0x1e88 LATIN CAPITAL LETTER W WITH DOT BELOW
+&_W-._@@
+0x1e89 LATIN SMALL LETTER W WITH DOT BELOW
+&_w-._@@
+0x1e8a LATIN CAPITAL LETTER X WITH DOT ABOVE
+&X.@@
+0x1e8b LATIN SMALL LETTER X WITH DOT ABOVE
+&x.@@
+0x1e8c LATIN CAPITAL LETTER X WITH DIAERESIS
+&X:@@
+0x1e8d LATIN SMALL LETTER X WITH DIAERESIS
+&x:@@
+0x1e8e LATIN CAPITAL LETTER Y WITH DOT ABOVE
+&Y.@@
+0x1e8f LATIN SMALL LETTER Y WITH DOT ABOVE
+&y.@@
+0x1e90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+&Z>@@
+0x1e91 LATIN SMALL LETTER Z WITH CIRCUMFLEX
+&z>@@
+0x1e92 LATIN CAPITAL LETTER Z WITH DOT BELOW
+&_Z-._@@
+0x1e93 LATIN SMALL LETTER Z WITH DOT BELOW
+&_z-._@@
+0x1e94 LATIN CAPITAL LETTER Z WITH LINE BELOW
+&Z_@@
+0x1e95 LATIN SMALL LETTER Z WITH LINE BELOW
+&z_@@
+0x1e96 LATIN SMALL LETTER H WITH LINE BELOW
+&h_@@
+0x1e97 LATIN SMALL LETTER T WITH DIAERESIS
+&t:@@
+0x1e98 LATIN SMALL LETTER W WITH RING ABOVE
+&w0@@
+0x1e99 LATIN SMALL LETTER Y WITH RING ABOVE
+&y0@@
+0x1ea0 LATIN CAPITAL LETTER A WITH DOT BELOW
+&_A-._@@
+0x1ea1 LATIN SMALL LETTER A WITH DOT BELOW
+&_a-._@@
+0x1ea2 LATIN CAPITAL LETTER A WITH HOOK ABOVE
+&A2@@
+0x1ea3 LATIN SMALL LETTER A WITH HOOK ABOVE
+&a2@@
+0x1ea4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+&_A>'_@@
+0x1ea5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+&_a>'_@@
+0x1ea6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+&_A>!_@@
+0x1ea7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+&_a>!_@@
+0x1ea8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+&_A>2_@@
+0x1ea9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+&_a>2_@@
+0x1eaa LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+&_A>?_@@
+0x1eab LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+&_a>?_@@
+0x1eac LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+&_A>-._@@
+0x1ead LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+&_a>-._@@
+0x1eae LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+&_A('_@@
+0x1eaf LATIN SMALL LETTER A WITH BREVE AND ACUTE
+&_a('_@@
+0x1eb0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+&_A(!_@@
+0x1eb1 LATIN SMALL LETTER A WITH BREVE AND GRAVE
+&_a(!_@@
+0x1eb2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+&_A(2_@@
+0x1eb3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+&_a(2_@@
+0x1eb4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+&_A(?_@@
+0x1eb5 LATIN SMALL LETTER A WITH BREVE AND TILDE
+&_a(?_@@
+0x1eb6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+&_A(-._@@
+0x1eb7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+&_a(-._@@
+0x1eb8 LATIN CAPITAL LETTER E WITH DOT BELOW
+&_E-._@@
+0x1eb9 LATIN SMALL LETTER E WITH DOT BELOW
+&_e-._@@
+0x1eba LATIN CAPITAL LETTER E WITH HOOK ABOVE
+&E2@@
+0x1ebb LATIN SMALL LETTER E WITH HOOK ABOVE
+&e2@@
+0x1ebc LATIN CAPITAL LETTER E WITH TILDE
+&E?@@
+0x1ebd LATIN SMALL LETTER E WITH TILDE
+&e?@@
+0x1ebe LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+&_E>'_@@
+0x1ebf LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+&_e>'_@@
+0x1ec0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+&_E>!_@@
+0x1ec1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+&_e>!_@@
+0x1ec2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+&_E>2_@@
+0x1ec3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+&_e>2_@@
+0x1ec4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+&_E>?_@@
+0x1ec5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+&_e>?_@@
+0x1ec6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+&_E>-._@@
+0x1ec7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+&_e>-._@@
+0x1ec8 LATIN CAPITAL LETTER I WITH HOOK ABOVE
+&I2@@
+0x1ec9 LATIN SMALL LETTER I WITH HOOK ABOVE
+&i2@@
+0x1eca LATIN CAPITAL LETTER I WITH DOT BELOW
+&_I-._@@
+0x1ecb LATIN SMALL LETTER I WITH DOT BELOW
+&_i-._@@
+0x1ecc LATIN CAPITAL LETTER O WITH DOT BELOW
+&_O-._@@
+0x1ecd LATIN SMALL LETTER O WITH DOT BELOW
+&_o-._@@
+0x1ece LATIN CAPITAL LETTER O WITH HOOK ABOVE
+&O2@@
+0x1ecf LATIN SMALL LETTER O WITH HOOK ABOVE
+&o2@@
+0x1ed0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+&_O>'_@@
+0x1ed1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+&_o>'_@@
+0x1ed2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+&_O>!_@@
+0x1ed3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+&_o>!_@@
+0x1ed4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+&_O>2_@@
+0x1ed5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+&_o>2_@@
+0x1ed6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+&_O>?_@@
+0x1ed7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+&_o>?_@@
+0x1ed8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+&_O>-._@@
+0x1ed9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+&_o>-._@@
+0x1eda LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+&_O9'_@@
+0x1edb LATIN SMALL LETTER O WITH HORN AND ACUTE
+&_o9'_@@
+0x1edc LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+&_O9!_@@
+0x1edd LATIN SMALL LETTER O WITH HORN AND GRAVE
+&_o9!_@@
+0x1ede LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+&_O92_@@
+0x1edf LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+&_o92_@@
+0x1ee0 LATIN CAPITAL LETTER O WITH HORN AND TILDE
+&_O9?_@@
+0x1ee1 LATIN SMALL LETTER O WITH HORN AND TILDE
+&_o9?_@@
+0x1ee2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+&_O9-._@@
+0x1ee3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+&_o9-._@@
+0x1ee4 LATIN CAPITAL LETTER U WITH DOT BELOW
+&_U-._@@
+0x1ee5 LATIN SMALL LETTER U WITH DOT BELOW
+&_u-._@@
+0x1ee6 LATIN CAPITAL LETTER U WITH HOOK ABOVE
+&U2@@
+0x1ee7 LATIN SMALL LETTER U WITH HOOK ABOVE
+&u2@@
+0x1ee8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+&_U9'_@@
+0x1ee9 LATIN SMALL LETTER U WITH HORN AND ACUTE
+&_u9'_@@
+0x1eea LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+&_U9!_@@
+0x1eeb LATIN SMALL LETTER U WITH HORN AND GRAVE
+&_u9!_@@
+0x1eec LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+&_U92_@@
+0x1eed LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+&_u92_@@
+0x1eee LATIN CAPITAL LETTER U WITH HORN AND TILDE
+&_U9?_@@
+0x1eef LATIN SMALL LETTER U WITH HORN AND TILDE
+&_u9?_@@
+0x1ef0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+&_U9-._@@
+0x1ef1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+&_u9-._@@
+0x1ef2 LATIN CAPITAL LETTER Y WITH GRAVE
+&Y!@@
+0x1ef3 LATIN SMALL LETTER Y WITH GRAVE
+&y!@@
+0x1ef4 LATIN CAPITAL LETTER Y WITH DOT BELOW
+&_Y-._@@
+0x1ef5 LATIN SMALL LETTER Y WITH DOT BELOW
+&_y-._@@
+0x1ef6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+&Y2@@
+0x1ef7 LATIN SMALL LETTER Y WITH HOOK ABOVE
+&y2@@
+0x1ef8 LATIN CAPITAL LETTER Y WITH TILDE
+&Y?@@
+0x1ef9 LATIN SMALL LETTER Y WITH TILDE
+&y?@@
+0x1f00 GREEK DASIA AND ACUTE ACCENT
+&;'@@
+0x1f01 GREEK PSILI AND ACUTE ACCENT
+&,'@@
+0x1f02 GREEK DASIA AND VARIA
+&;!@@
+0x1f03 GREEK PSILI AND VARIA
+&,!@@
+0x1f04 GREEK DASIA AND PERISPOMENI
+&?;@@
+0x1f05 GREEK PSILI AND PERISPOMENI
+&?,@@
+0x1f06 GREEK DIAERESIS AND VARIA
+&!:@@
+0x1f07 GREEK DIAERESIS AND PERISPOMENI
+&?:@@
+0x2002 EN SPACE
+&1N@@
+0x2003 EM SPACE
+&1M@@
+0x2004 THREE-PER-EM SPACE
+&3M@@
+0x2005 FOUR-PER-EM SPACE
+&4M@@
+0x2006 SIX-PER-EM SPACE
+&6M@@
+0x2009 THIN SPACE
+&1T@@
+0x200a HAIR SPACE
+&1H@@
+0x2010 HYPHEN
+&-1@@
+0x2013 EN DASH
+&-N@@
+0x2014 EM DASH
+&-M@@
+0x2015 HORIZONTAL BAR
+&-3@@
+0x2016 DOUBLE VERTICAL LINE
+&!2@@
+0x2017 DOUBLE LOW LINE
+&=2@@
+0x2018 LEFT SINGLE QUOTATION MARK
+&'6@@
+0x2019 RIGHT SINGLE QUOTATION MARK
+&'9@@
+0x201a SINGLE LOW-9 QUOTATION MARK
+&.9@@
+0x201b SINGLE HIGH-REVERSED-9 QUOTATION MARK
+&9'@@
+0x201c LEFT DOUBLE QUOTATION MARK
+&"6@@
+0x201d RIGHT DOUBLE QUOTATION MARK
+&"9@@
+0x201e DOUBLE LOW-9 QUOTATION MARK
+&:9@@
+0x201f DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+&9"@@
+0x2020 DAGGER
+&/-@@
+0x2021 DOUBLE DAGGER
+&/=@@
+0x2025 TWO DOT LEADER
+&..@@
+0x2030 PER MILLE SIGN
+&%0@@
+0x2032 PRIME
+&1'@@
+0x2033 DOUBLE PRIME
+&2'@@
+0x2034 TRIPLE PRIME
+&3'@@
+0x2035 REVERSED PRIME
+&1"@@
+0x2036 REVERSED DOUBLE PRIME
+&2"@@
+0x2037 REVERSED TRIPLE PRIME
+&3"@@
+0x2038 CARET
+&Ca@@
+0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+&<1@@
+0x203a SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+&>1@@
+0x203b REFERENCE MARK
+&:X@@
+0x203c DOUBLE EXCLAMATION MARK
+&_!*2_@@
+0x203e OVERLINE
+&'-@@
+0x2044 FRACTION SLASH
+&/f@@
+0x2070 SUPERSCRIPT DIGIT ZERO
+&0S@@
+0x2074 SUPERSCRIPT DIGIT FOUR
+&4S@@
+0x2075 SUPERSCRIPT DIGIT FIVE
+&5S@@
+0x2076 SUPERSCRIPT DIGIT SIX
+&6S@@
+0x2077 SUPERSCRIPT DIGIT SEVEN
+&7S@@
+0x2078 SUPERSCRIPT DIGIT EIGHT
+&8S@@
+0x2079 SUPERSCRIPT DIGIT NINE
+&9S@@
+0x207a SUPERSCRIPT PLUS SIGN
+&+S@@
+0x207b SUPERSCRIPT MINUS
+&-S@@
+0x207c SUPERSCRIPT EQUALS SIGN
+&=S@@
+0x207d SUPERSCRIPT LEFT PARENTHESIS
+&(S@@
+0x207e SUPERSCRIPT RIGHT PARENTHESIS
+&)S@@
+0x207f SUPERSCRIPT LATIN SMALL LETTER N
+&nS@@
+0x2080 SUBSCRIPT DIGIT ZERO
+&0s@@
+0x2081 SUBSCRIPT DIGIT ONE
+&1s@@
+0x2082 SUBSCRIPT DIGIT TWO
+&2s@@
+0x2083 SUBSCRIPT DIGIT THREE
+&3s@@
+0x2084 SUBSCRIPT DIGIT FOUR
+&4s@@
+0x2085 SUBSCRIPT DIGIT FIVE
+&5s@@
+0x2086 SUBSCRIPT DIGIT SIX
+&6s@@
+0x2087 SUBSCRIPT DIGIT SEVEN
+&7s@@
+0x2088 SUBSCRIPT DIGIT EIGHT
+&8s@@
+0x2089 SUBSCRIPT DIGIT NINE
+&9s@@
+0x208a SUBSCRIPT PLUS SIGN
+&+s@@
+0x208b SUBSCRIPT MINUS
+&-s@@
+0x208c SUBSCRIPT EQUALS SIGN
+&=s@@
+0x208d SUBSCRIPT LEFT PARENTHESIS
+&(s@@
+0x208e SUBSCRIPT RIGHT PARENTHESIS
+&)s@@
+0x20a4 LIRA SIGN
+&Li@@
+0x20a7 PESETA SIGN
+&Pt@@
+0x20a9 WON SIGN
+&W=@@
+0x2103 DEGREE CENTIGRADE
+&oC@@
+0x2105 CARE OF
+&co@@
+0x2109 DEGREE FAHRENHEIT
+&oF@@
+0x2116 NUMERO SIGN
+&N0@@
+0x2117 SOUND RECORDING COPYRIGHT
+&PO@@
+0x211e PRESCRIPTION TAKE
+&Rx@@
+0x2120 SERVICE MARK
+&SM@@
+0x2122 TRADE MARK SIGN
+&TM@@
+0x2126 OHM SIGN
+&Om@@
+0x212b ANGSTROEM SIGN
+&AO@@
+0x2153 VULGAR FRACTION ONE THIRD
+&13@@
+0x2154 VULGAR FRACTION TWO THIRDS
+&23@@
+0x2155 VULGAR FRACTION ONE FIFTH
+&15@@
+0x2156 VULGAR FRACTION TWO FIFTHS
+&25@@
+0x2157 VULGAR FRACTION THREE FIFTHS
+&35@@
+0x2158 VULGAR FRACTION FOUR FIFTHS
+&45@@
+0x2159 VULGAR FRACTION ONE SIXTH
+&16@@
+0x215a VULGAR FRACTION FIVE SIXTHS
+&56@@
+0x215b VULGAR FRACTION ONE EIGHTH
+&18@@
+0x215c VULGAR FRACTION THREE EIGHTHS
+&38@@
+0x215d VULGAR FRACTION FIVE EIGHTHS
+&58@@
+0x215e VULGAR FRACTION SEVEN EIGHTHS
+&78@@
+0x2160 ROMAN NUMERAL ONE
+&1R@@
+0x2161 ROMAN NUMERAL TWO
+&2R@@
+0x2162 ROMAN NUMERAL THREE
+&3R@@
+0x2163 ROMAN NUMERAL FOUR
+&4R@@
+0x2164 ROMAN NUMERAL FIVE
+&5R@@
+0x2165 ROMAN NUMERAL SIX
+&6R@@
+0x2166 ROMAN NUMERAL SEVEN
+&7R@@
+0x2167 ROMAN NUMERAL EIGHT
+&8R@@
+0x2168 ROMAN NUMERAL NINE
+&9R@@
+0x2169 ROMAN NUMERAL TEN
+&aR@@
+0x216a ROMAN NUMERAL ELEVEN
+&bR@@
+0x216b ROMAN NUMERAL TWELVE
+&cR@@
+0x216c ROMAN NUMERAL FIFTY
+&_50R_@@
+0x216d ROMAN NUMERAL ONE HUNDRED
+&_100R_@@
+0x216e ROMAN NUMERAL FIVE HUNDRED
+&_500R_@@
+0x216f ROMAN NUMERAL ONE THOUSAND
+&_1000R_@@
+0x2170 SMALL ROMAN NUMERAL ONE
+&1r@@
+0x2171 SMALL ROMAN NUMERAL TWO
+&2r@@
+0x2172 SMALL ROMAN NUMERAL THREE
+&3r@@
+0x2173 SMALL ROMAN NUMERAL FOUR
+&4r@@
+0x2174 SMALL ROMAN NUMERAL FIVE
+&5r@@
+0x2175 SMALL ROMAN NUMERAL SIX
+&6r@@
+0x2176 SMALL ROMAN NUMERAL SEVEN
+&7r@@
+0x2177 SMALL ROMAN NUMERAL EIGHT
+&8r@@
+0x2178 SMALL ROMAN NUMERAL NINE
+&9r@@
+0x2179 SMALL ROMAN NUMERAL TEN
+&ar@@
+0x217a SMALL ROMAN NUMERAL ELEVEN
+&br@@
+0x217b SMALL ROMAN NUMERAL TWELVE
+&cr@@
+0x217c SMALL ROMAN NUMERAL FIFTY
+&_50r_@@
+0x217d SMALL ROMAN NUMERAL ONE HUNDRED
+&_100r_@@
+0x217e SMALL ROMAN NUMERAL FIVE HUNDRED
+&_500r_@@
+0x217f SMALL ROMAN NUMERAL ONE THOUSAND
+&_1000r_@@
+0x2180 ROMAN NUMERAL ONE THOUSAND C D
+&_1000RCD_@@
+0x2181 ROMAN NUMERAL FIVE THOUSAND
+&_5000R_@@
+0x2182 ROMAN NUMERAL TEN THOUSAND
+&_10000R_@@
+0x2190 LEFTWARDS ARROW
+&<-@@
+0x2191 UPWARDS ARROW
+&-!@@
+0x2192 RIGHTWARDS ARROW
+&->@@
+0x2193 DOWNWARDS ARROW
+&-v@@
+0x2194 LEFT RIGHT ARROW
+&<>@@
+0x2195 UP DOWN ARROW
+&UD@@
+0x2196 NORTH WEST ARROW
+&_<!!_@@
+0x2197 NORTH EAST ARROW
+&_//>_@@
+0x2198 SOUTH EAST ARROW
+&_!!>_@@
+0x2199 SOUTH WEST ARROW
+&_<//_@@
+0x21d0 LEFTWARDS DOUBLE ARROW
+&<=@@
+0x21d2 RIGHTWARDS DOUBLE ARROW
+&=>@@
+0x21d4 LEFT RIGHT DOUBLE ARROW
+&==@@
+0x2200 FOR ALL
+&FA@@
+0x2202 PARTIAL DIFFERENTIAL
+&dP@@
+0x2203 THERE EXISTS
+&TE@@
+0x2205 EMPTY SET
+&/0@@
+0x2206 INCREMENT
+&DE@@
+0x2207 NABLA
+&NB@@
+0x2208 ELEMENT OF
+&(-@@
+0x220b CONTAINS AS MEMBER
+&-)@@
+0x220f N-ARY PRODUCT
+&*P@@
+0x2211 N-ARY SUMMATION
+&+Z@@
+0x2212 MINUS SIGN
+&-2@@
+0x2213 MINUS-OR-PLUS SIGN
+&-+@@
+0x2217 ASTERISK OPERATOR
+&*-@@
+0x2218 RING OPERATOR
+&Ob@@
+0x2219 BULLET OPERATOR
+&Sb@@
+0x221a SQUARE ROOT
+&RT@@
+0x221d PROPORTIONAL TO
+&0(@@
+0x221e INFINITY
+&00@@
+0x221f RIGHT ANGLE
+&-L@@
+0x2220 ANGLE
+&-V@@
+0x2225 PARALLEL TO
+&PP@@
+0x2227 LOGICAL AND
+&AN@@
+0x2228 LOGICAL OR
+&OR@@
+0x2229 INTERSECTION
+&(U@@
+0x222a UNION
+&)U@@
+0x222b INTEGRAL
+&In@@
+0x222c DOUBLE INTEGRAL
+&DI@@
+0x222e CONTOUR INTEGRAL
+&Io@@
+0x2234 THEREFORE
+&.:@@
+0x2235 BECAUSE
+&:.@@
+0x2236 RATIO
+&:R@@
+0x2237 PROPORTION
+&::@@
+0x223c TILDE OPERATOR
+&?1@@
+0x223e INVERTED LAZY S
+&CG@@
+0x2243 ASYMPTOTICALLY EQUAL TO
+&?-@@
+0x2245 APPROXIMATELY EQUAL TO
+&?=@@
+0x2248 ALMOST EQUAL TO
+&?2@@
+0x224c ALL EQUAL TO
+&=?@@
+0x2253 IMAGE OF OR APPROXIMATELY EQUAL TO
+&HI@@
+0x2260 NOT EQUAL TO
+&!=@@
+0x2261 IDENTICAL TO
+&=3@@
+0x2264 LESS-THAN OR EQUAL TO
+&=<@@
+0x2265 GREATER-THAN OR EQUAL TO
+&>=@@
+0x226a MUCH LESS-THAN
+&<*@@
+0x226b MUCH GREATER-THAN
+&*>@@
+0x226e NOT LESS-THAN
+&!<@@
+0x226f NOT GREATER-THAN
+&!>@@
+0x2282 SUBSET OF
+&(C@@
+0x2283 SUPERSET OF
+&)C@@
+0x2286 SUBSET OF OR EQUAL TO
+&(_@@
+0x2287 SUPERSET OF OR EQUAL TO
+&)_@@
+0x2299 CIRCLED DOT OPERATOR
+&0.@@
+0x229a CIRCLED RING OPERATOR
+&02@@
+0x22a5 UP TACK
+&-T@@
+0x22c5 DOT OPERATOR
+&.P@@
+0x22ee VERTICAL ELLIPSIS
+&:3@@
+0x22ef MIDLINE HORIZONTAL ELLIPSIS
+&.3@@
+0x2302 HOUSE
+&Eh@@
+0x2308 LEFT CEILING
+&<7@@
+0x2309 RIGHT CEILING
+&>7@@
+0x230a LEFT FLOOR
+&7<@@
+0x230b RIGHT FLOOR
+&7>@@
+0x2310 REVERSED NOT SIGN
+&NI@@
+0x2312 ARC
+&(A@@
+0x2315 TELEPHONE RECORDER
+&TR@@
+0x2320 TOP HALF INTEGRAL
+&Iu@@
+0x2321 BOTTOM HALF INTEGRAL
+&Il@@
+0x2329 LEFT-POINTING ANGLE BRACKET
+&</@@
+0x232a RIGHT-POINTING ANGLE BRACKET
+&/>@@
+0x2423 OPEN BOX
+&Vs@@
+0x2440 OCR HOOK
+&1h@@
+0x2441 OCR CHAIR
+&3h@@
+0x2442 OCR FORK
+&2h@@
+0x2443 OCR INVERTED FORK
+&4h@@
+0x2446 OCR BRANCH BANK IDENTIFICATION
+&1j@@
+0x2447 OCR AMOUNT OF CHECK
+&2j@@
+0x2448 OCR DASH
+&3j@@
+0x2449 OCR CUSTOMER ACCOUNT NUMBER
+&4j@@
+0x2460 CIRCLED DIGIT ONE
+&_1-o_@@
+0x2461 CIRCLED DIGIT TWO
+&_2-o_@@
+0x2462 CIRCLED DIGIT THREE
+&_3-o_@@
+0x2463 CIRCLED DIGIT FOUR
+&_4-o_@@
+0x2464 CIRCLED DIGIT FIVE
+&_5-o_@@
+0x2465 CIRCLED DIGIT SIX
+&_6-o_@@
+0x2466 CIRCLED DIGIT SEVEN
+&_7-o_@@
+0x2467 CIRCLED DIGIT EIGHT
+&_8-o_@@
+0x2468 CIRCLED DIGIT NINE
+&_9-o_@@
+0x2469 CIRCLED NUMBER TEN
+&_10-o_@@
+0x246a CIRCLED NUMBER ELEVEN
+&_11-o_@@
+0x246b CIRCLED NUMBER TWELVE
+&_12-o_@@
+0x246c CIRCLED NUMBER THIRTEEN
+&_13-o_@@
+0x246d CIRCLED NUMBER FOURTEEN
+&_14-o_@@
+0x246e CIRCLED NUMBER FIFTEEN
+&_15-o_@@
+0x246f CIRCLED NUMBER SIXTEEN
+&_16-o_@@
+0x2470 CIRCLED NUMBER SEVENTEEN
+&_17-o_@@
+0x2471 CIRCLED NUMBER EIGHTEEN
+&_18-o_@@
+0x2472 CIRCLED NUMBER NINETEEN
+&_19-o_@@
+0x2473 CIRCLED NUMBER TWENTY
+&_20-o_@@
+0x2474 PARENTHESIZED DIGIT ONE
+&_(1)_@@
+0x2475 PARENTHESIZED DIGIT TWO
+&_(2)_@@
+0x2476 PARENTHESIZED DIGIT THREE
+&_(3)_@@
+0x2477 PARENTHESIZED DIGIT FOUR
+&_(4)_@@
+0x2478 PARENTHESIZED DIGIT FIVE
+&_(5)_@@
+0x2479 PARENTHESIZED DIGIT SIX
+&_(6)_@@
+0x247a PARENTHESIZED DIGIT SEVEN
+&_(7)_@@
+0x247b PARENTHESIZED DIGIT EIGHT
+&_(8)_@@
+0x247c PARENTHESIZED DIGIT NINE
+&_(9)_@@
+0x247d PARENTHESIZED NUMBER TEN
+&_(10)_@@
+0x247e PARENTHESIZED NUMBER ELEVEN
+&_(11)_@@
+0x247f PARENTHESIZED NUMBER TWELVE
+&_(12)_@@
+0x2480 PARENTHESIZED NUMBER THIRTEEN
+&_(13)_@@
+0x2481 PARENTHESIZED NUMBER FOURTEEN
+&_(14)_@@
+0x2482 PARENTHESIZED NUMBER FIFTEEN
+&_(15)_@@
+0x2483 PARENTHESIZED NUMBER SIXTEEN
+&_(16)_@@
+0x2484 PARENTHESIZED NUMBER SEVENTEEN
+&_(17)_@@
+0x2485 PARENTHESIZED NUMBER EIGHTEEN
+&_(18)_@@
+0x2486 PARENTHESIZED NUMBER NINETEEN
+&_(19)_@@
+0x2487 PARENTHESIZED NUMBER TWENTY
+&_(20)_@@
+0x2488 DIGIT ONE FULL STOP
+&1.@@
+0x2489 DIGIT TWO FULL STOP
+&2.@@
+0x248a DIGIT THREE FULL STOP
+&3.@@
+0x248b DIGIT FOUR FULL STOP
+&4.@@
+0x248c DIGIT FIVE FULL STOP
+&5.@@
+0x248d DIGIT SIX FULL STOP
+&6.@@
+0x248e DIGIT SEVEN FULL STOP
+&7.@@
+0x248f DIGIT EIGHT FULL STOP
+&8.@@
+0x2490 DIGIT NINE FULL STOP
+&9.@@
+0x2491 NUMBER TEN FULL STOP
+&_10._@@
+0x2492 NUMBER ELEVEN FULL STOP
+&_11._@@
+0x2493 NUMBER TWELVE FULL STOP
+&_12._@@
+0x2494 NUMBER THIRTEEN FULL STOP
+&_13._@@
+0x2495 NUMBER FOURTEEN FULL STOP
+&_14._@@
+0x2496 NUMBER FIFTEEN FULL STOP
+&_15._@@
+0x2497 NUMBER SIXTEEN FULL STOP
+&_16._@@
+0x2498 NUMBER SEVENTEEN FULL STOP
+&_17._@@
+0x2499 NUMBER EIGHTEEN FULL STOP
+&_18._@@
+0x249a NUMBER NINETEEN FULL STOP
+&_19._@@
+0x249b NUMBER TWENTY FULL STOP
+&_20._@@
+0x249c PARENTHESIZED LATIN SMALL LETTER A
+&_(a)_@@
+0x249d PARENTHESIZED LATIN SMALL LETTER B
+&_(b)_@@
+0x249e PARENTHESIZED LATIN SMALL LETTER C
+&_(c)_@@
+0x249f PARENTHESIZED LATIN SMALL LETTER D
+&_(d)_@@
+0x24a0 PARENTHESIZED LATIN SMALL LETTER E
+&_(e)_@@
+0x24a1 PARENTHESIZED LATIN SMALL LETTER F
+&_(f)_@@
+0x24a2 PARENTHESIZED LATIN SMALL LETTER G
+&_(g)_@@
+0x24a3 PARENTHESIZED LATIN SMALL LETTER H
+&_(h)_@@
+0x24a4 PARENTHESIZED LATIN SMALL LETTER I
+&_(i)_@@
+0x24a5 PARENTHESIZED LATIN SMALL LETTER J
+&_(j)_@@
+0x24a6 PARENTHESIZED LATIN SMALL LETTER K
+&_(k)_@@
+0x24a7 PARENTHESIZED LATIN SMALL LETTER L
+&_(l)_@@
+0x24a8 PARENTHESIZED LATIN SMALL LETTER M
+&_(m)_@@
+0x24a9 PARENTHESIZED LATIN SMALL LETTER N
+&_(n)_@@
+0x24aa PARENTHESIZED LATIN SMALL LETTER O
+&_(o)_@@
+0x24ab PARENTHESIZED LATIN SMALL LETTER P
+&_(p)_@@
+0x24ac PARENTHESIZED LATIN SMALL LETTER Q
+&_(q)_@@
+0x24ad PARENTHESIZED LATIN SMALL LETTER R
+&_(r)_@@
+0x24ae PARENTHESIZED LATIN SMALL LETTER S
+&_(s)_@@
+0x24af PARENTHESIZED LATIN SMALL LETTER T
+&_(t)_@@
+0x24b0 PARENTHESIZED LATIN SMALL LETTER U
+&_(u)_@@
+0x24b1 PARENTHESIZED LATIN SMALL LETTER V
+&_(v)_@@
+0x24b2 PARENTHESIZED LATIN SMALL LETTER W
+&_(w)_@@
+0x24b3 PARENTHESIZED LATIN SMALL LETTER X
+&_(x)_@@
+0x24b4 PARENTHESIZED LATIN SMALL LETTER Y
+&_(y)_@@
+0x24b5 PARENTHESIZED LATIN SMALL LETTER Z
+&_(z)_@@
+0x24b6 CIRCLED LATIN CAPITAL LETTER A
+&_A-o_@@
+0x24b7 CIRCLED LATIN CAPITAL LETTER B
+&_B-o_@@
+0x24b8 CIRCLED LATIN CAPITAL LETTER C
+&_C-o_@@
+0x24b9 CIRCLED LATIN CAPITAL LETTER D
+&_D-o_@@
+0x24ba CIRCLED LATIN CAPITAL LETTER E
+&_E-o_@@
+0x24bb CIRCLED LATIN CAPITAL LETTER F
+&_F-o_@@
+0x24bc CIRCLED LATIN CAPITAL LETTER G
+&_G-o_@@
+0x24bd CIRCLED LATIN CAPITAL LETTER H
+&_H-o_@@
+0x24be CIRCLED LATIN CAPITAL LETTER I
+&_I-o_@@
+0x24bf CIRCLED LATIN CAPITAL LETTER J
+&_J-o_@@
+0x24c0 CIRCLED LATIN CAPITAL LETTER K
+&_K-o_@@
+0x24c1 CIRCLED LATIN CAPITAL LETTER L
+&_L-o_@@
+0x24c2 CIRCLED LATIN CAPITAL LETTER M
+&_M-o_@@
+0x24c3 CIRCLED LATIN CAPITAL LETTER N
+&_N-o_@@
+0x24c4 CIRCLED LATIN CAPITAL LETTER O
+&_O-o_@@
+0x24c5 CIRCLED LATIN CAPITAL LETTER P
+&_P-o_@@
+0x24c6 CIRCLED LATIN CAPITAL LETTER Q
+&_Q-o_@@
+0x24c7 CIRCLED LATIN CAPITAL LETTER R
+&_R-o_@@
+0x24c8 CIRCLED LATIN CAPITAL LETTER S
+&_S-o_@@
+0x24c9 CIRCLED LATIN CAPITAL LETTER T
+&_T-o_@@
+0x24ca CIRCLED LATIN CAPITAL LETTER U
+&_U-o_@@
+0x24cb CIRCLED LATIN CAPITAL LETTER V
+&_V-o_@@
+0x24cc CIRCLED LATIN CAPITAL LETTER W
+&_W-o_@@
+0x24cd CIRCLED LATIN CAPITAL LETTER X
+&_X-o_@@
+0x24ce CIRCLED LATIN CAPITAL LETTER Y
+&_Y-o_@@
+0x24cf CIRCLED LATIN CAPITAL LETTER Z
+&_Z-o_@@
+0x24d0 CIRCLED LATIN SMALL LETTER A
+&_a-o_@@
+0x24d1 CIRCLED LATIN SMALL LETTER B
+&_b-o_@@
+0x24d2 CIRCLED LATIN SMALL LETTER C
+&_c-o_@@
+0x24d3 CIRCLED LATIN SMALL LETTER D
+&_d-o_@@
+0x24d4 CIRCLED LATIN SMALL LETTER E
+&_e-o_@@
+0x24d5 CIRCLED LATIN SMALL LETTER F
+&_f-o_@@
+0x24d6 CIRCLED LATIN SMALL LETTER G
+&_g-o_@@
+0x24d7 CIRCLED LATIN SMALL LETTER H
+&_h-o_@@
+0x24d8 CIRCLED LATIN SMALL LETTER I
+&_i-o_@@
+0x24d9 CIRCLED LATIN SMALL LETTER J
+&_j-o_@@
+0x24da CIRCLED LATIN SMALL LETTER K
+&_k-o_@@
+0x24db CIRCLED LATIN SMALL LETTER L
+&_l-o_@@
+0x24dc CIRCLED LATIN SMALL LETTER M
+&_m-o_@@
+0x24dd CIRCLED LATIN SMALL LETTER N
+&_n-o_@@
+0x24de CIRCLED LATIN SMALL LETTER O
+&_o-o_@@
+0x24df CIRCLED LATIN SMALL LETTER P
+&_p-o_@@
+0x24e0 CIRCLED LATIN SMALL LETTER Q
+&_q-o_@@
+0x24e1 CIRCLED LATIN SMALL LETTER R
+&_r-o_@@
+0x24e2 CIRCLED LATIN SMALL LETTER S
+&_s-o_@@
+0x24e3 CIRCLED LATIN SMALL LETTER T
+&_t-o_@@
+0x24e4 CIRCLED LATIN SMALL LETTER U
+&_u-o_@@
+0x24e5 CIRCLED LATIN SMALL LETTER V
+&_v-o_@@
+0x24e6 CIRCLED LATIN SMALL LETTER W
+&_w-o_@@
+0x24e7 CIRCLED LATIN SMALL LETTER X
+&_x-o_@@
+0x24e8 CIRCLED LATIN SMALL LETTER Y
+&_y-o_@@
+0x24e9 CIRCLED LATIN SMALL LETTER Z
+&_z-o_@@
+0x24ea CIRCLED DIGIT ZERO
+&_0-o_@@
+0x2500 BOX DRAWINGS LIGHT HORIZONTAL
+&hh@@
+0x2501 BOX DRAWINGS HEAVY HORIZONTAL
+&HH@@
+0x2502 BOX DRAWINGS LIGHT VERTICAL
+&vv@@
+0x2503 BOX DRAWINGS HEAVY VERTICAL
+&VV@@
+0x2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+&3-@@
+0x2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+&3_@@
+0x2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+&3!@@
+0x2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+&3/@@
+0x2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+&4-@@
+0x2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+&4_@@
+0x250a BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+&4!@@
+0x250b BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+&4/@@
+0x250c BOX DRAWINGS LIGHT DOWN AND RIGHT
+&dr@@
+0x250d BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+&dR@@
+0x250e BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+&Dr@@
+0x250f BOX DRAWINGS HEAVY DOWN AND RIGHT
+&DR@@
+0x2510 BOX DRAWINGS LIGHT DOWN AND LEFT
+&dl@@
+0x2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+&dL@@
+0x2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+&Dl@@
+0x2513 BOX DRAWINGS HEAVY DOWN AND LEFT
+&LD@@
+0x2514 BOX DRAWINGS LIGHT UP AND RIGHT
+&ur@@
+0x2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+&uR@@
+0x2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+&Ur@@
+0x2517 BOX DRAWINGS HEAVY UP AND RIGHT
+&UR@@
+0x2518 BOX DRAWINGS LIGHT UP AND LEFT
+&ul@@
+0x2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+&uL@@
+0x251a BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+&Ul@@
+0x251b BOX DRAWINGS HEAVY UP AND LEFT
+&UL@@
+0x251c BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+&vr@@
+0x251d BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+&vR@@
+0x251e BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+&_Udr_@@
+0x251f BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+&_uDr_@@
+0x2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+&Vr@@
+0x2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+&_UdR_@@
+0x2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+&_uDR_@@
+0x2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+&VR@@
+0x2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+&vl@@
+0x2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+&vL@@
+0x2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+&_Udl_@@
+0x2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+&_uDl_@@
+0x2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+&Vl@@
+0x2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+&_UdL_@@
+0x252a BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+&_uDL_@@
+0x252b BOX DRAWINGS HEAVY VERTICAL AND LEFT
+&VL@@
+0x252c BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+&dh@@
+0x252d BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+&_dLr_@@
+0x252e BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+&_dlR_@@
+0x252f BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+&dH@@
+0x2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+&Dh@@
+0x2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+&_DLr_@@
+0x2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+&_DlR_@@
+0x2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+&DH@@
+0x2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+&uh@@
+0x2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+&_uLr_@@
+0x2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+&_ulR_@@
+0x2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+&uH@@
+0x2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+&Uh@@
+0x2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+&_ULr_@@
+0x253a BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+&_UlR_@@
+0x253b BOX DRAWINGS HEAVY UP AND HORIZONTAL
+&UH@@
+0x253c BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+&vh@@
+0x253d BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+&_vLr_@@
+0x253e BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+&_vlR_@@
+0x253f BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+&vH@@
+0x2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+&_Udh_@@
+0x2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+&_uDh_@@
+0x2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+&Vh@@
+0x2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+&_UdLr_@@
+0x2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+&_UdlR_@@
+0x2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+&_uDLr_@@
+0x2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+&_uDlR_@@
+0x2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+&_UdH_@@
+0x2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+&_uDH_@@
+0x2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+&_VLr_@@
+0x254a BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+&_VlR_@@
+0x254b BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+&VH@@
+0x2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+&FD@@
+0x2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+&BD@@
+0x2580 UPPER HALF BLOCK
+&TB@@
+0x2584 LOWER HALF BLOCK
+&LB@@
+0x2588 FULL BLOCK
+&FB@@
+0x258c LEFT HALF BLOCK
+&lB@@
+0x2590 RIGHT HALF BLOCK
+&RB@@
+0x2591 LIGHT SHADE
+&.S@@
+0x2592 MEDIUM SHADE
+&:S@@
+0x2593 DARK SHADE
+&?S@@
+0x25a0 BLACK SQUARE
+&fS@@
+0x25a1 WHITE SQUARE
+&OS@@
+0x25a2 WHITE SQUARE WITH ROUNDED CORNERS
+&RO@@
+0x25a3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+&Rr@@
+0x25a4 SQUARE WITH HORIZONTAL FILL
+&RF@@
+0x25a5 SQUARE WITH VERTICAL FILL
+&RY@@
+0x25a6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+&RH@@
+0x25a7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+&RZ@@
+0x25a8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+&RK@@
+0x25a9 SQUARE WITH DIAGONAL CROSSHATCH FILL
+&RX@@
+0x25aa BLACK SMALL SQUARE
+&sB@@
+0x25ac BLACK RECTANGLE
+&SR@@
+0x25ad WHITE RECTANGLE
+&Or@@
+0x25b2 BLACK UP-POINTING TRIANGLE
+&UT@@
+0x25b3 WHITE UP-POINTING TRIANGLE
+&uT@@
+0x25b6 BLACK RIGHT-POINTING TRIANGLE
+&PR@@
+0x25b7 WHITE RIGHT-POINTING TRIANGLE
+&Tr@@
+0x25bc BLACK DOWN-POINTING TRIANGLE
+&Dt@@
+0x25bd WHITE DOWN-POINTING TRIANGLE
+&dT@@
+0x25c0 BLACK LEFT-POINTING TRIANGLE
+&PL@@
+0x25c1 WHITE LEFT-POINTING TRIANGLE
+&Tl@@
+0x25c6 BLACK DIAMOND
+&Db@@
+0x25c7 WHITE DIAMOND
+&Dw@@
+0x25ca LOZENGE
+&LZ@@
+0x25cb WHITE CIRCLE
+&0m@@
+0x25ce BULLSEYE
+&0o@@
+0x25cf BLACK CIRCLE
+&0M@@
+0x25d0 CIRCLE WITH LEFT HALF BLACK
+&0L@@
+0x25d1 CIRCLE WITH RIGHT HALF BLACK
+&0R@@
+0x25d8 INVERSE BULLET
+&Sn@@
+0x25d9 INVERSE WHITE CIRCLE
+&Ic@@
+0x25e2 BLACK LOWER RIGHT TRIANGLE
+&Fd@@
+0x25e3 BLACK LOWER LEFT TRIANGLE
+&Bd@@
+0x2605 BLACK STAR
+&*2@@
+0x2606 WHITE STAR
+&*1@@
+0x260e BLACK TELEPHONE
+&_TEL_@@
+0x260f WHITE TELEPHONE
+&_tel_@@
+0x261c WHITE LEFT POINTING INDEX
+&<H@@
+0x261e WHITE RIGHT POINTING INDEX
+&>H@@
+0x263a WHITE SMILING FACE
+&0u@@
+0x263b BLACK SMILING FACE
+&0U@@
+0x263c WHITE SUN WITH RAYS
+&SU@@
+0x2640 FEMALE SIGN
+&Fm@@
+0x2642 MALE SIGN
+&Ml@@
+0x2660 BLACK SPADE SUIT
+&cS@@
+0x2661 WHITE HEART SUIT
+&cH@@
+0x2662 WHITE DIAMOND SUIT
+&cD@@
+0x2663 BLACK CLUB SUIT
+&cC@@
+0x2664 WHITE SPADE SUIT
+&_cS-_@@
+0x2665 BLACK HEART SUIT
+&_cH-_@@
+0x2666 BLACK DIAMOND SUIT
+&_cD-_@@
+0x2667 WHITE CLUB SUIT
+&_cC-_@@
+0x2669 QUARTER NOTE
+&Md@@
+0x266a EIGHTH NOTE
+&M8@@
+0x266b BARRED EIGHTH NOTES
+&M2@@
+0x266c BARRED SIXTEENTH NOTES
+&_M16_@@
+0x266d MUSIC FLAT SIGN
+&Mb@@
+0x266e MUSIC NATURAL SIGN
+&Mx@@
+0x266f MUSIC SHARP SIGN
+&MX@@
+0x2713 CHECK MARK
+&OK@@
+0x2717 BALLOT X
+&XX@@
+0x2720 MALTESE CROSS
+&-X@@
+0x3000 IDEOGRAPHIC SPACE
+&IS@@
+0x3001 IDEOGRAPHIC COMMA
+&,_@@
+0x3002 IDEOGRAPHIC PERIOD
+&._@@
+0x3003 DITTO MARK
+&+"@@
+0x3004 IDEOGRAPHIC DITTO MARK
+&+_@@
+0x3005 IDEOGRAPHIC ITERATION MARK
+&*_@@
+0x3006 IDEOGRAPHIC CLOSING MARK
+&;_@@
+0x3007 IDEOGRAPHIC NUMBER ZERO
+&0_@@
+0x300a LEFT DOUBLE ANGLE BRACKET
+&<+@@
+0x300b RIGHT DOUBLE ANGLE BRACKET
+&>+@@
+0x300c LEFT CORNER BRACKET
+&<'@@
+0x300d RIGHT CORNER BRACKET
+&>'@@
+0x300e LEFT WHITE CORNER BRACKET
+&<"@@
+0x300f RIGHT WHITE CORNER BRACKET
+&>"@@
+0x3010 LEFT BLACK LENTICULAR BRACKET
+&("@@
+0x3011 RIGHT BLACK LENTICULAR BRACKET
+&)"@@
+0x3012 POSTAL MARK
+&=T@@
+0x3013 GETA MARK
+&=_@@
+0x3014 LEFT TORTOISE SHELL BRACKET
+&('@@
+0x3015 RIGHT TORTOISE SHELL BRACKET
+&)'@@
+0x3016 LEFT WHITE LENTICULAR BRACKET
+&(I@@
+0x3017 RIGHT WHITE LENTICULAR BRACKET
+&)I@@
+0x301c WAVE DASH
+&-?@@
+0x3020 POSTAL MARK FACE
+&_=T:)_@@
+0x3041 HIRAGANA LETTER SMALL A
+&A5@@
+0x3042 HIRAGANA LETTER A
+&a5@@
+0x3043 HIRAGANA LETTER SMALL I
+&I5@@
+0x3044 HIRAGANA LETTER I
+&i5@@
+0x3045 HIRAGANA LETTER SMALL U
+&U5@@
+0x3046 HIRAGANA LETTER U
+&u5@@
+0x3047 HIRAGANA LETTER SMALL E
+&E5@@
+0x3048 HIRAGANA LETTER E
+&e5@@
+0x3049 HIRAGANA LETTER SMALL O
+&O5@@
+0x304a HIRAGANA LETTER O
+&o5@@
+0x304b HIRAGANA LETTER KA
+&ka@@
+0x304c HIRAGANA LETTER GA
+&ga@@
+0x304d HIRAGANA LETTER KI
+&ki@@
+0x304e HIRAGANA LETTER GI
+&gi@@
+0x304f HIRAGANA LETTER KU
+&ku@@
+0x3050 HIRAGANA LETTER GU
+&gu@@
+0x3051 HIRAGANA LETTER KE
+&ke@@
+0x3052 HIRAGANA LETTER GE
+&ge@@
+0x3053 HIRAGANA LETTER KO
+&ko@@
+0x3054 HIRAGANA LETTER GO
+&go@@
+0x3055 HIRAGANA LETTER SA
+&sa@@
+0x3056 HIRAGANA LETTER ZA
+&za@@
+0x3057 HIRAGANA LETTER SI
+&si@@
+0x3058 HIRAGANA LETTER ZI
+&zi@@
+0x3059 HIRAGANA LETTER SU
+&su@@
+0x305a HIRAGANA LETTER ZU
+&zu@@
+0x305b HIRAGANA LETTER SE
+&se@@
+0x305c HIRAGANA LETTER ZE
+&ze@@
+0x305d HIRAGANA LETTER SO
+&so@@
+0x305e HIRAGANA LETTER ZO
+&zo@@
+0x305f HIRAGANA LETTER TA
+&ta@@
+0x3060 HIRAGANA LETTER DA
+&da@@
+0x3061 HIRAGANA LETTER TI
+&ti@@
+0x3062 HIRAGANA LETTER DI
+&di@@
+0x3063 HIRAGANA LETTER SMALL TU
+&tU@@
+0x3064 HIRAGANA LETTER TU
+&tu@@
+0x3065 HIRAGANA LETTER DU
+&du@@
+0x3066 HIRAGANA LETTER TE
+&te@@
+0x3067 HIRAGANA LETTER DE
+&de@@
+0x3068 HIRAGANA LETTER TO
+&to@@
+0x3069 HIRAGANA LETTER DO
+&do@@
+0x306a HIRAGANA LETTER NA
+&na@@
+0x306b HIRAGANA LETTER NI
+&ni@@
+0x306c HIRAGANA LETTER NU
+&nu@@
+0x306d HIRAGANA LETTER NE
+&ne@@
+0x306e HIRAGANA LETTER NO
+&no@@
+0x306f HIRAGANA LETTER HA
+&ha@@
+0x3070 HIRAGANA LETTER BA
+&ba@@
+0x3071 HIRAGANA LETTER PA
+&pa@@
+0x3072 HIRAGANA LETTER HI
+&hi@@
+0x3073 HIRAGANA LETTER BI
+&bi@@
+0x3074 HIRAGANA LETTER PI
+&pi@@
+0x3075 HIRAGANA LETTER HU
+&hu@@
+0x3076 HIRAGANA LETTER BU
+&bu@@
+0x3077 HIRAGANA LETTER PU
+&pu@@
+0x3078 HIRAGANA LETTER HE
+&he@@
+0x3079 HIRAGANA LETTER BE
+&be@@
+0x307a HIRAGANA LETTER PE
+&pe@@
+0x307b HIRAGANA LETTER HO
+&ho@@
+0x307c HIRAGANA LETTER BO
+&bo@@
+0x307d HIRAGANA LETTER PO
+&po@@
+0x307e HIRAGANA LETTER MA
+&ma@@
+0x307f HIRAGANA LETTER MI
+&mi@@
+0x3080 HIRAGANA LETTER MU
+&mu@@
+0x3081 HIRAGANA LETTER ME
+&me@@
+0x3082 HIRAGANA LETTER MO
+&mo@@
+0x3083 HIRAGANA LETTER SMALL YA
+&yA@@
+0x3084 HIRAGANA LETTER YA
+&ya@@
+0x3085 HIRAGANA LETTER SMALL YU
+&yU@@
+0x3086 HIRAGANA LETTER YU
+&yu@@
+0x3087 HIRAGANA LETTER SMALL YO
+&yO@@
+0x3088 HIRAGANA LETTER YO
+&yo@@
+0x3089 HIRAGANA LETTER RA
+&ra@@
+0x308a HIRAGANA LETTER RI
+&ri@@
+0x308b HIRAGANA LETTER RU
+&ru@@
+0x308c HIRAGANA LETTER RE
+&re@@
+0x308d HIRAGANA LETTER RO
+&ro@@
+0x308e HIRAGANA LETTER SMALL WA
+&wA@@
+0x308f HIRAGANA LETTER WA
+&wa@@
+0x3090 HIRAGANA LETTER WI
+&wi@@
+0x3091 HIRAGANA LETTER WE
+&we@@
+0x3092 HIRAGANA LETTER WO
+&wo@@
+0x3093 HIRAGANA LETTER N
+&n5@@
+0x3094 HIRAGANA LETTER VU
+&vu@@
+0x309b KATAKANA-HIRAGANA VOICED SOUND MARK
+&"5@@
+0x309c KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+&05@@
+0x309d HIRAGANA ITERATION MARK
+&*5@@
+0x309e HIRAGANA VOICED ITERATION MARK
+&+5@@
+0x30a1 KATAKANA LETTER SMALL A
+&a6@@
+0x30a2 KATAKANA LETTER A
+&A6@@
+0x30a3 KATAKANA LETTER SMALL I
+&i6@@
+0x30a4 KATAKANA LETTER I
+&I6@@
+0x30a5 KATAKANA LETTER SMALL U
+&u6@@
+0x30a6 KATAKANA LETTER U
+&U6@@
+0x30a7 KATAKANA LETTER SMALL E
+&e6@@
+0x30a8 KATAKANA LETTER E
+&E6@@
+0x30a9 KATAKANA LETTER SMALL O
+&o6@@
+0x30aa KATAKANA LETTER O
+&O6@@
+0x30ab KATAKANA LETTER KA
+&Ka@@
+0x30ac KATAKANA LETTER GA
+&Ga@@
+0x30ad KATAKANA LETTER KI
+&Ki@@
+0x30ae KATAKANA LETTER GI
+&Gi@@
+0x30af KATAKANA LETTER KU
+&Ku@@
+0x30b0 KATAKANA LETTER GU
+&Gu@@
+0x30b1 KATAKANA LETTER KE
+&Ke@@
+0x30b2 KATAKANA LETTER GE
+&Ge@@
+0x30b3 KATAKANA LETTER KO
+&Ko@@
+0x30b4 KATAKANA LETTER GO
+&Go@@
+0x30b5 KATAKANA LETTER SA
+&Sa@@
+0x30b6 KATAKANA LETTER ZA
+&Za@@
+0x30b7 KATAKANA LETTER SI
+&Si@@
+0x30b8 KATAKANA LETTER ZI
+&Zi@@
+0x30b9 KATAKANA LETTER SU
+&Su@@
+0x30ba KATAKANA LETTER ZU
+&Zu@@
+0x30bb KATAKANA LETTER SE
+&Se@@
+0x30bc KATAKANA LETTER ZE
+&Ze@@
+0x30bd KATAKANA LETTER SO
+&So@@
+0x30be KATAKANA LETTER ZO
+&Zo@@
+0x30bf KATAKANA LETTER TA
+&Ta@@
+0x30c0 KATAKANA LETTER DA
+&Da@@
+0x30c1 KATAKANA LETTER TI
+&Ti@@
+0x30c2 KATAKANA LETTER DI
+&Di@@
+0x30c3 KATAKANA LETTER SMALL TU
+&TU@@
+0x30c4 KATAKANA LETTER TU
+&Tu@@
+0x30c5 KATAKANA LETTER DU
+&Du@@
+0x30c6 KATAKANA LETTER TE
+&Te@@
+0x30c7 KATAKANA LETTER DE
+&De@@
+0x30c8 KATAKANA LETTER TO
+&To@@
+0x30c9 KATAKANA LETTER DO
+&Do@@
+0x30ca KATAKANA LETTER NA
+&Na@@
+0x30cb KATAKANA LETTER NI
+&Ni@@
+0x30cc KATAKANA LETTER NU
+&Nu@@
+0x30cd KATAKANA LETTER NE
+&Ne@@
+0x30ce KATAKANA LETTER NO
+&No@@
+0x30cf KATAKANA LETTER HA
+&Ha@@
+0x30d0 KATAKANA LETTER BA
+&Ba@@
+0x30d1 KATAKANA LETTER PA
+&Pa@@
+0x30d2 KATAKANA LETTER HI
+&Hi@@
+0x30d3 KATAKANA LETTER BI
+&Bi@@
+0x30d4 KATAKANA LETTER PI
+&Pi@@
+0x30d5 KATAKANA LETTER HU
+&Hu@@
+0x30d6 KATAKANA LETTER BU
+&Bu@@
+0x30d7 KATAKANA LETTER PU
+&Pu@@
+0x30d8 KATAKANA LETTER HE
+&He@@
+0x30d9 KATAKANA LETTER BE
+&Be@@
+0x30da KATAKANA LETTER PE
+&Pe@@
+0x30db KATAKANA LETTER HO
+&Ho@@
+0x30dc KATAKANA LETTER BO
+&Bo@@
+0x30dd KATAKANA LETTER PO
+&Po@@
+0x30de KATAKANA LETTER MA
+&Ma@@
+0x30df KATAKANA LETTER MI
+&Mi@@
+0x30e0 KATAKANA LETTER MU
+&Mu@@
+0x30e1 KATAKANA LETTER ME
+&Me@@
+0x30e2 KATAKANA LETTER MO
+&Mo@@
+0x30e3 KATAKANA LETTER SMALL YA
+&YA@@
+0x30e4 KATAKANA LETTER YA
+&Ya@@
+0x30e5 KATAKANA LETTER SMALL YU
+&YU@@
+0x30e6 KATAKANA LETTER YU
+&Yu@@
+0x30e7 KATAKANA LETTER SMALL YO
+&YO@@
+0x30e8 KATAKANA LETTER YO
+&Yo@@
+0x30e9 KATAKANA LETTER RA
+&Ra@@
+0x30ea KATAKANA LETTER RI
+&Ri@@
+0x30eb KATAKANA LETTER RU
+&Ru@@
+0x30ec KATAKANA LETTER RE
+&Re@@
+0x30ed KATAKANA LETTER RO
+&Ro@@
+0x30ee KATAKANA LETTER SMALL WA
+&WA@@
+0x30ef KATAKANA LETTER WA
+&Wa@@
+0x30f0 KATAKANA LETTER WI
+&Wi@@
+0x30f1 KATAKANA LETTER WE
+&We@@
+0x30f2 KATAKANA LETTER WO
+&Wo@@
+0x30f3 KATAKANA LETTER N
+&N6@@
+0x30f4 KATAKANA LETTER VU
+&Vu@@
+0x30f5 KATAKANA LETTER SMALL KA
+&KA@@
+0x30f6 KATAKANA LETTER SMALL KE
+&KE@@
+0x30f7 KATAKANA LETTER VA
+&Va@@
+0x30f8 KATAKANA LETTER VI
+&Vi@@
+0x30f9 KATAKANA LETTER VE
+&Ve@@
+0x30fa KATAKANA LETTER VO
+&Vo@@
+0x30fb KATAKANA MIDDLE DOT
+&.6@@
+0x30fc KATAKANA-HIRAGANA PROLONGED SOUND MARK
+&-6@@
+0x30fd KATAKANA ITERATION MARK
+&*6@@
+0x30fe KATAKANA VOICED ITERATION MARK
+&+6@@
+0x3105 BOPOMOFO LETTER B
+&b4@@
+0x3106 BOPOMOFO LETTER P
+&p4@@
+0x3107 BOPOMOFO LETTER M
+&m4@@
+0x3108 BOPOMOFO LETTER F
+&f4@@
+0x3109 BOPOMOFO LETTER D
+&d4@@
+0x310a BOPOMOFO LETTER T
+&t4@@
+0x310b BOPOMOFO LETTER N
+&n4@@
+0x310c BOPOMOFO LETTER L
+&l4@@
+0x310d BOPOMOFO LETTER G
+&g4@@
+0x310e BOPOMOFO LETTER K
+&k4@@
+0x310f BOPOMOFO LETTER H
+&h4@@
+0x3110 BOPOMOFO LETTER J
+&j4@@
+0x3111 BOPOMOFO LETTER Q
+&q4@@
+0x3112 BOPOMOFO LETTER X
+&x4@@
+0x3113 BOPOMOFO LETTER ZH
+&zh@@
+0x3114 BOPOMOFO LETTER CH
+&ch@@
+0x3115 BOPOMOFO LETTER SH
+&sh@@
+0x3116 BOPOMOFO LETTER R
+&r4@@
+0x3117 BOPOMOFO LETTER Z
+&z4@@
+0x3118 BOPOMOFO LETTER C
+&c4@@
+0x3119 BOPOMOFO LETTER S
+&s4@@
+0x311a BOPOMOFO LETTER A
+&a4@@
+0x311b BOPOMOFO LETTER O
+&o4@@
+0x311c BOPOMOFO LETTER E
+&e4@@
+0x311d BOPOMOFO LETTER EH
+&_eh4_@@
+0x311e BOPOMOFO LETTER AI
+&ai@@
+0x311f BOPOMOFO LETTER EI
+&ei@@
+0x3120 BOPOMOFO LETTER AU
+&au@@
+0x3121 BOPOMOFO LETTER OU
+&ou@@
+0x3122 BOPOMOFO LETTER AN
+&an@@
+0x3123 BOPOMOFO LETTER EN
+&en@@
+0x3124 BOPOMOFO LETTER ANG
+&aN@@
+0x3125 BOPOMOFO LETTER ENG
+&eN@@
+0x3126 BOPOMOFO LETTER ER
+&er@@
+0x3127 BOPOMOFO LETTER I
+&i4@@
+0x3128 BOPOMOFO LETTER U
+&u4@@
+0x3129 BOPOMOFO LETTER IU
+&iu@@
+0x312a BOPOMOFO LETTER V
+&v4@@
+0x312b BOPOMOFO LETTER NG
+&nG@@
+0x312c BOPOMOFO LETTER GN
+&gn@@
+0x321c PARENTHESIZED HANGUL JU
+&_(JU)_@@
+0x3220 PARENTHESIZED IDEOGRAPH ONE
+&1c@@
+0x3221 PARENTHESIZED IDEOGRAPH TWO
+&2c@@
+0x3222 PARENTHESIZED IDEOGRAPH THREE
+&3c@@
+0x3223 PARENTHESIZED IDEOGRAPH FOUR
+&4c@@
+0x3224 PARENTHESIZED IDEOGRAPH FIVE
+&5c@@
+0x3225 PARENTHESIZED IDEOGRAPH SIX
+&6c@@
+0x3226 PARENTHESIZED IDEOGRAPH SEVEN
+&7c@@
+0x3227 PARENTHESIZED IDEOGRAPH EIGHT
+&8c@@
+0x3228 PARENTHESIZED IDEOGRAPH NINE
+&9c@@
+0x3229 PARENTHESIZED IDEOGRAPH TEN
+&_10c_@@
+0x327f KOREAN STANDARD SYMBOL
+&_KSC_@@
+0xe001 JOIN THIS LINE WITH NEXT LINE (Mnemonic)
+&/c@@
+0xe002 Unit space A (ISO-IR-8-1 064)
+&UA@@
+0xe003 Unit space B (ISO-IR-8-1 096)
+&UB@@
+0xe004 NON-SPACING UMLAUT (ISO-IR-38 201) (character part)
+&"3@@
+0xe005 NON-SPACING DIAERESIS WITH ACCENT (ISO-IR-70 192) (character part)
+&"1@@
+0xe006 NON-SPACING GRAVE ACCENT (ISO-IR-103 193) (character part)
+&"!@@
+0xe007 NON-SPACING ACUTE ACCENT (ISO-IR-103 194) (character part)
+&"'@@
+0xe008 NON-SPACING CIRCUMFLEX ACCENT (ISO-IR-103 195) (character part)
+&">@@
+0xe009 NON-SPACING TILDE (ISO-IR-103 196) (character part)
+&"?@@
+0xe00a NON-SPACING MACRON (ISO-IR-103 197) (character part)
+&"-@@
+0xe00b NON-SPACING BREVE (ISO-IR-103 198) (character part)
+&"(@@
+0xe00c NON-SPACING DOT ABOVE (ISO-IR-103 199) (character part)
+&".@@
+0xe00d NON-SPACING DIAERESIS (ISO-IR-103 200) (character part)
+&":@@
+0xe00e NON-SPACING RING ABOVE (ISO-IR-103 202) (character part)
+&"0@@
+0xe00f NON-SPACING DOUBLE ACCUTE (ISO-IR-103 204) (character part)
+&""@@
+0xe010 NON-SPACING CARON (ISO-IR-103 206) (character part)
+&"<@@
+0xe011 NON-SPACING CEDILLA (ISO-IR-103 203) (character part)
+&",@@
+0xe012 NON-SPACING OGONEK (ISO-IR-103 206) (character part)
+&";@@
+0xe013 NON-SPACING LOW LINE (ISO-IR-103 204) (character part)
+&"_@@
+0xe014 NON-SPACING DOUBLE LOW LINE (ISO-IR-38 217) (character part)
+&"=@@
+0xe015 NON-SPACING LONG SOLIDUS (ISO-IR-128 201) (character part)
+&"/@@
+0xe016 GREEK NON-SPACING IOTA BELOW (ISO-IR-55 39) (character part)
+&"i@@
+0xe017 GREEK NON-SPACING DASIA PNEUMATA (ISO-IR-55 38) (character part)
+&"d@@
+0xe018 GREEK NON-SPACING PSILI PNEUMATA (ISO-IR-55 37) (character part)
+&"p@@
+0xe019 GREEK DASIA PNEUMATA (ISO-IR-18 92)
+&;;@@
+0xe01a GREEK PSILI PNEUMATA (ISO-IR-18 124)
+&,,@@
+0xe01b GREEK SMALL LETTER MIDDLE BETA (ISO-IR-18 99)
+&b3@@
+0xe01c CIRCLE (ISO-IR-83 0294)
+&Ci@@
+0xe01d FUNCTION SIGN (ISO-IR-143 221)
+&f(@@
+0xe01e LATIN SMALL LETTER EZH (ISO-IR-158 142)
+&ed@@
+0xe01f ANTE MERIDIAM SIGN (ISO-IR-149 0267)
+&am@@
+0xe020 POST MERIDIAM SIGN (ISO-IR-149 0268)
+&pm@@
+0xe021 TEL COMPATIBILITY SIGN (ISO-IR-149 0269)
+&_Tel_@@
+0xe022 ARABIC LETTER ALEF FINAL FORM COMPATIBILITY (IBM868 144)
+&_a+:_@@
+0xe023 DUTCH GUILDER SIGN (IBM437 159)
+&Fl@@
+0xe024 GAMMA FUNCTION SIGN (ISO-10646-1DIS 032/032/037/122)
+&GF@@
+0xe025 RIGHTWARDS VECTOR ABOVE (ISO-10646-1DIS 032/032/038/046)
+&>V@@
+0xe026 GREEK VARIA (ISO-10646-1DIS 032/032/042/164)
+&!*@@
+0xe027 GREEK PERISPOMENI (ISO-10646-1DIS 032/032/042/165)
+&?*@@
+0xe028 LATIN CAPITAL LETTER J WITH CARON (lowercase: 000/000/001/240)
+&J<@@
+0xfb00 LATIN SMALL LIGATURE FF
+&ff@@
+0xfb01 LATIN SMALL LIGATURE FI
+&fi@@
+0xfb02 LATIN SMALL LIGATURE FL
+&fl@@
+0xfb03 LATIN SMALL LIGATURE FFI
+&_ffi_@@
+0xfb04 LATIN SMALL LIGATURE FFL
+&_ffl_@@
+0xfb05 LATIN SMALL LIGATURE FT
+&ft@@
+0xfb06 LATIN SMALL LIGATURE ST
+&st@@
+0xfe7d ARABIC SHADDA MEDIAL FORM
+&_3+;_@@
+0xfe82 ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+&_aM._@@
+0xfe84 ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+&_aH._@@
+0xfe8d ARABIC LETTER ALEF ISOLATED FORM
+&_a+-_@@
+0xfe8e ARABIC LETTER ALEF FINAL FORM
+&_a+._@@
+0xfe8f ARABIC LETTER BEH ISOLATED FORM
+&_b+-_@@
+0xfe90 ARABIC LETTER BEH INITIAL FORM
+&_b+,_@@
+0xfe91 ARABIC LETTER BEH MEDIAL FORM
+&_b+;_@@
+0xfe92 ARABIC LETTER BEH FINAL FORM
+&_b+._@@
+0xfe93 ARABIC LETTER TEH MARBUTA ISOLATED FORM
+&_tm-_@@
+0xfe94 ARABIC LETTER TEH MARBUTA FINAL FORM
+&_tm._@@
+0xfe95 ARABIC LETTER TEH ISOLATED FORM
+&_t+-_@@
+0xfe96 ARABIC LETTER TEH INITIAL FORM
+&_t+,_@@
+0xfe97 ARABIC LETTER TEH MEDIAL FORM
+&_t+;_@@
+0xfe98 ARABIC LETTER TEH FINAL FORM
+&_t+._@@
+0xfe99 ARABIC LETTER THEH ISOLATED FORM
+&_tk-_@@
+0xfe9a ARABIC LETTER THEH INITIAL FORM
+&_tk,_@@
+0xfe9b ARABIC LETTER THEH MEDIAL FORM
+&_tk;_@@
+0xfe9c ARABIC LETTER THEH FINAL FORM
+&_tk._@@
+0xfe9d ARABIC LETTER JEEM ISOLATED FORM
+&_g+-_@@
+0xfe9e ARABIC LETTER JEEM INITIAL FORM
+&_g+,_@@
+0xfe9f ARABIC LETTER JEEM MEDIAL FORM
+&_g+;_@@
+0xfea0 ARABIC LETTER JEEM FINAL FORM
+&_g+._@@
+0xfea1 ARABIC LETTER HAH ISOLATED FORM
+&_hk-_@@
+0xfea2 ARABIC LETTER HAH INITIAL FORM
+&_hk,_@@
+0xfea3 ARABIC LETTER HAH MEDIAL FORM
+&_hk;_@@
+0xfea4 ARABIC LETTER HAH FINAL FORM
+&_hk._@@
+0xfea5 ARABIC LETTER KHAH ISOLATED FORM
+&_x+-_@@
+0xfea6 ARABIC LETTER KHAH INITIAL FORM
+&_x+,_@@
+0xfea7 ARABIC LETTER KHAH MEDIAL FORM
+&_x+;_@@
+0xfea8 ARABIC LETTER KHAH FINAL FORM
+&_x+._@@
+0xfea9 ARABIC LETTER DAL ISOLATED FORM
+&_d+-_@@
+0xfeaa ARABIC LETTER DAL FINAL FORM
+&_d+._@@
+0xfeab ARABIC LETTER THAL ISOLATED FORM
+&_dk-_@@
+0xfeac ARABIC LETTER THAL FINAL FORM
+&_dk._@@
+0xfead ARABIC LETTER REH ISOLATED FORM
+&_r+-_@@
+0xfeae ARABIC LETTER REH FINAL FORM
+&_r+._@@
+0xfeaf ARABIC LETTER ZAIN ISOLATED FORM
+&_z+-_@@
+0xfeb0 ARABIC LETTER ZAIN FINAL FORM
+&_z+._@@
+0xfeb1 ARABIC LETTER SEEN ISOLATED FORM
+&_s+-_@@
+0xfeb2 ARABIC LETTER SEEN INITIAL FORM
+&_s+,_@@
+0xfeb3 ARABIC LETTER SEEN MEDIAL FORM
+&_s+;_@@
+0xfeb4 ARABIC LETTER SEEN FINAL FORM
+&_s+._@@
+0xfeb5 ARABIC LETTER SHEEN ISOLATED FORM
+&_sn-_@@
+0xfeb6 ARABIC LETTER SHEEN INITIAL FORM
+&_sn,_@@
+0xfeb7 ARABIC LETTER SHEEN MEDIAL FORM
+&_sn;_@@
+0xfeb8 ARABIC LETTER SHEEN FINAL FORM
+&_sn._@@
+0xfeb9 ARABIC LETTER SAD ISOLATED FORM
+&_c+-_@@
+0xfeba ARABIC LETTER SAD INITIAL FORM
+&_c+,_@@
+0xfebb ARABIC LETTER SAD MEDIAL FORM
+&_c+;_@@
+0xfebc ARABIC LETTER SAD FINAL FORM
+&_c+._@@
+0xfebd ARABIC LETTER DAD ISOLATED FORM
+&_dd-_@@
+0xfebe ARABIC LETTER DAD INITIAL FORM
+&_dd,_@@
+0xfebf ARABIC LETTER DAD MEDIAL FORM
+&_dd;_@@
+0xfec0 ARABIC LETTER DAD FINAL FORM
+&_dd._@@
+0xfec1 ARABIC LETTER TAH ISOLATED FORM
+&_tj-_@@
+0xfec2 ARABIC LETTER TAH INITIAL FORM
+&_tj,_@@
+0xfec3 ARABIC LETTER TAH MEDIAL FORM
+&_tj;_@@
+0xfec4 ARABIC LETTER TAH FINAL FORM
+&_tj._@@
+0xfec5 ARABIC LETTER ZAH ISOLATED FORM
+&_zH-_@@
+0xfec6 ARABIC LETTER ZAH INITIAL FORM
+&_zH,_@@
+0xfec7 ARABIC LETTER ZAH MEDIAL FORM
+&_zH;_@@
+0xfec8 ARABIC LETTER ZAH FINAL FORM
+&_zH._@@
+0xfec9 ARABIC LETTER AIN ISOLATED FORM
+&_e+-_@@
+0xfeca ARABIC LETTER AIN INITIAL FORM
+&_e+,_@@
+0xfecb ARABIC LETTER AIN MEDIAL FORM
+&_e+;_@@
+0xfecc ARABIC LETTER AIN FINAL FORM
+&_e+._@@
+0xfecd ARABIC LETTER GHAIN ISOLATED FORM
+&_i+-_@@
+0xfece ARABIC LETTER GHAIN INITIAL FORM
+&_i+,_@@
+0xfecf ARABIC LETTER GHAIN MEDIAL FORM
+&_i+;_@@
+0xfed0 ARABIC LETTER GHAIN FINAL FORM
+&_i+._@@
+0xfed1 ARABIC LETTER FEH ISOLATED FORM
+&_f+-_@@
+0xfed2 ARABIC LETTER FEH INITIAL FORM
+&_f+,_@@
+0xfed3 ARABIC LETTER FEH MEDIAL FORM
+&_f+;_@@
+0xfed4 ARABIC LETTER FEH FINAL FORM
+&_f+._@@
+0xfed5 ARABIC LETTER QAF ISOLATED FORM
+&_q+-_@@
+0xfed6 ARABIC LETTER QAF INITIAL FORM
+&_q+,_@@
+0xfed7 ARABIC LETTER QAF MEDIAL FORM
+&_q+;_@@
+0xfed8 ARABIC LETTER QAF FINAL FORM
+&_q+._@@
+0xfed9 ARABIC LETTER KAF ISOLATED FORM
+&_k+-_@@
+0xfeda ARABIC LETTER KAF INITIAL FORM
+&_k+,_@@
+0xfedb ARABIC LETTER KAF MEDIAL FORM
+&_k+;_@@
+0xfedc ARABIC LETTER KAF FINAL FORM
+&_k+._@@
+0xfedd ARABIC LETTER LAM ISOLATED FORM
+&_l+-_@@
+0xfede ARABIC LETTER LAM INITIAL FORM
+&_l+,_@@
+0xfedf ARABIC LETTER LAM MEDIAL FORM
+&_l+;_@@
+0xfee0 ARABIC LETTER LAM FINAL FORM
+&_l+._@@
+0xfee1 ARABIC LETTER MEEM ISOLATED FORM
+&_m+-_@@
+0xfee2 ARABIC LETTER MEEM INITIAL FORM
+&_m+,_@@
+0xfee3 ARABIC LETTER MEEM MEDIAL FORM
+&_m+;_@@
+0xfee4 ARABIC LETTER MEEM FINAL FORM
+&_m+._@@
+0xfee5 ARABIC LETTER NOON ISOLATED FORM
+&_n+-_@@
+0xfee6 ARABIC LETTER NOON INITIAL FORM
+&_n+,_@@
+0xfee7 ARABIC LETTER NOON MEDIAL FORM
+&_n+;_@@
+0xfee8 ARABIC LETTER NOON FINAL FORM
+&_n+._@@
+0xfee9 ARABIC LETTER HEH ISOLATED FORM
+&_h+-_@@
+0xfeea ARABIC LETTER HEH INITIAL FORM
+&_h+,_@@
+0xfeeb ARABIC LETTER HEH MEDIAL FORM
+&_h+;_@@
+0xfeec ARABIC LETTER HEH FINAL FORM
+&_h+._@@
+0xfeed ARABIC LETTER WAW ISOLATED FORM
+&_w+-_@@
+0xfeee ARABIC LETTER WAW FINAL FORM
+&_w+._@@
+0xfeef ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+&_j+-_@@
+0xfef0 ARABIC LETTER ALEF MAKSURA FINAL FORM
+&_j+._@@
+0xfef1 ARABIC LETTER YEH ISOLATED FORM
+&_y+-_@@
+0xfef2 ARABIC LETTER YEH INITIAL FORM
+&_y+,_@@
+0xfef3 ARABIC LETTER YEH MEDIAL FORM
+&_y+;_@@
+0xfef4 ARABIC LETTER YEH FINAL FORM
+&_y+._@@
+0xfef5 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+&_lM-_@@
+0xfef6 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+&_lM._@@
+0xfef7 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+&_lH-_@@
+0xfef8 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+&_lH._@@
+0xfef9 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+&_lh-_@@
+0xfefa ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+&_lh._@@
+0xfefb ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+&_la-_@@
+0xfefc ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+&_la._@@
diff --git a/externals/figlet/fonts/moscow.flc b/externals/figlet/fonts/moscow.flc
new file mode 100644
index 0000000000..86454f175c
--- /dev/null
+++ b/externals/figlet/fonts/moscow.flc
@@ -0,0 +1,68 @@
+flc2a
+# This controlfile maps the U.S. keyboard to Cyrillic
+# in the style of the "moscow" font, but is meant for use
+# with a FIGlet Unicode font with Cyrillic codes, such as "banner"
+#
+# "moscow" is an upper-case-only font, so for full compatibility
+# use the "upper" controlfile as well and avoid "@" and "<".
+t / \0x044c
+t \0x5c \0x044a
+t | \0x044b
+t ~ \0x044d
+t < \0x042d
+t ` \0x0443
+t @ \0x042e
+t > \0x0439
+t A \0x0410
+t a \0x0430
+t B \0x0411
+t b \0x0431
+t C \0x0427
+t c \0x0447
+t D \0x0414
+t d \0x0434
+t E \0x0415
+t e \0x0435
+t F \0x0424
+t f \0x0444
+t G \0x0413
+t g \0x0433
+t H \0x0425
+t h \0x0445
+t I \0x0418
+t i \0x0438
+t J \0x0416
+t j \0x0436
+t K \0x041a
+t k \0x043a
+t L \0x041b
+t l \0x043b
+t M \0x041c
+t m \0x043c
+t N \0x041d
+t n \0x043d
+t O \0x041e
+t o \0x043e
+t P \0x041f
+t p \0x043f
+t Q \0x0426
+t q \0x0446
+t R \0x0420
+t r \0x0440
+t S \0x0421
+t s \0x0441
+t T \0x0422
+t t \0x0442
+t U \0x0423
+t u \0x0443
+t V \0x0412
+t v \0x0432
+t W \0x0428
+t w \0x0448
+t X \0x0429
+t x \0x0449
+t Y \0x042f
+t y \0x044f
+t Z \0x0417
+t z \0x0437
+t = \-6
diff --git a/externals/figlet/fonts/script.flf b/externals/figlet/fonts/script.flf
new file mode 100644
index 0000000000..8f2f048fab
--- /dev/null
+++ b/externals/figlet/fonts/script.flf
@@ -0,0 +1,1493 @@
+flf2a$ 7 5 16 0 10 0 3904 96
+Script by Glenn Chappell 4/93
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$$@
+$$@
+$$@
+$$@
+$$@
+$$@
+$$@@
+ @
+ |@
+ |@
+ |@
+ o@
+ @
+ @@
+ oo@
+ ||@
+ $$@
+ $$@
+ $$@
+ @
+ @@
+ @
+ | | @
+ --+--+--@
+ --+--+--@
+ | | @
+ @
+ @@
+ @
+ |_|_@
+ (|_| @
+ _|_|)@
+ | | @
+ @
+ @@
+ @
+ () /@
+ / @
+ / @
+ / ()@
+ @
+ @@
+ @
+ () @
+ /\ @
+ / \/@
+ \__/\@
+ @
+ @@
+ o@
+ /@
+ $@
+ $@
+ $@
+ @
+ @@
+ @
+ /@
+ | @
+ | @
+ | @
+ \@
+ @@
+ @
+ \ @
+ |@
+ |@
+ |@
+ / @
+ @@
+ @
+ @
+ \|/ @
+ --*--@
+ /|\ @
+ @
+ @@
+ @
+ @
+ | @
+ --+--@
+ | @
+ @
+ @@
+ @
+ @
+ @
+ @
+ o@
+ /@
+ @@
+ @
+ @
+ @
+ -----@
+ $ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ o@
+ @
+ @@
+ @
+ /@
+ / @
+ / @
+ / @
+ @
+ @@
+ __ @
+ / \ @
+ | |@
+ | |@
+ \__/ @
+ @
+ @@
+ ,@
+ /|@
+ |@
+ |@
+ |@
+ @
+ @@
+ __ @
+ / )@
+ $/ @
+ / @
+ /___@
+ @
+ @@
+ ___ @
+ / \@
+ $__/@
+ $ \@
+ \___/@
+ @
+ @@
+ @
+ | | @
+ |__|_@
+ | @
+ | @
+ @
+ @@
+ ____@
+ | @
+ |___ @
+ $ \@
+ \___/@
+ @
+ @@
+ __ @
+ /$ @
+ | __ @
+ |/ \@
+ \__/@
+ @
+ @@
+ _____@
+ $ /@
+ $ / @
+ $/ @
+ / @
+ @
+ @@
+ __ @
+ / \@
+ \__/@
+ / \@
+ \__/@
+ @
+ @@
+ __ @
+ / |@
+ \_/|@
+ |@
+ |@
+ @
+ @@
+ @
+ o@
+ $@
+ $@
+ o@
+ @
+ @@
+ @
+ o@
+ $@
+ $@
+ o@
+ /@
+ @@
+ @
+ /@
+ / @
+ \ @
+ \@
+ @
+ @@
+ @
+ @
+ -----@
+ -----@
+ @
+ @
+ @@
+ @
+ \ @
+ \@
+ /@
+ / @
+ @
+ @@
+ __ @
+ / \@
+ $_/@
+ | @
+ o @
+ @
+ @@
+ @
+ ____ @
+ / __,\ @
+ | / | |@
+ | \_/|/ @
+ \____/ @
+ @@
+ ___, @
+ / | @
+ | | @
+ | | @
+ \__/\_/@
+ @
+ @@
+ , __ @
+ /|/ \@
+ | __/@
+ | \@
+ |(__/@
+ @
+ @@
+ ___$@
+ / (_)@
+ | $ @
+ | $ @
+ \___/@
+ @
+ @@
+ $____ @
+ (| \ @
+ | |@
+ $_| |@
+ (/\___/ @
+ @
+ @@
+ ___$@
+ / (_)@
+ \__$ @
+ / $ @
+ \___/@
+ @
+ @@
+ $______@
+ (_) |$ @
+ _|_$@
+ / | |@
+ (_/ @
+ @
+ @@
+ @
+ () |@
+ /\/|@
+ / |@
+ /(__/ @
+ @
+ @@
+ , @
+ /| | @
+ |___| @
+ | |\@
+ | |/@
+ @
+ @@
+ _ @
+ | |@
+ | |@
+ _ |/ @
+ \_/\/@
+ @
+ @@
+ @
+ /\ @
+ | | @
+ | | @
+ \_|/@
+ /| @
+ \| @@
+ , @
+ /| / @
+ |__/ @
+ | \$ @
+ | \_/@
+ @
+ @@
+ $_$ @
+ \_|_) @
+ |$ @
+ $_|$ @
+ (/\___/@
+ @
+ @@
+ ,__ __ @
+ /| | | @
+ | | | @
+ | | | @
+ | | |_/@
+ @
+ @@
+ , _ @
+ /|/ \ @
+ | | @
+ | | @
+ | |_/@
+ @
+ @@
+ __ @
+ /\_\/@
+ | |@
+ | |@
+ \__/ @
+ @
+ @@
+ , __ @
+ /|/ \@
+ |___/@
+ | $@
+ | $@
+ @
+ @@
+ __ @
+ / \ @
+ | __ | @
+ |/ \| @
+ \__/\_/@
+ @
+ @@
+ , __ @
+ /|/ \ @
+ |___/ @
+ | \$ @
+ | \_/@
+ @
+ @@
+ @
+ () @
+ /\ @
+ / \@
+ /(__/@
+ @
+ @@
+ $______@
+ (_) | @
+ $ | @
+ $_ | @
+ (_/ @
+ @
+ @@
+ $_ @
+ (_| | @
+ | | @
+ | | @
+ \__/\_/@
+ @
+ @@
+ $_ @
+ (_| |_/@
+ | | @
+ | | @
+ \_/ @
+ @
+ @@
+ $_ @
+ (_| | |_/@
+ | | | @
+ | | | @
+ \_/ \_/ @
+ @
+ @@
+ $_ @
+ (_\ / @
+ $\/ @
+ $/\ @
+ _/ \_/@
+ @
+ @@
+ $_ @
+ (_| | @
+ | | @
+ | | @
+ \_/|/@
+ /| @
+ \| @@
+ $__ @
+ (_ \ @
+ $/ @
+ / @
+ /__/@
+ /| @
+ \| @@
+ _@
+ | @
+ | @
+ | @
+ | @
+ |_@
+ @@
+ @
+ \ @
+ \ @
+ \ @
+ \@
+ @
+ @@
+ _ @
+ |@
+ |@
+ |@
+ |@
+ _|@
+ @@
+ /\@
+ $@
+ $@
+ $@
+ $@
+ @
+ @@
+ @
+ @
+ @
+ @
+ $ @
+ $ @
+ _____@@
+ o@
+ \@
+ $@
+ $@
+ $@
+ @
+ @@
+ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+ $_$ @
+ | | @
+ | | @
+ |/ \_@
+ \_/ @
+ @
+ @@
+ @
+ @
+ __ @
+ /$ @
+ \___/@
+ @
+ @@
+ @
+ | @
+ __| @
+ / | @
+ \_/|_/@
+ @
+ @@
+ @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+ $_$ @
+ | | @
+ | | @
+ |/ @
+ |__/@
+ |\ @
+ |/ @@
+ @
+ @
+ __, @
+ / | @
+ \_/|/@
+ /| @
+ \| @@
+ $_$ @
+ | | @
+ | | @
+ |/ \ @
+ | |_/@
+ @
+ @@
+ @
+ o @
+ @
+ | @
+ |_/@
+ @
+ @@
+ @
+ o @
+ @
+ | @
+ |/@
+ /| @
+ \| @@
+ $_$ @
+ | | @
+ | | @
+ |/_) @
+ | \_/@
+ @
+ @@
+ $_$ @
+ | | @
+ | | @
+ |/ @
+ |__/@
+ @
+ @@
+ @
+ @
+ _ _ _ @
+ / |/ |/ | @
+ $ | | |_/@
+ @
+ @@
+ @
+ @
+ _ _ @
+ / |/ | @
+ $ | |_/@
+ @
+ @@
+ @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+ @
+ @
+ _ @
+ |/ \_@
+ |__/ @
+ /| @
+ \| @@
+ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ |\ @
+ |/ @@
+ @
+ @
+ ,_ @
+ / | @
+ $ |_/@
+ @
+ @@
+ @
+ @
+ , @
+ / \_@
+ $\/ @
+ @
+ @@
+ @
+ @
+ _|_ @
+ | @
+ |_/@
+ @
+ @@
+ @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+ @
+ @
+ @
+ | |_@
+ $\/ @
+ @
+ @@
+ @
+ @
+ @
+ | | |_@
+ $\/ \/ @
+ @
+ @@
+ @
+ @
+ @
+ /\/ @
+ $/\_/@
+ @
+ @@
+ @
+ @
+ @
+ | | @
+ $\_/|/@
+ /| @
+ \| @@
+ @
+ @
+ __ @
+ / / _@
+ $/_/ @
+ /| @
+ \| @@
+ @
+ /@
+ | @
+ < @
+ | @
+ \@
+ @@
+ |@
+ |@
+ |@
+ |@
+ |@
+ |@
+ |@@
+ @
+ \ @
+ | @
+ >@
+ | @
+ / @
+ @@
+ /\/@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ o o @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+ o o @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+ o o @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+ o o @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+ o o @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+ o o @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+ _ @
+ / \@
+ | /@
+ | \@
+ | _/@
+ | @
+ @@
+160 NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@@
+161 INVERTED EXCLAMATION MARK
+ @
+ o@
+ |@
+ |@
+ |@
+ @
+ @@
+162 CENT SIGN
+ @
+ @
+ _|_ @
+ / | @
+ \_|_/@
+ | @
+ @@
+163 POUND SIGN
+ _ @
+ / \ @
+ __|__ @
+ _| $ @
+ (/ \__/@
+ @
+ @@
+164 CURRENCY SIGN
+ @
+ \ _ /@
+ / \ @
+ \_/ @
+ / \@
+ @
+ @@
+165 YEN SIGN
+ @
+ \ /@
+ _\_/_@
+ __|__@
+ | @
+ @
+ @@
+166 BROKEN BAR
+ |@
+ |@
+ |@
+ @
+ |@
+ |@
+ |@@
+167 SECTION SIGN
+ _@
+ ( @
+ /\@
+ \/@
+ _)@
+ @
+ @@
+168 DIAERESIS
+ o o@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ @
+ @@
+169 COPYRIGHT SIGN
+ ____ @
+ / __ \ @
+ / / () \ @
+ | | |@
+ \ \__/ / @
+ \____/ @
+ @@
+170 FEMININE ORDINAL INDICATOR
+ __, @
+ / | @
+ \_/|_@
+ ---- @
+ $ @
+ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ //@
+ // @
+ \\ @
+ \\@
+ @
+ @@
+172 NOT SIGN
+ @
+ ___ @
+ |@
+ $ @
+ $ @
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ @
+ ----@
+ $ @
+ @
+ @@
+174 REGISTERED SIGN
+ ____ @
+ /, _ \ @
+ //|/ \ \ @
+ | |__/ |@
+ \ | \_// @
+ \____/ @
+ @@
+175 MACRON
+ _____@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+176 DEGREE SIGN
+ _ @
+ / \@
+ \_/@
+ @
+ $ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ @
+ @
+ | @
+ --+--@
+ __|__@
+ @
+ @@
+178 SUPERSCRIPT TWO
+ _ @
+ )@
+ /_@
+ @
+ $@
+ @
+ @@
+179 SUPERSCRIPT THREE
+ ___@
+ _/@
+ __)@
+ @
+ $ @
+ @
+ @@
+180 ACUTE ACCENT
+ /@
+ $@
+ $@
+ $@
+ $@
+ @
+ @@
+181 MICRO SIGN
+ @
+ @
+ @
+ | | @
+ |\_/|_/@
+ | @
+ | @@
+182 PILCROW SIGN
+ ____ @
+ / | |@
+ \_| |@
+ | |@
+ | |@
+ @
+ @@
+183 MIDDLE DOT
+ @
+ @
+ $O$@
+ $ @
+ $ @
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ $ @
+ _)@
+ @@
+185 SUPERSCRIPT ONE
+ ,@
+ /|@
+ |@
+ @
+ $@
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ __ @
+ / \_@
+ \__/ @
+ ---- @
+ $ @
+ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ \\ @
+ \\@
+ //@
+ // @
+ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ , @
+ /| / @
+ |/ @
+ /|_|_@
+ / | @
+ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ , @
+ /| / @
+ |/_ @
+ / )@
+ / /_@
+ @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ___ @
+ _/ / @
+ __)/ @
+ /|_|_@
+ / | @
+ @
+ @@
+191 INVERTED QUESTION MARK
+ @
+ o @
+ _| @
+ /$ @
+ \__/@
+ @
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \ @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ / @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\ @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/ @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ o o @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ (_), @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+198 LATIN CAPITAL LETTER AE
+ ___,___$@
+ / | (_)@
+ | |__ @
+ | | @
+ \__/\___/@
+ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ ___$@
+ / (_)@
+ | $ @
+ | $ @
+ \___/@
+ _) @
+ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \ @
+ ___$ @
+ / (_) @
+ >--$ @
+ \____/@
+ @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ / @
+ ___$ @
+ / (_) @
+ >--$ @
+ \____/@
+ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\ @
+ ___$ @
+ / (_) @
+ >--$ @
+ \____/@
+ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ o o @
+ ___$ @
+ / (_) @
+ >--$ @
+ \____/@
+ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \ @
+ $_$ @
+ | | @
+ _ |/ @
+ \_/\_/@
+ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ / @
+ $_$ @
+ | | @
+ _ |/ @
+ \_/\_/@
+ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\ @
+ $_$ @
+ | | @
+ _ |/ @
+ \_/\_/@
+ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ o o @
+ $_$ @
+ | | @
+ _ |/ @
+ \_/\_/@
+ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ $____ @
+ (| \ @
+ __|__ |@
+ $_| |@
+ (/\___/ @
+ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/ @
+ , _ @
+ /|/ \ @
+ | | @
+ | |_/@
+ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \ @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ / @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\ @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/ @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ o o @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ $\/$@
+ $/\$@
+ $ $@
+ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ __ /@
+ /\_//@
+ | / |@
+ | / |@
+ /__/ @
+ / @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \ @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ / @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\ @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ o o @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ / @
+ $_ @
+ (_| | @
+ | | @
+ \_/|/@
+ /| @
+ \| @@
+222 LATIN CAPITAL LETTER THORN
+ , @
+ | __ @
+ /|/ \@
+ |___/@
+ | $@
+ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ _ @
+ / \@
+ | /@
+ | \@
+ | _/@
+ | @
+ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ / @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ o o @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ @
+ () @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ @
+ __,_ @
+ / |/ @
+ \_/|__/@
+ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ @
+ __ @
+ / @
+ \___/@
+ _) @
+ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \ @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ / @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\ @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ o o @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \ @
+ @
+ @
+ | @
+ |_/@
+ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ / @
+ @
+ @
+ | @
+ |_/@
+ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\ @
+ @
+ @
+ | @
+ |_/@
+ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ o o @
+ @
+ @
+ | @
+ |__/@
+ @
+ @@
+240 LATIN SMALL LETTER ETH
+ @
+ \/@
+ _'|@
+ / |@
+ \_/ @
+ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/ @
+ @
+ _ _ @
+ / |/ | @
+ $ | |_/@
+ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \ @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ / @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\ @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/ @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ o o @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+247 DIVISION SIGN
+ @
+ @
+ O @
+ -----@
+ O @
+ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ @
+ __/ @
+ / /\_@
+ \/_/ @
+ / @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \ @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ / @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\ @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ o o @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ / @
+ @
+ @
+ | | @
+ $\_/|/@
+ /| @
+ \| @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ | | @
+ | | @
+ |/ \_@
+ |__/ @
+ /| @
+ \| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ o o @
+ @
+ @
+ | | @
+ $\_/|/@
+ /| @
+ \| @@
diff --git a/externals/figlet/fonts/shadow.flf b/externals/figlet/fonts/shadow.flf
new file mode 100644
index 0000000000..2ec918211b
--- /dev/null
+++ b/externals/figlet/fonts/shadow.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 16 0 10 0 4992 96
+Shadow by Glenn Chappell 6/93 -- based on Standard & SmShadow
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@@
+ $|$@
+ $|$@
+ _|$@
+ _)$@
+ @@
+ $| )$@
+ V V$ @
+ $$ @
+ $$ @
+ @@
+ $| |$ @
+ _ |_ |_|$@
+ _ |_ |_|$@
+ _| _|$ @
+ @@
+ $|$ @
+ $ __)$@
+ \__ \$@
+ ( /$@
+ _|$ @@
+ _) /$@
+ $/$ @
+ $/$ @
+ _/ _)$@
+ @@
+ $ _ )$ @
+ $_ \ \$@
+ $( ` <$@
+ \___/\/$@
+ @@
+ $)$@
+ /$ @
+ $$ @
+ $$ @
+ @@
+ $/$@
+ $|$ @
+ $|$ @
+ $|$ @
+ \_\$@@
+ \ \$ @
+ $|$@
+ $|$@
+ $|$@
+ _/$ @@
+ $\$ @
+ \ /$@
+ $_ _\$@
+ \/$ @
+ @@
+ @
+ $|$ @
+ _ _|$@
+ _|$ @
+ @@
+ @
+ @
+ @
+ $)$@
+ /$ @@
+ @
+ @
+ _____|$@
+ $$ @
+ @@
+ @
+ @
+ @
+ _)$@
+ @@
+ $/$@
+ $/$ @
+ $/$ @
+ _/$ @
+ @@
+ $_ \$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+ _ |$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+ ___ \$ @
+ ) |$@
+ $__/$ @
+ _____|$@
+ @@
+ ___ /$ @
+ _ \$ @
+ ) |$@
+ ____/$ @
+ @@
+ $| |$ @
+ $| |$ @
+ ___ __|$@
+ _|$ @
+ @@
+ $___|$ @
+ $__ \$ @
+ ) |$@
+ ____/$ @
+ @@
+ $/$ @
+ $ _ \$ @
+ $( |$@
+ \___/$ @
+ @@
+ ___ |$@
+ $/$ @
+ $/$ @
+ _/$ @
+ @@
+ $ _ )$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+ $_ \$ @
+ $( |$@
+ \__ |$@
+ __/$ @
+ @@
+ @
+ _)$@
+ $$ @
+ _)$@
+ @@
+ @
+ _)$@
+ $$ @
+ $)$@
+ /$ @@
+ $/$@
+ $/$ @
+ \ \$ @
+ \_\$@
+ @@
+ @
+ _____|$@
+ _____|$@
+ @
+ @@
+ \ \$ @
+ \ \$@
+ $/$@
+ _/$ @
+ @@
+ __ \$@
+ $/$@
+ _|$ @
+ _)$ @
+ @@
+ $__ \$ @
+ $/ _` |$@
+ $| ( |$@
+ \ \__,_|$@
+ \____/$ @@
+ $\$ @
+ $_ \$ @
+ $___ \$ @
+ _/ _\$@
+ @@
+ $__ )$ @
+ $__ \$ @
+ $| |$@
+ ____/$ @
+ @@
+ $___|$@
+ $|$ @
+ $|$ @
+ \____|$@
+ @@
+ $__ \$ @
+ $| |$@
+ $| |$@
+ ____/$ @
+ @@
+ $____|$@
+ $__|$ @
+ $|$ @
+ _____|$@
+ @@
+ $____|$@
+ $|$ @
+ $__|$ @
+ _|$ @
+ @@
+ $___|$@
+ $|$ @
+ $| |$@
+ \____|$@
+ @@
+ $| |$@
+ $| |$@
+ $___ |$@
+ _| _|$@
+ @@
+ _ _|$@
+ $|$ @
+ $|$ @
+ ___|$@
+ @@
+ $|$@
+ $|$@
+ $\ |$@
+ \___/$ @
+ @@
+ $| /$@
+ $' /$ @
+ $. \$ @
+ _|\_\$@
+ @@
+ $|$ @
+ $|$ @
+ $|$ @
+ _____|$@
+ @@
+ $ \ |$@
+ $|\/ |$@
+ $| |$@
+ _| _|$@
+ @@
+ $ \ |$@
+ $ \ |$@
+ $|\ |$@
+ _| \_|$@
+ @@
+ $_ \$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+ $ _ \$ @
+ $| |$@
+ $___/$ @
+ _|$ @
+ @@
+ $_ \$ @
+ $| |$@
+ $| |$@
+ \__\_\$@
+ @@
+ $ _ \$ @
+ $| |$@
+ $__ <$ @
+ _| \_\$@
+ @@
+ $___|$ @
+ \___ \$ @
+ $|$@
+ _____/$ @
+ @@
+ __ __|$@
+ $|$ @
+ $|$ @
+ _|$ @
+ @@
+ $| |$@
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+ \ \ /$@
+ \ \ /$ @
+ \ \ /$ @
+ \_/$ @
+ @@
+ \ \ /$@
+ \ \ \ /$ @
+ \ \ \ /$ @
+ \_/\_/$ @
+ @@
+ \ \ /$@
+ \ /$ @
+ $ \$ @
+ _/\_\$@
+ @@
+ \ \ /$@
+ \ /$ @
+ $|$ @
+ _|$ @
+ @@
+ __ /$@
+ $/$ @
+ $/$ @
+ ____|$@
+ @@
+ $_|$@
+ $|$ @
+ $|$ @
+ $|$ @
+ __|$@@
+ \ \$ @
+ \ \$ @
+ \ \$ @
+ \_\$@
+ @@
+ _ |$@
+ $|$@
+ $|$@
+ $|$@
+ __|$@@
+ /\\$@
+ $$ @
+ $$ @
+ $$ @
+ @@
+ @
+ @
+ @
+ $$ @
+ _____|$@@
+ $)$@
+ \|$@
+ $$ @
+ $$ @
+ @@
+ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+ $|$ @
+ $__ \$ @
+ $| |$@
+ _.__/$ @
+ @@
+ @
+ $__|$@
+ $($ @
+ \___|$@
+ @@
+ $|$@
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+ @
+ $_ \$@
+ $ __/$@
+ \___|$@
+ @@
+ $_|$@
+ $|$ @
+ $__|$@
+ _|$ @
+ @@
+ @
+ $_` |$@
+ $( |$@
+ \__, |$@
+ |___/$ @@
+ $|$ @
+ $__ \$ @
+ $| | |$@
+ _| |_|$@
+ @@
+ _)$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+ _)$@
+ $|$@
+ $|$@
+ $|$@
+ ___/$ @@
+ $|$ @
+ $| /$@
+ $ <$ @
+ _|\_\$@
+ @@
+ $|$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+ @
+ $__ `__ \$ @
+ $| | |$@
+ _| _| _|$@
+ @@
+ @
+ $__ \$ @
+ $| |$@
+ _| _|$@
+ @@
+ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+ @
+ $__ \$ @
+ $| |$@
+ $.__/$ @
+ _|$ @@
+ @
+ $_` |$@
+ $( |$@
+ \__, |$@
+ _|$@@
+ @
+ $ __|$@
+ $|$ @
+ _|$ @
+ @@
+ @
+ $__|$@
+ \__ \$@
+ ____/$@
+ @@
+ $|$ @
+ $__|$@
+ $|$ @
+ \__|$@
+ @@
+ @
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+ @
+ \ \ /$@
+ \ \ /$ @
+ \_/$ @
+ @@
+ @
+ \ \ \ /$@
+ \ \ \ /$ @
+ \_/\_/$ @
+ @@
+ @
+ \ \ /$@
+ ` <$ @
+ _/\_\$@
+ @@
+ @
+ $| |$@
+ $| |$@
+ \__, |$@
+ ____/$ @@
+ @
+ _ /$@
+ $/$ @
+ ___|$@
+ @@
+ $/$@
+ $|$ @
+ < <$ @
+ $|$ @
+ \_\$@@
+ $|$@
+ $|$@
+ $|$@
+ $|$@
+ _|$@@
+ \ \$ @
+ $|$ @
+ ` >$@
+ $|$ @
+ _/$ @@
+ / _/$@
+ $$ @
+ $$ @
+ $$ @
+ @@
+ _) \ _)$@
+ $_ \$ @
+ $___ \$ @
+ _/ _\$@
+ @@
+ _) _)$@
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+ _) _)$@
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+ _) _)$@
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+ _) _)$@
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+ _) _)$@
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+ $_ \$@
+ $| /$@
+ $|\ \$@
+ $|__/$@
+ _|$ @@
+160 NO-BREAK SPACE
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@@
+161 INVERTED EXCLAMATION MARK
+ _)$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+162 CENT SIGN
+ $|$ @
+ $__)$@
+ $($ @
+ \ )$@
+ _|$ @@
+163 POUND SIGN
+ $,_\$ @
+ _ |_$ @
+ $|$ @
+ _,____|$@
+ @@
+164 CURRENCY SIGN
+ \ _ /$@
+ $( |$@
+ $___ \$@
+ \/ /$@
+ @@
+165 YEN SIGN
+ \ \ /$ @
+ __ __|$@
+ __ __|$@
+ _|$ @
+ @@
+166 BROKEN BAR
+ $|$@
+ _|$@
+ @
+ $|$@
+ _|$@@
+167 SECTION SIGN
+ $_)$@
+ $\ \$ @
+ \ \\ \$@
+ \ \_/$@
+ (__/$ @@
+168 DIAERESIS
+ _) _)$@
+ $ $ @
+ $ $ @
+ $ $ @
+ @@
+169 COPYRIGHT SIGN
+ $ \$ @
+ $ __| \$ @
+ $ ( |$@
+ \ \___| /$ @
+ \_____/$ @@
+170 FEMININE ORDINAL INDICATOR
+ $_` |$@
+ \__,_|$@
+ _____|$@
+ $$ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $/ /$@
+ $/ /$ @
+ \ \ \$ @
+ \_\_\$@
+ @@
+172 NOT SIGN
+ @
+ _____ |$@
+ _|$@
+ $$ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ _____|$@
+ $$ @
+ @@
+174 REGISTERED SIGN
+ $ \$ @
+ $ _ \ \$ @
+ $ / |$@
+ \ _|_\ /$ @
+ \_____/$ @@
+175 MACRON
+ _____|$@
+ $$ @
+ $$ @
+ $$ @
+ @@
+176 DEGREE SIGN
+ $ \$ @
+ $( |$@
+ \__/$ @
+ $$ @
+ @@
+177 PLUS-MINUS SIGN
+ $|$ @
+ _ _|$@
+ _|$ @
+ _____|$@
+ @@
+178 SUPERSCRIPT TWO
+ _ )$@
+ $/$ @
+ ___|$@
+ $$ @
+ @@
+179 SUPERSCRIPT THREE
+ __ /$@
+ _ \$@
+ ___/$@
+ $$ @
+ @@
+180 ACUTE ACCENT
+ _/$@
+ $$ @
+ $$ @
+ $$ @
+ @@
+181 MICRO SIGN
+ @
+ $| |$@
+ $| |$@
+ $._,_|$@
+ _|$ @@
+182 PILCROW SIGN
+ $ |$@
+ $( | |$@
+ \__ | |$@
+ _|_|$@
+ @@
+183 MIDDLE DOT
+ @
+ _)$@
+ $$ @
+ $$ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ $$ @
+ _)$@@
+185 SUPERSCRIPT ONE
+ _ |$@
+ $|$@
+ _|$@
+ $$ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ $_ \$@
+ \___/$@
+ ____|$@
+ $$ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \ \ \$ @
+ \ \ \$@
+ $/ /$@
+ _/_/$ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ | /$ @
+ $| / | |$ @
+ _| / __ _|$@
+ _/ _|$ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ | /$ @
+ $| /_ )$@
+ _| / /$ @
+ _/ ___|$@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ __ / /$ @
+ _ \ / | |$ @
+ ___/ / __ _|$@
+ _/ _|$ @
+ @@
+191 INVERTED QUESTION MARK
+ _)$ @
+ $|$ @
+ $/$ @
+ \___|$@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \_\$ @
+ $\$ @
+ $_ \$ @
+ _/ _\$@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _/$ @
+ $\$ @
+ $_ \$ @
+ _/ _\$@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\\$ @
+ $\$ @
+ $_ \$ @
+ _/ _\$@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ / _/$ @
+ $\$ @
+ $_ \$ @
+ _/ _\$@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _) \ _)$@
+ $_ \$ @
+ $___ \$ @
+ _/ _\$@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ ( )$ @
+ $_ \$ @
+ $___ \$ @
+ _/ _\$@
+ @@
+198 LATIN CAPITAL LETTER AE
+ $ ____|$@
+ $/ __|$ @
+ $__ |$ @
+ _/ _____|$@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ $___|$@
+ $|$ @
+ $|$ @
+ \____|$@
+ _)$ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \_\$ @
+ $____|$@
+ $ _|$ @
+ _____|$@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _/$ @
+ $____|$@
+ $ _|$ @
+ _____|$@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\\$ @
+ $____|$@
+ $ _|_$ @
+ _____|$@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _) _)$@
+ $____|$@
+ $ _|$ @
+ _____|$@
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \_\$ @
+ _ _|$@
+ | |$ @
+ ___|$@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _/$ @
+ _ _|$@
+ $|$ @
+ ___|$@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\\$ @
+ _ _|$@
+ $|$ @
+ ___|$@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _) _)$@
+ _ _|$ @
+ $|$ @
+ ___|$ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ __ \$ @
+ | |$@
+ __ __| |$@
+ ____/$ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ / _/$@
+ $ \ |$@
+ $. |$@
+ _|\_|$@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \_\$ @
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _/$ @
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\\$ @
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ / _/$ @
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _) _)$@
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ \ \$@
+ , '$@
+ \/\/$@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ $_ /$ @
+ $| / |$@
+ $ / |$@
+ _/__/$ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \_\$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _/$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\\$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _) _)$@
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _/$ @
+ \ \ /$@
+ \ /$ @
+ _|$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ $|$ @
+ $ __ \$@
+ $ ___/$@
+ _|$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ $_ \$@
+ $| /$@
+ $|\ \$@
+ $|__/$@
+ _|$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \_\$ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _/_$ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\\$ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ / _/$ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _) _)$@
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ ( )$ @
+ $_ '|$@
+ $( |$@
+ \__,_|$@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ $_` _ \$@
+ $( __/$@
+ \__,____|$@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ $__|$@
+ $($ @
+ \___|$@
+ _)$ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \_\$ @
+ $_ \$@
+ $ __/$@
+ \___|$@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _/$ @
+ $_ \$@
+ $ __/$@
+ \___|$@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\\$ @
+ $_ \$@
+ $ __/$@
+ \___|$@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _) _)$@
+ $_ \$ @
+ $ __/$ @
+ \___|$ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \_\$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _/$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\\$@
+ $|$ @
+ $|$ @
+ _|$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _) _)$@
+ $|$ @
+ $|$ @
+ _|$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ ` <$ @
+ \/\ |$@
+ $__` |$@
+ \____/$ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ / _/$ @
+ $'_ \$ @
+ $| |$@
+ _| _|$@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \_\$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _/$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\\$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ / _/$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _) _)$@
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+247 DIVISION SIGN
+ @
+ _)$ @
+ _____|$@
+ _)$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ $_ /\$ @
+ $( / |$@
+ \_/__/$ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \_\$ @
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _/$ @
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\\$ @
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _) _)$@
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _/$ @
+ $| |$@
+ $| |$@
+ \__, |$@
+ ____/$ @@
+254 LATIN SMALL LETTER THORN
+ $|$ @
+ $__ \$ @
+ $| |$@
+ $.__/$ @
+ _|$ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _) _)$@
+ $| |$@
+ $| |$@
+ \__, |$@
+ ____/$ @@
diff --git a/externals/figlet/fonts/slant.flf b/externals/figlet/fonts/slant.flf
new file mode 100644
index 0000000000..43fe3986e8
--- /dev/null
+++ b/externals/figlet/fonts/slant.flf
@@ -0,0 +1,1295 @@
+flf2a$ 6 5 16 15 10 0 18319 96
+Slant by Glenn Chappell 3/93 -- based on Standard
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+$$ @@
+ __@
+ / /@
+ / / @
+ /_/ @
+(_) @
+ @@
+ _ _ @
+( | )@
+|/|/ @
+ $ @
+$ @
+ @@
+ __ __ @
+ __/ // /_@
+ /_ _ __/@
+/_ _ __/ @
+ /_//_/ @
+ @@
+ __@
+ _/ /@
+ / __/@
+ (_ ) @
+/ _/ @
+/_/ @@
+ _ __@
+ (_)_/_/@
+ _/_/ @
+ _/_/_ @
+/_/ (_) @
+ @@
+ ___ @
+ ( _ ) @
+ / __ \/|@
+/ /_/ < @
+\____/\/ @
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+$ @
+ @@
+ __@
+ _/_/@
+ / / @
+ / / @
+/ / @
+|_| @@
+ _ @
+ | |@
+ / /@
+ / / @
+ _/_/ @
+/_/ @@
+ @
+ __/|_@
+ | /@
+/_ __| @
+ |/ @
+ @@
+ @
+ __ @
+ __/ /_@
+/_ __/@
+ /_/ @
+ @@
+ @
+ @
+ @
+ _ @
+( )@
+|/ @@
+ @
+ @
+ ______@
+/_____/@
+ $ @
+ @@
+ @
+ @
+ @
+ _ @
+(_)@
+ @@
+ __@
+ _/_/@
+ _/_/ @
+ _/_/ @
+/_/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+ ___@
+ < /@
+ / / @
+ / / @
+/_/ @
+ @@
+ ___ @
+ |__ \@
+ __/ /@
+ / __/ @
+/____/ @
+ @@
+ _____@
+ |__ /@
+ /_ < @
+ ___/ / @
+/____/ @
+ @@
+ __ __@
+ / // /@
+ / // /_@
+/__ __/@
+ /_/ @
+ @@
+ ______@
+ / ____/@
+ /___ \ @
+ ____/ / @
+/_____/ @
+ @@
+ _____@
+ / ___/@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+ _____@
+/__ /@
+ / / @
+ / / @
+/_/ @
+ @@
+ ____ @
+ ( __ )@
+ / __ |@
+/ /_/ / @
+\____/ @
+ @@
+ ____ @
+ / __ \@
+ / /_/ /@
+ \__, / @
+/____/ @
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+(_) @
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+( ) @
+|/ @@
+ __@
+ / /@
+/ / @
+\ \ @
+ \_\@
+ @@
+ @
+ _____@
+ /____/@
+/____/ @
+ $ @
+ @@
+__ @
+\ \ @
+ \ \@
+ / /@
+/_/ @
+ @@
+ ___ @
+ /__ \@
+ / _/@
+ /_/ @
+(_) @
+ @@
+ ______ @
+ / ____ \@
+ / / __ `/@
+/ / /_/ / @
+\ \__,_/ @
+ \____/ @@
+ ___ @
+ / |@
+ / /| |@
+ / ___ |@
+/_/ |_|@
+ @@
+ ____ @
+ / __ )@
+ / __ |@
+ / /_/ / @
+/_____/ @
+ @@
+ ______@
+ / ____/@
+ / / @
+/ /___ @
+\____/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+ / /_/ / @
+/_____/ @
+ @@
+ ______@
+ / ____/@
+ / __/ @
+ / /___ @
+/_____/ @
+ @@
+ ______@
+ / ____/@
+ / /_ @
+ / __/ @
+/_/ @
+ @@
+ ______@
+ / ____/@
+ / / __ @
+/ /_/ / @
+\____/ @
+ @@
+ __ __@
+ / / / /@
+ / /_/ / @
+ / __ / @
+/_/ /_/ @
+ @@
+ ____@
+ / _/@
+ / / @
+ _/ / @
+/___/ @
+ @@
+ __@
+ / /@
+ __ / / @
+/ /_/ / @
+\____/ @
+ @@
+ __ __@
+ / //_/@
+ / ,< @
+ / /| | @
+/_/ |_| @
+ @@
+ __ @
+ / / @
+ / / @
+ / /___@
+/_____/@
+ @@
+ __ ___@
+ / |/ /@
+ / /|_/ / @
+ / / / / @
+/_/ /_/ @
+ @@
+ _ __@
+ / | / /@
+ / |/ / @
+ / /| / @
+/_/ |_/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+ ____ @
+ / __ \@
+ / /_/ /@
+ / ____/ @
+/_/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+/ /_/ / @
+\___\_\ @
+ @@
+ ____ @
+ / __ \@
+ / /_/ /@
+ / _, _/ @
+/_/ |_| @
+ @@
+ _____@
+ / ___/@
+ \__ \ @
+ ___/ / @
+/____/ @
+ @@
+ ______@
+ /_ __/@
+ / / @
+ / / @
+/_/ @
+ @@
+ __ __@
+ / / / /@
+ / / / / @
+/ /_/ / @
+\____/ @
+ @@
+ _ __@
+| | / /@
+| | / / @
+| |/ / @
+|___/ @
+ @@
+ _ __@
+| | / /@
+| | /| / / @
+| |/ |/ / @
+|__/|__/ @
+ @@
+ _ __@
+ | |/ /@
+ | / @
+ / | @
+/_/|_| @
+ @@
+__ __@
+\ \/ /@
+ \ / @
+ / / @
+/_/ @
+ @@
+ _____@
+/__ /@
+ / / @
+ / /__@
+/____/@
+ @@
+ ___@
+ / _/@
+ / / @
+ / / @
+ / / @
+/__/ @@
+__ @
+\ \ @
+ \ \ @
+ \ \ @
+ \_\@
+ @@
+ ___@
+ / /@
+ / / @
+ / / @
+ _/ / @
+/__/ @@
+ //|@
+ |/||@
+ $ @
+ $ @
+$ @
+ @@
+ @
+ @
+ @
+ @
+ ______@
+/_____/@@
+ _ @
+ ( )@
+ V @
+ $ @
+$ @
+ @@
+ @
+ ____ _@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+ __ @
+ / /_ @
+ / __ \@
+ / /_/ /@
+/_.___/ @
+ @@
+ @
+ _____@
+ / ___/@
+/ /__ @
+\___/ @
+ @@
+ __@
+ ____/ /@
+ / __ / @
+/ /_/ / @
+\__,_/ @
+ @@
+ @
+ ___ @
+ / _ \@
+/ __/@
+\___/ @
+ @@
+ ____@
+ / __/@
+ / /_ @
+ / __/ @
+/_/ @
+ @@
+ @
+ ____ _@
+ / __ `/@
+ / /_/ / @
+ \__, / @
+/____/ @@
+ __ @
+ / /_ @
+ / __ \@
+ / / / /@
+/_/ /_/ @
+ @@
+ _ @
+ (_)@
+ / / @
+ / / @
+/_/ @
+ @@
+ _ @
+ (_)@
+ / / @
+ / / @
+ __/ / @
+/___/ @@
+ __ @
+ / /__@
+ / //_/@
+ / ,< @
+/_/|_| @
+ @@
+ __@
+ / /@
+ / / @
+ / / @
+/_/ @
+ @@
+ @
+ ____ ___ @
+ / __ `__ \@
+ / / / / / /@
+/_/ /_/ /_/ @
+ @@
+ @
+ ____ @
+ / __ \@
+ / / / /@
+/_/ /_/ @
+ @@
+ @
+ ____ @
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+ @
+ ____ @
+ / __ \@
+ / /_/ /@
+ / .___/ @
+/_/ @@
+ @
+ ____ _@
+ / __ `/@
+/ /_/ / @
+\__, / @
+ /_/ @@
+ @
+ _____@
+ / ___/@
+ / / @
+/_/ @
+ @@
+ @
+ _____@
+ / ___/@
+ (__ ) @
+/____/ @
+ @@
+ __ @
+ / /_@
+ / __/@
+/ /_ @
+\__/ @
+ @@
+ @
+ __ __@
+ / / / /@
+/ /_/ / @
+\__,_/ @
+ @@
+ @
+ _ __@
+| | / /@
+| |/ / @
+|___/ @
+ @@
+ @
+ _ __@
+| | /| / /@
+| |/ |/ / @
+|__/|__/ @
+ @@
+ @
+ _ __@
+ | |/_/@
+ _> < @
+/_/|_| @
+ @@
+ @
+ __ __@
+ / / / /@
+ / /_/ / @
+ \__, / @
+/____/ @@
+ @
+ ____@
+/_ /@
+ / /_@
+/___/@
+ @@
+ __@
+ _/_/@
+ _/_/ @
+< < @
+/ / @
+\_\ @@
+ __@
+ / /@
+ / / @
+ / / @
+ / / @
+/_/ @@
+ _ @
+ | |@
+ / /@
+ _>_>@
+ _/_/ @
+/_/ @@
+ /\//@
+ //\/ @
+ $ @
+ $ @
+$ @
+ @@
+ _ _ @
+ (_)(_)@
+ / _ | @
+ / __ | @
+/_/ |_| @
+ @@
+ _ _ @
+ (_)_(_)@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+ _ _ @
+ (_) (_)@
+ / / / / @
+/ /_/ / @
+\____/ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / __ `/ @
+/ /_/ / @
+\__,_/ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+ _ _ @
+ (_) (_)@
+ / / / / @
+/ /_/ / @
+\__,_/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+ / /_| | @
+ / //__/ @
+/_/ @@
+160 NO-BREAK SPACE
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+$$ @@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ / / @
+ / / @
+/_/ @
+ @@
+162 CENT SIGN
+ __@
+ __/ /@
+ / ___/@
+/ /__ @
+\ _/ @
+/_/ @@
+163 POUND SIGN
+ ____ @
+ / ,__\@
+ __/ /_ @
+ _/ /___ @
+(_,____/ @
+ @@
+164 CURRENCY SIGN
+ /|___/|@
+ | __ / @
+ / /_/ / @
+ /___ | @
+|/ |/ @
+ @@
+165 YEN SIGN
+ ____@
+ _| / /@
+ /_ __/@
+/_ __/ @
+ /_/ @
+ @@
+166 BROKEN BAR
+ __@
+ / /@
+ /_/ @
+ __ @
+ / / @
+/_/ @@
+167 SECTION SIGN
+ __ @
+ _/ _)@
+ / | | @
+ | || | @
+ | |_/ @
+(__/ @@
+168 DIAERESIS
+ _ _ @
+ (_) (_)@
+ $ $ @
+ $ $ @
+$ $ @
+ @@
+169 COPYRIGHT SIGN
+ ______ @
+ / _____\ @
+ / / ___/ |@
+ / / /__ / @
+| \___/ / @
+ \______/ @@
+170 FEMININE ORDINAL INDICATOR
+ ___ _@
+ / _ `/@
+ _\_,_/ @
+/____/ @
+ $ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+/ / / @
+\ \ \ @
+ \_\_\@
+ @@
+172 NOT SIGN
+ @
+ ______@
+/___ /@
+ /_/ @
+ $ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ _____@
+/____/@
+ $ @
+ @@
+174 REGISTERED SIGN
+ ______ @
+ / ___ \ @
+ / / _ \ |@
+ / / , _/ / @
+| /_/|_| / @
+ \______/ @@
+175 MACRON
+ ______@
+/_____/@
+ $ @
+ $ @
+$ @
+ @@
+176 DEGREE SIGN
+ ___ @
+ / _ \@
+/ // /@
+\___/ @
+ $ @
+ @@
+177 PLUS-MINUS SIGN
+ __ @
+ __/ /_@
+ /_ __/@
+ __/_/_ @
+/_____/ @
+ @@
+178 SUPERSCRIPT TWO
+ ___ @
+ |_ |@
+ / __/ @
+/____/ @
+ $ @
+ @@
+179 SUPERSCRIPT THREE
+ ____@
+ |_ /@
+ _/_ < @
+/____/ @
+ $ @
+ @@
+180 ACUTE ACCENT
+ __@
+ /_/@
+ $ @
+ $ @
+$ @
+ @@
+181 MICRO SIGN
+ @
+ __ __@
+ / / / /@
+ / /_/ / @
+ / ._,_/ @
+/_/ @@
+182 PILCROW SIGN
+ _______@
+ / _ /@
+/ (/ / / @
+\_ / / @
+ /_/_/ @
+ @@
+183 MIDDLE DOT
+ @
+ _ @
+(_)@
+ $ @
+$ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ _ @
+/_)@@
+185 SUPERSCRIPT ONE
+ ___@
+ < /@
+ / / @
+/_/ @
+$ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \@
+ _\___/@
+/____/ @
+ $ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+____ @
+\ \ \ @
+ \ \ \@
+ / / /@
+/_/_/ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ ___ __ @
+ < / _/_/ @
+ / /_/_/___@
+/_//_// / /@
+ /_/ /_ _/@
+ /_/ @@
+189 VULGAR FRACTION ONE HALF
+ ___ __ @
+ < / _/_/__ @
+ / /_/_/|_ |@
+/_//_/ / __/ @
+ /_/ /____/ @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ____ __ @
+ |_ / _/_/ @
+ _/_ < _/_/___@
+/____//_// / /@
+ /_/ /_ _/@
+ /_/ @@
+191 INVERTED QUESTION MARK
+ _ @
+ (_)@
+ _/ / @
+/ _/_ @
+\___/ @
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ _\_\@
+ / _ |@
+ / __ |@
+/_/ |_|@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __@
+ _/_/@
+ / _ |@
+ / __ |@
+/_/ |_|@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / _ | @
+ / __ | @
+/_/ |_| @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\//@
+ _//\/ @
+ / _ | @
+ / __ | @
+/_/ |_| @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / _ | @
+ / __ | @
+/_/ |_| @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ (())@
+ / |@
+ / /| |@
+ / ___ |@
+/_/ |_|@
+ @@
+198 LATIN CAPITAL LETTER AE
+ __________@
+ / ____/@
+ / /| __/ @
+ / __ /___ @
+/_/ /_____/ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ ______@
+ / ____/@
+ / / @
+/ /___ @
+\____/ @
+ /_) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ _\_\@
+ / __/@
+ / _/ @
+/___/ @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __@
+ _/_/@
+ / __/@
+ / _/ @
+/___/ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / __/ @
+ / _/ @
+/___/ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / __/ @
+ / _/ @
+/___/ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ _\_\@
+ / _/@
+ _/ / @
+/___/ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __@
+ _/_/@
+ / _/@
+ _/ / @
+/___/ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / _/ @
+ _/ / @
+/___/ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / _/ @
+ _/ / @
+/___/ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ____ @
+ / __ \@
+ __/ /_/ /@
+/_ __/ / @
+ /_____/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\//@
+ _//\/ @
+ / |/ / @
+ / / @
+/_/|_/ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ __\_\@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __@
+ __/_/@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\//@
+ _//\/ @
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ /|/|@
+ > < @
+|/|/ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _____ @
+ / _// \@
+ / //// /@
+/ //// / @
+\_//__/ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ __\_\_@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __ @
+ __/_/_@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //| @
+ _|/||_@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ / / / / @
+/ /_/ / @
+\____/ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __ @
+__/_/_@
+\ \/ /@
+ \ / @
+ /_/ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ __ @
+ / /_ @
+ / __ \@
+ / ____/@
+/_/ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ____ @
+ / __ \@
+ / / / /@
+ / /_| | @
+ / //__/ @
+/_/ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ __\_\_@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __ @
+ __/_/_@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ //| @
+ _|/||_@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\//@
+ _//\/_@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / __ `/ @
+/ /_/ / @
+\__,_/ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ __(())@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ ____ ___ @
+ / __ ` _ \@
+/ /_/ __/@
+\__,_____/ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ _____@
+ / ___/@
+/ /__ @
+\___/ @
+/_) @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ _\_\@
+ / _ \@
+/ __/@
+\___/ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __@
+ _/_/@
+ / _ \@
+/ __/@
+\___/ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / _ \ @
+/ __/ @
+\___/ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / _ \ @
+/ __/ @
+\___/ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ / / @
+ / / @
+/_/ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ / / @
+ / / @
+/_/ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //|@
+ |/||@
+ / / @
+ / / @
+/_/ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / / @
+ / / @
+/_/ @
+ @@
+240 LATIN SMALL LETTER ETH
+ || @
+ =||=@
+ ___ || @
+/ __` | @
+\____/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\//@
+ _//\/ @
+ / __ \ @
+ / / / / @
+/_/ /_/ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ __\_\@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __@
+ __/_/@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\//@
+ _//\/ @
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+247 DIVISION SIGN
+ @
+ _ @
+ __(_)_@
+/_____/@
+ (_) @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ _____ @
+ / _// \@
+/ //// /@
+\_//__/ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ __\_\_@
+ / / / /@
+/ /_/ / @
+\__,_/ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __ @
+ __/_/_@
+ / / / /@
+/ /_/ / @
+\__,_/ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ //| @
+ _|/||_@
+ / / / /@
+/ /_/ / @
+\__,_/ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ / / / / @
+/ /_/ / @
+\__,_/ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __ @
+ __/_/_@
+ / / / /@
+ / /_/ / @
+ \__, / @
+/____/ @@
+254 LATIN SMALL LETTER THORN
+ __ @
+ / /_ @
+ / __ \@
+ / /_/ /@
+ / .___/ @
+/_/ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ / / / / @
+ / /_/ / @
+ \__, / @
+/____/ @@
diff --git a/externals/figlet/fonts/small.flf b/externals/figlet/fonts/small.flf
new file mode 100644
index 0000000000..c6b5bfcdef
--- /dev/null
+++ b/externals/figlet/fonts/small.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 13 15 10 0 22415 96
+Small by Glenn Chappell 4/93 -- based on Standard
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $@
+ $@
+ $@
+ $@
+ $@@
+ _ @
+ | |@
+ |_|@
+ (_)@
+ @@
+ _ _ @
+ ( | )@
+ V V @
+ $ @
+ @@
+ _ _ @
+ _| | |_ @
+ |_ . _|@
+ |_ _|@
+ |_|_| @@
+ @
+ ||_@
+ (_-<@
+ / _/@
+ || @@
+ _ __ @
+ (_)/ / @
+ / /_ @
+ /_/(_)@
+ @@
+ __ @
+ / _|___ @
+ > _|_ _|@
+ \_____| @
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+ @@
+ __@
+ / /@
+ | | @
+ | | @
+ \_\@@
+ __ @
+ \ \ @
+ | |@
+ | |@
+ /_/ @@
+ @
+ _/\_@
+ > <@
+ \/ @
+ @@
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ @@
+ @
+ @
+ _ @
+ ( )@
+ |/ @@
+ @
+ ___ @
+ |___|@
+ $ @
+ @@
+ @
+ @
+ _ @
+ (_)@
+ @@
+ __@
+ / /@
+ / / @
+ /_/ @
+ @@
+ __ @
+ / \ @
+ | () |@
+ \__/ @
+ @@
+ _ @
+ / |@
+ | |@
+ |_|@
+ @@
+ ___ @
+ |_ )@
+ / / @
+ /___|@
+ @@
+ ____@
+ |__ /@
+ |_ \@
+ |___/@
+ @@
+ _ _ @
+ | | | @
+ |_ _|@
+ |_| @
+ @@
+ ___ @
+ | __|@
+ |__ \@
+ |___/@
+ @@
+ __ @
+ / / @
+ / _ \@
+ \___/@
+ @@
+ ____ @
+ |__ |@
+ / / @
+ /_/ @
+ @@
+ ___ @
+ ( _ )@
+ / _ \@
+ \___/@
+ @@
+ ___ @
+ / _ \@
+ \_, /@
+ /_/ @
+ @@
+ _ @
+ (_)@
+ _ @
+ (_)@
+ @@
+ _ @
+ (_)@
+ _ @
+ ( )@
+ |/ @@
+ __@
+ / /@
+ < < @
+ \_\@
+ @@
+ @
+ ___ @
+ |___|@
+ |___|@
+ @@
+ __ @
+ \ \ @
+ > >@
+ /_/ @
+ @@
+ ___ @
+ |__ \@
+ /_/@
+ (_) @
+ @@
+ ____ @
+ / __ \ @
+ / / _` |@
+ \ \__,_|@
+ \____/ @@
+ _ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+ ___ @
+ | _ )@
+ | _ \@
+ |___/@
+ @@
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+ ___ @
+ | \ @
+ | |) |@
+ |___/ @
+ @@
+ ___ @
+ | __|@
+ | _| @
+ |___|@
+ @@
+ ___ @
+ | __|@
+ | _| @
+ |_| @
+ @@
+ ___ @
+ / __|@
+ | (_ |@
+ \___|@
+ @@
+ _ _ @
+ | || |@
+ | __ |@
+ |_||_|@
+ @@
+ ___ @
+ |_ _|@
+ | | @
+ |___|@
+ @@
+ _ @
+ _ | |@
+ | || |@
+ \__/ @
+ @@
+ _ __@
+ | |/ /@
+ | ' < @
+ |_|\_\@
+ @@
+ _ @
+ | | @
+ | |__ @
+ |____|@
+ @@
+ __ __ @
+ | \/ |@
+ | |\/| |@
+ |_| |_|@
+ @@
+ _ _ @
+ | \| |@
+ | .` |@
+ |_|\_|@
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ ___ @
+ | _ \@
+ | _/@
+ |_| @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \__\_\@
+ @@
+ ___ @
+ | _ \@
+ | /@
+ |_|_\@
+ @@
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ @@
+ _____ @
+ |_ _|@
+ | | @
+ |_| @
+ @@
+ _ _ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ \_/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \/\/ / @
+ \_/\_/ @
+ @@
+ __ __@
+ \ \/ /@
+ > < @
+ /_/\_\@
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ |_| @
+ @@
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @@
+ __ @
+ | _|@
+ | | @
+ | | @
+ |__|@@
+ __ @
+ \ \ @
+ \ \ @
+ \_\@
+ @@
+ __ @
+ |_ |@
+ | |@
+ | |@
+ |__|@@
+ /\ @
+ |/\|@
+ $ @
+ $ @
+ @@
+ @
+ @
+ @
+ ___ @
+ |___|@@
+ _ @
+ ( )@
+ \|@
+ $ @
+ @@
+ @
+ __ _ @
+ / _` |@
+ \__,_|@
+ @@
+ _ @
+ | |__ @
+ | '_ \@
+ |_.__/@
+ @@
+ @
+ __ @
+ / _|@
+ \__|@
+ @@
+ _ @
+ __| |@
+ / _` |@
+ \__,_|@
+ @@
+ @
+ ___ @
+ / -_)@
+ \___|@
+ @@
+ __ @
+ / _|@
+ | _|@
+ |_| @
+ @@
+ @
+ __ _ @
+ / _` |@
+ \__, |@
+ |___/ @@
+ _ @
+ | |_ @
+ | ' \ @
+ |_||_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ _/ |@
+ |__/ @@
+ _ @
+ | |__@
+ | / /@
+ |_\_\@
+ @@
+ _ @
+ | |@
+ | |@
+ |_|@
+ @@
+ @
+ _ __ @
+ | ' \ @
+ |_|_|_|@
+ @@
+ @
+ _ _ @
+ | ' \ @
+ |_||_|@
+ @@
+ @
+ ___ @
+ / _ \@
+ \___/@
+ @@
+ @
+ _ __ @
+ | '_ \@
+ | .__/@
+ |_| @@
+ @
+ __ _ @
+ / _` |@
+ \__, |@
+ |_|@@
+ @
+ _ _ @
+ | '_|@
+ |_| @
+ @@
+ @
+ ___@
+ (_-<@
+ /__/@
+ @@
+ _ @
+ | |_ @
+ | _|@
+ \__|@
+ @@
+ @
+ _ _ @
+ | || |@
+ \_,_|@
+ @@
+ @
+ __ __@
+ \ V /@
+ \_/ @
+ @@
+ @
+ __ __ __@
+ \ V V /@
+ \_/\_/ @
+ @@
+ @
+ __ __@
+ \ \ /@
+ /_\_\@
+ @@
+ @
+ _ _ @
+ | || |@
+ \_, |@
+ |__/ @@
+ @
+ ___@
+ |_ /@
+ /__|@
+ @@
+ __@
+ / /@
+ _| | @
+ | | @
+ \_\@@
+ _ @
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __ @
+ \ \ @
+ | |_@
+ | | @
+ /_/ @@
+ /\/|@
+ |/\/ @
+ $ @
+ $ @
+ @@
+ _ _ @
+ (_)(_)@
+ /--\ @
+ /_/\_\@
+ @@
+ _ _ @
+ (_)(_)@
+ / __ \@
+ \____/@
+ @@
+ _ _ @
+ (_) (_)@
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_)(_)@
+ / _` |@
+ \__,_|@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ \___/ @
+ @@
+ _ _ @
+ (_)(_)@
+ | || |@
+ \_,_|@
+ @@
+ ___ @
+ / _ \@
+ | |< <@
+ | ||_/@
+ |_| @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ | |@
+ |_|@
+ @@
+162 CENT SIGN
+ @
+ || @
+ / _)@
+ \ _)@
+ || @@
+163 POUND SIGN
+ __ @
+ _/ _\ @
+ |_ _|_ @
+ (_,___|@
+ @@
+164 CURRENCY SIGN
+ /\_/\@
+ \ . /@
+ / _ \@
+ \/ \/@
+ @@
+165 YEN SIGN
+ __ __ @
+ \ V / @
+ |__ __|@
+ |__ __|@
+ |_| @@
+166 BROKEN BAR
+ _ @
+ | |@
+ |_|@
+ | |@
+ |_|@@
+167 SECTION SIGN
+ __ @
+ / _)@
+ /\ \ @
+ \ \/ @
+ (__/ @@
+168 DIAERESIS
+ _ _ @
+ (_)(_)@
+ $ $ @
+ $ $ @
+ @@
+169 COPYRIGHT SIGN
+ ____ @
+ / __ \ @
+ / / _| \@
+ \ \__| /@
+ \____/ @@
+170 FEMININE ORDINAL INDICATOR
+ __ _ @
+ / _` |@
+ \__,_|@
+ |____|@
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+ < < < @
+ \_\_\@
+ @@
+172 NOT SIGN
+ ____ @
+ |__ |@
+ |_|@
+ $ @
+ @@
+173 SOFT HYPHEN
+ @
+ __ @
+ |__|@
+ $ @
+ @@
+174 REGISTERED SIGN
+ ____ @
+ / __ \ @
+ / | -) \@
+ \ ||\\ /@
+ \____/ @@
+175 MACRON
+ ___ @
+ |___|@
+ $ @
+ $ @
+ @@
+176 DEGREE SIGN
+ _ @
+ /.\@
+ \_/@
+ $ @
+ @@
+177 PLUS-MINUS SIGN
+ _ @
+ _| |_ @
+ |_ _|@
+ _|_|_ @
+ |_____|@@
+178 SUPERSCRIPT TWO
+ __ @
+ |_ )@
+ /__|@
+ $ @
+ @@
+179 SUPERSCRIPT THREE
+ ___@
+ |_ /@
+ |__)@
+ $ @
+ @@
+180 ACUTE ACCENT
+ __@
+ /_/@
+ $ @
+ $ @
+ @@
+181 MICRO SIGN
+ @
+ _ _ @
+ | || |@
+ | .,_|@
+ |_| @@
+182 PILCROW SIGN
+ ____ @
+ / |@
+ \_ | |@
+ |_|_|@
+ @@
+183 MIDDLE DOT
+ @
+ _ @
+ (_)@
+ $ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ _ @
+ )_)@@
+185 SUPERSCRIPT ONE
+ _ @
+ / |@
+ |_|@
+ $ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \@
+ \___/@
+ |___|@
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____ @
+ \ \ \ @
+ > > >@
+ /_/_/ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ __ @
+ / |/ /__ @
+ |_/ /_' |@
+ /_/ |_|@
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ __ @
+ / |/ /_ @
+ |_/ /_ )@
+ /_//__|@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ___ __ @
+ |_ // /__ @
+ |__) /_' |@
+ /_/ |_|@
+ @@
+191 INVERTED QUESTION MARK
+ _ @
+ (_) @
+ / /_ @
+ \___|@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ \_\ @
+ /--\ @
+ /_/\_\@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __ @
+ /_/ @
+ /--\ @
+ /_/\_\@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\ @
+ |/\| @
+ /--\ @
+ /_/\_\@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/|@
+ |/\/ @
+ /--\ @
+ /_/\_\@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ /--\ @
+ /_/\_\@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ __ @
+ (()) @
+ /--\ @
+ /_/\_\@
+ @@
+198 LATIN CAPITAL LETTER AE
+ ____ @
+ /, __|@
+ / _ _| @
+ /_/|___|@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ )_) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ \_\@
+ | -<@
+ |__<@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __@
+ /_/@
+ | -<@
+ |__<@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\ @
+ |/\|@
+ | -<@
+ |__<@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ | -< @
+ |__< @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ \_\ @
+ |_ _|@
+ |___|@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __ @
+ /_/ @
+ |_ _|@
+ |___|@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ |_ _|@
+ |___|@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ |_ _| @
+ |___| @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ____ @
+ | __ \ @
+ |_ _|) |@
+ |____/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/|@
+ |/\/ @
+ | \| |@
+ |_|\_|@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ \_\_ @
+ / __ \@
+ \____/@
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __ @
+ _/_/ @
+ / __ \@
+ \____/@
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\ @
+ |/\| @
+ / __ \@
+ \____/@
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/|@
+ |/\/ @
+ / __ \@
+ \____/@
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / __ \@
+ \____/@
+ @@
+215 MULTIPLICATION SIGN
+ @
+ /\/\@
+ > <@
+ \/\/@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ ____ @
+ / _//\ @
+ | (//) |@
+ \//__/ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ _\_\_ @
+ | |_| |@
+ \___/ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __ @
+ _/_/_ @
+ | |_| |@
+ \___/ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | |_| |@
+ \___/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | |_| |@
+ \___/ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __ @
+ _/_/_@
+ \ V /@
+ |_| @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ _ @
+ | |_ @
+ | -_)@
+ |_| @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ___ @
+ / _ \@
+ | |< <@
+ | ||_/@
+ |_| @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ \_\_ @
+ / _` |@
+ \__,_|@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __ @
+ _/_/ @
+ / _` |@
+ \__,_|@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\ @
+ |/\| @
+ / _` |@
+ \__,_|@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/|@
+ |/\/ @
+ / _` |@
+ \__,_|@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / _` |@
+ \__,_|@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ (()) @
+ / _` |@
+ \__,_|@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ __ ___ @
+ / _` -_)@
+ \__,___|@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ __ @
+ / _|@
+ \__|@
+ )_)@@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ \_\ @
+ / -_)@
+ \___|@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __ @
+ /_/ @
+ / -_)@
+ \___|@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ / -_)@
+ \___|@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / -_) @
+ \___| @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ | |@
+ |_|@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ | |@
+ |_|@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ | | @
+ |_| @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ | | @
+ |_| @
+ @@
+240 LATIN SMALL LETTER ETH
+ \\/\ @
+ \/\\ @
+ / _` |@
+ \___/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/| @
+ |/\/ @
+ | ' \ @
+ |_||_|@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ / _ \@
+ \___/@
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ / _ \@
+ \___/@
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ / _ \@
+ \___/@
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/|@
+ |/\/ @
+ / _ \@
+ \___/@
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ \___/ @
+ @@
+247 DIVISION SIGN
+ _ @
+ (_) @
+ |___|@
+ (_) @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ ___ @
+ / //\@
+ \//_/@
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ \_\_ @
+ | || |@
+ \_,_|@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __ @
+ _/_/ @
+ | || |@
+ \_,_|@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\ @
+ |/\| @
+ | || |@
+ \_,_|@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ | || |@
+ \_,_|@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __ @
+ _/_/ @
+ | || |@
+ \_, |@
+ |__/ @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ | |__ @
+ | '_ \@
+ | .__/@
+ |_| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ | || |@
+ \_, |@
+ |__/ @@
diff --git a/externals/figlet/fonts/smscript.flf b/externals/figlet/fonts/smscript.flf
new file mode 100644
index 0000000000..32a8a39da5
--- /dev/null
+++ b/externals/figlet/fonts/smscript.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 13 0 10 0 3904 96
+SmScript by Glenn Chappell 4/93 -- based on Script
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@@
+ @
+ |@
+ |@
+ o@
+ @@
+ oo@
+ ||@
+ $@
+ $@
+ @@
+ @
+ _|_|_@
+ _|_|_@
+ | | @
+ @@
+ @
+ |_|_@
+ (|_| @
+ _|_|)@
+ | | @@
+ @
+ () / @
+ / @
+ / ()@
+ @@
+ @
+ () @
+ /\/@
+ \/\@
+ @@
+ o@
+ /@
+ $@
+ $@
+ @@
+ @
+ /@
+ | @
+ | @
+ \@@
+ @
+ \ @
+ |@
+ |@
+ / @@
+ @
+ \|/ @
+ --*--@
+ /|\ @
+ @@
+ @
+ | @
+ --+--@
+ | @
+ @@
+ @
+ @
+ @
+ o@
+ /@@
+ @
+ @
+ ----@
+ $ @
+ @@
+ @
+ @
+ @
+ o@
+ @@
+ @
+ /@
+ / @
+ / @
+ @@
+ _ @
+ / \ @
+ | |@
+ \_/ @
+ @@
+ ,@
+ /|@
+ |@
+ |@
+ @@
+ _ @
+ / )@
+ / @
+ /__@
+ @@
+ ____@
+ __/@
+ $ \@
+ \__/@
+ @@
+ @
+ | | @
+ |__|_@
+ | @
+ @@
+ ___@
+ |__ @
+ $ \@
+ \__/@
+ @@
+ _ @
+ /_ @
+ |/ \@
+ \_/@
+ @@
+ ____@
+ $/@
+ / @
+ / @
+ @@
+ __ @
+ (__)@
+ / \@
+ \__/@
+ @@
+ __ @
+ / |@
+ \_/|@
+ |@
+ @@
+ @
+ o@
+ $@
+ o@
+ @@
+ @
+ o@
+ $@
+ o@
+ /@@
+ @
+ /@
+ < @
+ \@
+ @@
+ @
+ ____@
+ ____@
+ $ @
+ @@
+ @
+ \ @
+ >@
+ / @
+ @@
+ __ @
+ )@
+ | @
+ o @
+ @@
+ ____ @
+ / __,\ @
+ | / | |@
+ | \_/|/ @
+ \____/ @@
+ __, @
+ / | @
+ | | @
+ \_/\_/@
+ @@
+ , _ @
+ /|/_)@
+ | \@
+ |(_/@
+ @@
+ __$ @
+ / () @
+ | $ @
+ \___/@
+ @@
+ $___ @
+ (| \ @
+ | |@
+ (\__/ @
+ @@
+ __$ @
+ / () @
+ >-$ @
+ \___/@
+ @@
+ $_____@
+ () |_$@
+ /| |@
+ (/ @
+ @@
+ @
+ () |@
+ /\/|@
+ /(_/ @
+ @@
+ , @
+ /| | @
+ |--| @
+ | |)@
+ @@
+ @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+ @
+ /| @
+ | | @
+ \|/@
+ (| @@
+ , , @
+ /|_/ @
+ |\ @
+ | \_/@
+ @@
+ $ @
+ \_|) @
+ | @
+ (\__/@
+ @@
+ ,_ _ @
+ /| | | @
+ | | | @
+ | | |_/@
+ @@
+ , @
+ /|/\ @
+ | | @
+ | |_/@
+ @@
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @@
+ , _ @
+ /|/ \@
+ |__/@
+ | $@
+ @@
+ __ @
+ /__\ @
+ |/ \| @
+ \__/\_/@
+ @@
+ , _ @
+ /|/ \ @
+ |__/ @
+ | \_/@
+ @@
+ @
+ () @
+ /\ @
+ /(_)@
+ @@
+ $_____@
+ () | @
+ $| @
+ (/ @
+ @@
+ @
+ (| | @
+ | | @
+ \_/\_/@
+ @@
+ @
+ (| |_/@
+ | | @
+ \/ @
+ @@
+ @
+ (| | |_/@
+ | | | @
+ \/ \/ @
+ @@
+ @
+ (\ / @
+ >< @
+ _/ \_/@
+ @@
+ @
+ (| | @
+ | | @
+ \/|/@
+ (| @@
+ _ @
+ / ) @
+ / @
+ /__/@
+ (| @@
+ _@
+ | @
+ | @
+ | @
+ |_@@
+ @
+ \ @
+ \ @
+ \@
+ @@
+ _ @
+ |@
+ |@
+ |@
+ _|@@
+ /\@
+ $@
+ $@
+ $@
+ @@
+ @
+ @
+ @
+ $ @
+ ____@@
+ o@
+ \@
+ $@
+ $@
+ @@
+ @
+ _, @
+ / | @
+ \/|_/@
+ @@
+ @
+ |) @
+ |/\_@
+ \/ @
+ @@
+ @
+ _ @
+ / @
+ \__/@
+ @@
+ @
+ _| @
+ / | @
+ \/|_/@
+ @@
+ @
+ _ @
+ |/ @
+ |_/@
+ @@
+ @
+ |\ @
+ |/ @
+ |_/@
+ |) @@
+ @
+ _, @
+ / | @
+ \/|/@
+ (| @@
+ @
+ |) @
+ |/\ @
+ | |/@
+ @@
+ @
+ o @
+ | @
+ |/@
+ @@
+ @
+ o @
+ | @
+ |/@
+ (| @@
+ @
+ |) @
+ |/) @
+ | \/@
+ @@
+ @
+ |\ @
+ |/ @
+ |_/@
+ @@
+ @
+ @
+ /|/|/| @
+ $| | |_/@
+ @@
+ @
+ @
+ /|/| @
+ $| |_/@
+ @@
+ @
+ _ @
+ / \_@
+ \_/ @
+ @@
+ @
+ @
+ |/\_@
+ |_/ @
+ (| @@
+ @
+ _, @
+ / | @
+ \/|_/@
+ |) @@
+ @
+ ,_ @
+ / | @
+ $ |/@
+ @@
+ @
+ , @
+ / \_@
+ $\/ @
+ @@
+ @
+ _|_ @
+ | @
+ |_/@
+ @@
+ @
+ @
+ | | @
+ $\/|_/@
+ @@
+ @
+ @
+ | |_@
+ $\/ @
+ @@
+ @
+ @
+ | | |_@
+ $\/ \/ @
+ @@
+ @
+ @
+ /\/ @
+ $/\/@
+ @@
+ @
+ @
+ | | @
+ $\/|/@
+ (| @@
+ @
+ __ @
+ / / _@
+ $/_/ @
+ (| @@
+ @
+ /@
+ _| @
+ | @
+ \@@
+ |@
+ |@
+ |@
+ |@
+ |@@
+ @
+ \ @
+ |_@
+ | @
+ / @@
+ /\/@
+ $ @
+ $ @
+ $ @
+ @@
+ o o @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+ o o @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+ /\/ @
+ @
+ (| | @
+ \_/\_/@
+ @@
+ o o @
+ _, @
+ / | @
+ \/|_/@
+ @@
+ o o @
+ _ @
+ / \_@
+ \_/ @
+ @@
+ o o @
+ @
+ | | @
+ $\/|_/@
+ @@
+ _ @
+ | \@
+ | <@
+ |_/@
+ | @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@@
+161 INVERTED EXCLAMATION MARK
+ @
+ o@
+ |@
+ |@
+ @@
+162 CENT SIGN
+ @
+ _|_ @
+ / | @
+ \_|_/@
+ | @@
+163 POUND SIGN
+ _ @
+ _|_` @
+ | @
+ (\__/@
+ @@
+164 CURRENCY SIGN
+ \ _ /@
+ / \ @
+ \_/ @
+ / \@
+ @@
+165 YEN SIGN
+ \ /@
+ _\_/_@
+ __|__@
+ | @
+ @@
+166 BROKEN BAR
+ |@
+ |@
+ @
+ |@
+ |@@
+167 SECTION SIGN
+ _@
+ ( @
+ ()@
+ _)@
+ @@
+168 DIAERESIS
+ o o@
+ $ $@
+ $ $@
+ $ $@
+ @@
+169 COPYRIGHT SIGN
+ ____ @
+ / __ \ @
+ | / () |@
+ | \__/ |@
+ \____/ @@
+170 FEMININE ORDINAL INDICATOR
+ _, @
+ (_|_@
+ --- @
+ $ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ //@
+ << @
+ \\@
+ @@
+172 NOT SIGN
+ @
+ __ @
+ |@
+ $ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ ---@
+ $ @
+ @@
+174 REGISTERED SIGN
+ ____ @
+ / ,_ \ @
+ | /|_) |@
+ | |\/ |@
+ \____/ @@
+175 MACRON
+ ____@
+ $ @
+ $ @
+ $ @
+ @@
+176 DEGREE SIGN
+ ()@
+ $@
+ $@
+ $@
+ @@
+177 PLUS-MINUS SIGN
+ @
+ | @
+ --+--@
+ __|__@
+ @@
+178 SUPERSCRIPT TWO
+ _ @
+ )@
+ /_@
+ $@
+ @@
+179 SUPERSCRIPT THREE
+ ___@
+ _/@
+ __)@
+ $ @
+ @@
+180 ACUTE ACCENT
+ /@
+ $@
+ $@
+ $@
+ @@
+181 MICRO SIGN
+ @
+ @
+ | | @
+ |\/|_/@
+ | @@
+182 PILCROW SIGN
+ ___ @
+ / | |@
+ \_| |@
+ | |@
+ @@
+183 MIDDLE DOT
+ @
+ @
+ $O$@
+ $ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ $ @
+ _)@@
+185 SUPERSCRIPT ONE
+ ,@
+ /|@
+ |@
+ $@
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ __@
+ (_)@
+ ---@
+ $ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ \\ @
+ >>@
+ // @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ , @
+ /| / @
+ |/|_|_@
+ / | @
+ @@
+189 VULGAR FRACTION ONE HALF
+ , @
+ /| /_ @
+ |/ )@
+ / /_@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ___ @
+ _/ / @
+ __)/|_|_@
+ / | @
+ @@
+191 INVERTED QUESTION MARK
+ @
+ o @
+ | @
+ (__@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \ @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ / @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\ @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/ @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ o o @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ (_) @
+ / | @
+ \_/\_/@
+ @@
+198 LATIN CAPITAL LETTER AE
+ __,__$ @
+ / | () @
+ | |-$ @
+ \_/\___/@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ __$ @
+ / () @
+ | $ @
+ \___/@
+ _) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \ @
+ __$ @
+ <_() @
+ <___/@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ / @
+ __$ @
+ <_() @
+ <___/@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\ @
+ __$ @
+ <_() @
+ <___/@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ o o @
+ __$ @
+ <_() @
+ <___/@
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \ @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ / @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\ @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ o o @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ___ @
+ (| \ @
+ -|- |@
+ (\__/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ ,/\/ @
+ /|/\ @
+ | | @
+ | |_/@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \ @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ / @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\ @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/ @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ o o @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ $\/$@
+ $/\$@
+ $ $@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ __/ @
+ /\/\/@
+ | / |@
+ /__/ @
+ / @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \ @
+ @
+ (| | @
+ \_/\_/@
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ / @
+ @
+ (| | @
+ \_/\_/@
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\ @
+ @
+ (| | @
+ \_/\_/@
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ /\/ @
+ @
+ (| | @
+ \_/\_/@
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ / @
+ @
+ (| | @
+ \/|/@
+ (| @@
+222 LATIN CAPITAL LETTER THORN
+ , @
+ /|__ @
+ |__)@
+ | $@
+ @@
+223 LATIN SMALL LETTER SHARP S
+ _ @
+ | \@
+ | <@
+ |_/@
+ | @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \ @
+ _, @
+ / | @
+ \/|_/@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ / @
+ _, @
+ / | @
+ \/|_/@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\ @
+ _, @
+ / | @
+ \/|_/@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/ @
+ _, @
+ / | @
+ \/|_/@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ o o @
+ _, @
+ / | @
+ \/|_/@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ () @
+ _, @
+ / | @
+ \/|_/@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ _,_ @
+ / |/ @
+ \/|_/@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ _ @
+ / @
+ \__/@
+ _) @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \ @
+ _ @
+ |/ @
+ |_/@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ / @
+ _ @
+ |/ @
+ |_/@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\ @
+ _ @
+ |/ @
+ |_/@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ o o @
+ _ @
+ |/ @
+ |__/@
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \ @
+ @
+ | @
+ |/@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ / @
+ @
+ | @
+ |/@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\@
+ @
+ | @
+ |/@
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ o o @
+ @
+ | @
+ |__/@
+ @@
+240 LATIN SMALL LETTER ETH
+ \, @
+ '\ @
+ / |@
+ \/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/ @
+ @
+ /|/| @
+ $| |_/@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \ @
+ _ @
+ / \_@
+ \_/ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ / @
+ _ @
+ / \_@
+ \_/ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\ @
+ _ @
+ / \_@
+ \_/ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/ @
+ _ @
+ / \_@
+ \_/ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ o o @
+ _ @
+ / \_@
+ \_/ @
+ @@
+247 DIVISION SIGN
+ @
+ O @
+ ---@
+ O @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ __/ @
+ / /\_@
+ \/_/ @
+ / @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \ @
+ @
+ | | @
+ $\/|_/@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ / @
+ @
+ | | @
+ $\/|_/@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\ @
+ @
+ | | @
+ $\/|_/@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ o o @
+ @
+ | | @
+ $\/|_/@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ / @
+ @
+ | | @
+ $\/|/@
+ (| @@
+254 LATIN SMALL LETTER THORN
+ @
+ |) @
+ |/\_@
+ |_/ @
+ (| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ o o @
+ @
+ | | @
+ $\/|/@
+ (| @@
diff --git a/externals/figlet/fonts/smshadow.flf b/externals/figlet/fonts/smshadow.flf
new file mode 100644
index 0000000000..7e1329f4c2
--- /dev/null
+++ b/externals/figlet/fonts/smshadow.flf
@@ -0,0 +1,899 @@
+flf2a$ 4 3 14 0 10 0 1920 96
+SmShadow by Glenn Chappell 4/93 -- based on Small
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $$@
+ $$@
+ $$@
+ $$@@
+ |$@
+ _|$@
+ _)$@
+ @@
+ | )$@
+ V V$ @
+ @
+ @@
+ | |$ @
+ _ |_ |_|$@
+ _ |_ |_|$@
+ _| _|$ @@
+ |$ @
+ (_-<$@
+ _ _/$@
+ _|$ @@
+ _) /$ @
+ /$ @
+ _/ _)$@
+ @@
+ _|$ @
+ _| _|$@
+ \____|$ @
+ @@
+ )$@
+ /$ @
+ @
+ @@
+ /$@
+ |$ @
+ |$ @
+ \_\$@@
+ \ \$ @
+ |$@
+ |$@
+ _/$ @@
+ \ \ /$ @
+ _ _|$@
+ _/ _\$ @
+ @@
+ |$ @
+ __ __|$@
+ _|$ @
+ @@
+ @
+ @
+ )$@
+ /$ @@
+ @
+ ____|$@
+ @
+ @@
+ @
+ @
+ _)$@
+ @@
+ /$@
+ /$ @
+ _/$ @
+ @@
+ \$ @
+ ( |$@
+ \__/$ @
+ @@
+ _ |$@
+ |$@
+ _|$@
+ @@
+ _ )$@
+ /$ @
+ ___|$@
+ @@
+ __ /$@
+ _ \$@
+ ___/$@
+ @@
+ | |$ @
+ __ _|$@
+ _|$ @
+ @@
+ __|$@
+ __ \$@
+ ___/$@
+ @@
+ /$ @
+ _ \$@
+ \___/$@
+ @@
+ __ /$@
+ /$ @
+ _/$ @
+ @@
+ _ )$@
+ _ \$@
+ \___/$@
+ @@
+ _ \$@
+ \_ /$@
+ _/$ @
+ @@
+ _)$@
+ @
+ _)$@
+ @@
+ _)$@
+ @
+ )$@
+ /$ @@
+ /$@
+ < <$ @
+ \_\$@
+ @@
+ @
+ ____|$@
+ ____|$@
+ @@
+ \ \$ @
+ > >$@
+ _/$ @
+ @@
+ __ \$@
+ _/$@
+ _)$ @
+ @@
+ __ \$ @
+ / _` |$@
+ \__,_|$@
+ \____/$ @@
+ \$ @
+ _ \$ @
+ _/ _\$@
+ @@
+ _ )$@
+ _ \$@
+ ___/$@
+ @@
+ __|$@
+ ($ @
+ \___|$@
+ @@
+ _ \$ @
+ | |$@
+ ___/$ @
+ @@
+ __|$@
+ _|$ @
+ ___|$@
+ @@
+ __|$@
+ _|$ @
+ _|$ @
+ @@
+ __|$@
+ (_ |$@
+ \___|$@
+ @@
+ | |$@
+ __ |$@
+ _| _|$@
+ @@
+ _ _|$@
+ |$ @
+ ___|$@
+ @@
+ |$@
+ \ |$@
+ \__/$ @
+ @@
+ | /$@
+ . <$ @
+ _|\_\$@
+ @@
+ |$ @
+ |$ @
+ ____|$@
+ @@
+ \ |$@
+ |\/ |$@
+ _| _|$@
+ @@
+ \ |$@
+ . |$@
+ _|\_|$@
+ @@
+ _ \$ @
+ ( |$@
+ \___/$ @
+ @@
+ _ \$@
+ __/$@
+ _|$ @
+ @@
+ _ \$ @
+ ( |$@
+ \__\_\$@
+ @@
+ _ \$@
+ /$@
+ _|_\$@
+ @@
+ __|$@
+ \__ \$@
+ ____/$@
+ @@
+ __ __|$@
+ |$ @
+ _|$ @
+ @@
+ | |$@
+ | |$@
+ \__/$ @
+ @@
+ \ \ /$@
+ \ \ /$ @
+ \_/$ @
+ @@
+ \ \ /$@
+ \ \ \ /$ @
+ \_/\_/$ @
+ @@
+ \ \ /$@
+ > <$ @
+ _/\_\$@
+ @@
+ \ \ /$@
+ \ /$ @
+ _|$ @
+ @@
+ __ /$@
+ /$ @
+ ____|$@
+ @@
+ _|$@
+ |$ @
+ |$ @
+ __|$@@
+ \ \$ @
+ \ \$ @
+ \_\$@
+ @@
+ _ |$@
+ |$@
+ |$@
+ __|$@@
+ \$ @
+ /\|$@
+ @
+ @@
+ @
+ @
+ @
+ ____|$@@
+ )$@
+ \|$@
+ @
+ @@
+ @
+ _` |$@
+ \__,_|$@
+ @@
+ |$ @
+ _ \$@
+ _.__/$@
+ @@
+ @
+ _|$@
+ \__|$@
+ @@
+ |$@
+ _` |$@
+ \__,_|$@
+ @@
+ @
+ -_)$@
+ \___|$@
+ @@
+ _|$@
+ _|$@
+ _|$ @
+ @@
+ @
+ _` |$@
+ \__, |$@
+ ____/$ @@
+ |$ @
+ \$ @
+ _| _|$@
+ @@
+ _)$@
+ |$@
+ _|$@
+ @@
+ _)$@
+ |$@
+ |$@
+ __/$ @@
+ |$ @
+ | /$@
+ _\_\$@
+ @@
+ |$@
+ |$@
+ _|$@
+ @@
+ @
+ ` \$ @
+ _|_|_|$@
+ @@
+ @
+ \$ @
+ _| _|$@
+ @@
+ @
+ _ \$@
+ \___/$@
+ @@
+ @
+ _ \$@
+ .__/$@
+ _|$ @@
+ @
+ _` |$@
+ \__, |$@
+ _|$@@
+ @
+ _|$@
+ _|$ @
+ @@
+ @
+ (_-<$@
+ ___/$@
+ @@
+ |$ @
+ _|$@
+ \__|$@
+ @@
+ @
+ | |$@
+ \_,_|$@
+ @@
+ @
+ \ \ /$@
+ \_/$ @
+ @@
+ @
+ \ \ \ /$@
+ \_/\_/$ @
+ @@
+ @
+ \ \ /$@
+ _\_\$@
+ @@
+ @
+ | |$@
+ \_, |$@
+ ___/$ @@
+ @
+ _ /$@
+ ___|$@
+ @@
+ /$@
+ _ |$ @
+ |$ @
+ \_\$@@
+ |$@
+ |$@
+ |$@
+ _|$@@
+ \ \$ @
+ |_$@
+ |$ @
+ _/$ @@
+ \ |$@
+ /\/$ @
+ @
+ @@
+ _) \_)$@
+ _ \$ @
+ / _\$@
+ @@
+ _) _)$@
+ __ \$@
+ \____/$@
+ @@
+ _) _)$@
+ | |$@
+ \__/$ @
+ @@
+ _) _)$@
+ _` |$@
+ \__,_|$@
+ @@
+ _) _)$@
+ _ \$@
+ \___/$@
+ @@
+ _) _)$@
+ | |$@
+ \_,_|$@
+ @@
+ _ \$@
+ |< <$@
+ |__/$@
+ _|$ @@
+160 NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@@
+161 INVERTED EXCLAMATION MARK
+ _)$@
+ |$@
+ _|$@
+ @@
+162 CENT SIGN
+ |$ @
+ _)$@
+ \ _)$@
+ |$ @@
+163 POUND SIGN
+ _\$ @
+ _ _|$ @
+ _,___|$@
+ @@
+164 CURRENCY SIGN
+ \ . /$@
+ _ \$@
+ \/ /$@
+ @@
+165 YEN SIGN
+ \ \ /$ @
+ __ __|$@
+ __ __|$@
+ _|$ @@
+166 BROKEN BAR
+ |$@
+ _|$@
+ |$@
+ _|$@@
+167 SECTION SIGN
+ _)$@
+ \ \$ @
+ \ \/$ @
+ __/$ @@
+168 DIAERESIS
+ _) _)$@
+ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ \$ @
+ _| \$@
+ \ \__| /$@
+ \____/$ @@
+170 FEMININE ORDINAL INDICATOR
+ _` |$@
+ \__,_|$@
+ _____|$@
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ / /$@
+ < < <$ @
+ \_\_\$@
+ @@
+172 NOT SIGN
+ ____ |$@
+ _|$@
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ ___|$@
+ @
+ @@
+174 REGISTERED SIGN
+ \$ @
+ -) \$@
+ \ |\\ /$@
+ \____/$ @@
+175 MACRON
+ ___|$@
+ @
+ @
+ @@
+176 DEGREE SIGN
+ .\$@
+ \_/$@
+ @
+ @@
+177 PLUS-MINUS SIGN
+ |$ @
+ _ _|$@
+ _|$ @
+ _____|$@@
+178 SUPERSCRIPT TWO
+ _ )$@
+ __|$@
+ @
+ @@
+179 SUPERSCRIPT THREE
+ _ /$@
+ __)$@
+ @
+ @@
+180 ACUTE ACCENT
+ _/$@
+ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ | |$@
+ .,_|$@
+ _|$ @@
+182 PILCROW SIGN
+ |$@
+ \_ | |$@
+ _|_|$@
+ @@
+183 MIDDLE DOT
+ @
+ _)$@
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ _)$@@
+185 SUPERSCRIPT ONE
+ _ |$@
+ _|$@
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ _ \$@
+ \___/$@
+ ____|$@
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \ \ \$ @
+ > > >$@
+ _/_/$ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ | /$ @
+ _| /_' |$@
+ _/ _|$@
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ | /$ @
+ _| /_ )$@
+ _/ __|$@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ _ / /$ @
+ __) /_' |$@
+ _/ _|$@
+ @@
+191 INVERTED QUESTION MARK
+ _)$ @
+ /$ @
+ \___|$@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \_\$ @
+ --\$ @
+ _/\_\$@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _/$ @
+ --\$ @
+ _/\_\$@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\\$ @
+ --\$ @
+ _/\_\$@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ / _/$ @
+ --\$ @
+ _/\_\$@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _) \_)$@
+ _ \$ @
+ / _\$@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ ( )$ @
+ _ \$ @
+ _/ _\$@
+ @@
+198 LATIN CAPITAL LETTER AE
+ , __|$@
+ _ _|$ @
+ _/ ___|$@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ |$@
+ ($ @
+ \___|$@
+ _)$ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \_\$@
+ -<$@
+ __<$@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _/$@
+ -<$@
+ __<$@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\\$@
+ -<$@
+ __<$@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _) _)$@
+ -<$ @
+ __<$ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \_\$ @
+ _ _|$@
+ ___|$@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _/$ @
+ _ _|$@
+ ___|$@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\\$ @
+ _ _|$@
+ ___|$@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _) _)$@
+ _ _|$ @
+ ___|$ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ _ \$ @
+ _ _| |$@
+ ___/$ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ / _/$@
+ \ |$@
+ _|\_|$@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \_\$ @
+ __ \$@
+ \____/$@
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _/$ @
+ __ \$@
+ \____/$@
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\\$ @
+ __ \$@
+ \____/$@
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ / _/$ @
+ __ \$@
+ \____/$@
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _) _)$@
+ __ \$@
+ \____/$@
+ @@
+215 MULTIPLICATION SIGN
+ \ \$@
+ , '$@
+ \/\/$@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _ /\$ @
+ ( / |$@
+ \_/__/$ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \_\$ @
+ | |$@
+ \__/$ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _/$ @
+ | |$@
+ \__/$ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\\$ @
+ | |$@
+ \__/$ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _) _)$@
+ | |$@
+ \__/$ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _/$ @
+ \ \ /$@
+ _|$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ |$ @
+ -_)$@
+ _|$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ _ \$@
+ |< <$@
+ |__/$@
+ _|$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \_\$ @
+ _` |$@
+ \__,_|$@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _/$ @
+ _` |$@
+ \__,_|$@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\\$ @
+ _` |$@
+ \__,_|$@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ / _/$ @
+ _` |$@
+ \__,_|$@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _) _)$@
+ _` |$@
+ \__,_|$@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ ( )$ @
+ _` |$@
+ \__,_|$@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ _` -_)$@
+ \__,___|$@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ _|$@
+ \__|$@
+ _)$@@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \_\$ @
+ -_)$@
+ \___|$@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _/$ @
+ -_)$@
+ \___|$@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\\$ @
+ -_)$@
+ \___|$@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _) _)$@
+ -_)$ @
+ \___|$ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \_\$@
+ |$@
+ _|$@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _/$@
+ |$@
+ _|$@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\\$@
+ |$ @
+ _|$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _) _)$@
+ |$ @
+ _|$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ , \'$@
+ _` |$@
+ \___/$ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ / _/$ @
+ ' \$ @
+ _| _|$@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \_\$ @
+ _ \$@
+ \___/$@
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _/$ @
+ _ \$@
+ \___/$@
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\\$ @
+ _ \$@
+ \___/$@
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ / _/$@
+ _ \$@
+ \___/$@
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _) _)$@
+ _ \$@
+ \___/$@
+ @@
+247 DIVISION SIGN
+ _)$ @
+ ___|$@
+ _)$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ /\$@
+ \_/_/$@
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \_\$ @
+ | |$@
+ \_,_|$@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _/$ @
+ | |$@
+ \_,_|$@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\\$ @
+ | |$@
+ \_,_|$@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _) _)$@
+ | |$@
+ \_,_|$@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _/$ @
+ | |$@
+ \_, |$@
+ ___/$ @@
+254 LATIN SMALL LETTER THORN
+ |$ @
+ '_ \$@
+ .__/$@
+ _|$ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _) _)$@
+ | |$@
+ \_, |$@
+ ___/$ @@
diff --git a/externals/figlet/fonts/smslant.flf b/externals/figlet/fonts/smslant.flf
new file mode 100644
index 0000000000..24284b8465
--- /dev/null
+++ b/externals/figlet/fonts/smslant.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 14 15 10 0 22415 96
+SmSlant by Glenn Chappell 6/93 - based on Small & Slant
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $@
+ $ @
+ $ @
+ $ @
+$ @@
+ __@
+ / /@
+ /_/ @
+(_) @
+ @@
+ _ _ @
+( | )@
+|/|/ @
+$ @
+ @@
+ ____ @
+ __/ / /_@
+ /_ . __/@
+/_ __/ @
+ /_/_/ @@
+ @
+ _//@
+ (_-<@
+/ __/@
+// @@
+ _ __@
+(_)_/_/@
+ _/_/_ @
+/_/ (_)@
+ @@
+ ____ @
+ / __/___@
+ > _/_ _/@
+|_____/ @
+ @@
+ _ @
+( )@
+|/ @
+$ @
+ @@
+ __@
+ _/_/@
+ / / @
+/ / @
+|_| @@
+ _ @
+ | |@
+ / /@
+ _/_/ @
+/_/ @@
+ @
+ _/|@
+> _<@
+|/ @
+ @@
+ __ @
+ __/ /_@
+/_ __/@
+ /_/ @
+ @@
+ @
+ @
+ _ @
+( )@
+|/ @@
+ @
+ ____@
+/___/@
+ $ @
+ @@
+ @
+ @
+ _ @
+(_)@
+ @@
+ __@
+ _/_/@
+ _/_/ @
+/_/ @
+ @@
+ ___ @
+ / _ \@
+/ // /@
+\___/ @
+ @@
+ ___@
+ < /@
+ / / @
+/_/ @
+ @@
+ ___ @
+ |_ |@
+ / __/ @
+/____/ @
+ @@
+ ____@
+ |_ /@
+ _/_ < @
+/____/ @
+ @@
+ ____@
+ / / /@
+/_ _/@
+ /_/ @
+ @@
+ ____@
+ / __/@
+ /__ \ @
+/____/ @
+ @@
+ ____@
+ / __/@
+/ _ \ @
+\___/ @
+ @@
+ ____@
+/_ /@
+ / / @
+/_/ @
+ @@
+ ___ @
+ ( _ )@
+/ _ |@
+\___/ @
+ @@
+ ___ @
+ / _ \@
+ \_, /@
+/___/ @
+ @@
+ _ @
+ (_)@
+ _ @
+(_) @
+ @@
+ _ @
+ (_)@
+ _ @
+( ) @
+|/ @@
+ __@
+ / /@
+< < @
+ \_\@
+ @@
+ @
+ ____@
+ /___/@
+/___/ @
+ @@
+__ @
+\ \ @
+ > >@
+/_/ @
+ @@
+ ___ @
+/__ \@
+ /__/@
+(_) @
+ @@
+ _____ @
+ / ___ \@
+/ / _ `/@
+\ \_,_/ @
+ \___/ @@
+ ___ @
+ / _ |@
+ / __ |@
+/_/ |_|@
+ @@
+ ___ @
+ / _ )@
+ / _ |@
+/____/ @
+ @@
+ _____@
+ / ___/@
+/ /__ @
+\___/ @
+ @@
+ ___ @
+ / _ \@
+ / // /@
+/____/ @
+ @@
+ ____@
+ / __/@
+ / _/ @
+/___/ @
+ @@
+ ____@
+ / __/@
+ / _/ @
+/_/ @
+ @@
+ _____@
+ / ___/@
+/ (_ / @
+\___/ @
+ @@
+ __ __@
+ / // /@
+ / _ / @
+/_//_/ @
+ @@
+ ____@
+ / _/@
+ _/ / @
+/___/ @
+ @@
+ __@
+ __ / /@
+/ // / @
+\___/ @
+ @@
+ __ __@
+ / //_/@
+ / ,< @
+/_/|_| @
+ @@
+ __ @
+ / / @
+ / /__@
+/____/@
+ @@
+ __ ___@
+ / |/ /@
+ / /|_/ / @
+/_/ /_/ @
+ @@
+ _ __@
+ / |/ /@
+ / / @
+/_/|_/ @
+ @@
+ ____ @
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+ ___ @
+ / _ \@
+ / ___/@
+/_/ @
+ @@
+ ____ @
+ / __ \@
+/ /_/ /@
+\___\_\@
+ @@
+ ___ @
+ / _ \@
+ / , _/@
+/_/|_| @
+ @@
+ ____@
+ / __/@
+ _\ \ @
+/___/ @
+ @@
+ ______@
+/_ __/@
+ / / @
+/_/ @
+ @@
+ __ __@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+ _ __@
+ | | / /@
+ | |/ / @
+ |___/ @
+ @@
+ _ __@
+ | | /| / /@
+ | |/ |/ / @
+ |__/|__/ @
+ @@
+ _ __@
+ | |/_/@
+ _> < @
+/_/|_| @
+ @@
+ __ __@
+ \ \/ /@
+ \ / @
+ /_/ @
+ @@
+ ____@
+ /_ /@
+ / /_@
+ /___/@
+ @@
+ ___@
+ / _/@
+ / / @
+ / / @
+/__/ @@
+__ @
+\ \ @
+ \ \ @
+ \_\@
+ @@
+ ___@
+ / /@
+ / / @
+ _/ / @
+/__/ @@
+ //|@
+|/||@
+ $ @
+$ @
+ @@
+ @
+ @
+ @
+ ____@
+/___/@@
+ _ @
+( )@
+ V @
+$ @
+ @@
+ @
+ ___ _@
+/ _ `/@
+\_,_/ @
+ @@
+ __ @
+ / / @
+ / _ \@
+/_.__/@
+ @@
+ @
+ ____@
+/ __/@
+\__/ @
+ @@
+ __@
+ ___/ /@
+/ _ / @
+\_,_/ @
+ @@
+ @
+ ___ @
+/ -_)@
+\__/ @
+ @@
+ ___@
+ / _/@
+ / _/ @
+/_/ @
+ @@
+ @
+ ___ _@
+ / _ `/@
+ \_, / @
+/___/ @@
+ __ @
+ / / @
+ / _ \@
+/_//_/@
+ @@
+ _ @
+ (_)@
+ / / @
+/_/ @
+ @@
+ _ @
+ (_)@
+ / / @
+ __/ / @
+|___/ @@
+ __ @
+ / /__@
+ / '_/@
+/_/\_\ @
+ @@
+ __@
+ / /@
+ / / @
+/_/ @
+ @@
+ @
+ __ _ @
+ / ' \@
+/_/_/_/@
+ @@
+ @
+ ___ @
+ / _ \@
+/_//_/@
+ @@
+ @
+ ___ @
+/ _ \@
+\___/@
+ @@
+ @
+ ___ @
+ / _ \@
+ / .__/@
+/_/ @@
+ @
+ ___ _@
+/ _ `/@
+\_, / @
+ /_/ @@
+ @
+ ____@
+ / __/@
+/_/ @
+ @@
+ @
+ ___@
+ (_-<@
+/___/@
+ @@
+ __ @
+ / /_@
+/ __/@
+\__/ @
+ @@
+ @
+ __ __@
+/ // /@
+\_,_/ @
+ @@
+ @
+ _ __@
+| |/ /@
+|___/ @
+ @@
+ @
+ _ __@
+| |/|/ /@
+|__,__/ @
+ @@
+ @
+ __ __@
+ \ \ /@
+/_\_\ @
+ @@
+ @
+ __ __@
+ / // /@
+ \_, / @
+/___/ @@
+ @
+ ___@
+/_ /@
+/__/@
+ @@
+ __@
+ _/_/@
+_/ / @
+/ / @
+\_\ @@
+ __@
+ / /@
+ / / @
+ / / @
+/_/ @@
+ __ @
+ \ \ @
+ / /_@
+ _/_/ @
+/_/ @@
+ /\//@
+//\/ @
+ $ @
+$ @
+ @@
+ _ _ @
+ (_)(_)@
+ / - | @
+/_/|_| @
+ @@
+ _ _ @
+ (_)_(_)@
+/ __ \ @
+\____/ @
+ @@
+ _ _ @
+ (_) (_)@
+/ /_/ / @
+\____/ @
+ @@
+ _ _ @
+ (_)(_)@
+/ _ `/ @
+\_,_/ @
+ @@
+ _ _ @
+ (_)(_)@
+/ _ \ @
+\___/ @
+ @@
+ _ _ @
+ (_)(_)@
+/ // / @
+\_,_/ @
+ @@
+ ____ @
+ / _ )@
+ / /< < @
+ / //__/ @
+/_/ @@
+160 NO-BREAK SPACE
+ $@
+ $ @
+ $ @
+ $ @
+$ @@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ / / @
+/_/ @
+ @@
+162 CENT SIGN
+ @
+ __//@
+/ __/@
+\ _/ @
+// @@
+163 POUND SIGN
+ __ @
+ __/__|@
+ /_ _/_ @
+(_,___/ @
+ @@
+164 CURRENCY SIGN
+ /|_/|@
+ | . / @
+ /_ | @
+|/ |/ @
+ @@
+165 YEN SIGN
+ ____@
+ _| / /@
+ /_ __/@
+/_ __/ @
+ /_/ @@
+166 BROKEN BAR
+ __@
+ / /@
+ /_/ @
+ / / @
+/_/ @@
+167 SECTION SIGN
+ __ @
+ _/ _)@
+ / | | @
+ | |_/ @
+(__/ @@
+168 DIAERESIS
+ _ _ @
+(_) (_)@
+ $ $ @
+$ $ @
+ @@
+169 COPYRIGHT SIGN
+ ____ @
+ / ___\ @
+ / / _/ |@
+| |__/ / @
+ \____/ @@
+170 FEMININE ORDINAL INDICATOR
+ ___ _@
+ / _ `/@
+ _\_,_/ @
+/____/ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+< < < @
+ \_\_\@
+ @@
+172 NOT SIGN
+ @
+ ____@
+/_ /@
+ /_/ @
+ @@
+173 SOFT HYPHEN
+ @
+ ___@
+/__/@
+ $ @
+ @@
+174 REGISTERED SIGN
+ ____ @
+ / __ \ @
+ / / -) |@
+| //\\ / @
+ \____/ @@
+175 MACRON
+ ____@
+/___/@
+ $ @
+$ @
+ @@
+176 DEGREE SIGN
+ __ @
+ /. |@
+|__/ @
+ $ @
+ @@
+177 PLUS-MINUS SIGN
+ __ @
+ __/ /_@
+ /_ __/@
+ __/_/_ @
+/_____/ @@
+178 SUPERSCRIPT TWO
+ __ @
+ |_ )@
+/__| @
+ $ @
+ @@
+179 SUPERSCRIPT THREE
+ ___@
+ |_ /@
+/__) @
+ $ @
+ @@
+180 ACUTE ACCENT
+ __@
+/_/@
+ $ @
+$ @
+ @@
+181 MICRO SIGN
+ @
+ __ __@
+ / // /@
+ / .,_/ @
+/_/ @@
+182 PILCROW SIGN
+ _____@
+ / /@
+|_ / / @
+/_/_/ @
+ @@
+183 MIDDLE DOT
+ @
+ _ @
+(_)@
+$ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ _ @
+/_)@@
+185 SUPERSCRIPT ONE
+ __@
+ < /@
+/_/ @
+$ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \@
+ _\___/@
+/____/ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+____ @
+\ \ \ @
+ > > >@
+/_/_/ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ __ __ @
+ < /_/_/___@
+/_//_//_' /@
+ /_/ /_/ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ __ __ @
+ < /_/_/_ @
+/_//_/|_ )@
+ /_/ /__| @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ___ __ @
+ |_ /_/_/___@
+/__)/_//_' /@
+ /_/ /_/ @
+ @@
+191 INVERTED QUESTION MARK
+ _ @
+ _(_)@
+/ _/_@
+\___/@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ _\_\@
+ / - |@
+/_/|_|@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __@
+ _/_/@
+ / - |@
+/_/|_|@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / - | @
+/_/|_| @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\//@
+ _//\/ @
+ / - | @
+/_/|_| @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / - | @
+/_/|_| @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ (())@
+ / _ |@
+ / __ |@
+/_/ |_|@
+ @@
+198 LATIN CAPITAL LETTER AE
+ _______@
+ / _ __/@
+ / _ _/ @
+/_//___/ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ _____@
+ / ___/@
+/ /__ @
+\___/ @
+/_) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ \_\@
+ / -<@
+/__< @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __@
+ _/_/@
+ / -< @
+/__< @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ //|@
+ |/||@
+ / -< @
+/__< @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / -< @
+/__< @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ _\_\ @
+ /_ __/@
+/____/ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __@
+ __/_/@
+ /_ __/@
+/____/ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ /_ __/@
+/____/ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ /_ __/ @
+/____/ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ____ @
+ _/ __ \@
+/_ _// /@
+/_____/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\//@
+ __//\/ @
+ / |/ / @
+/_/|__/ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ _\_\ @
+/ __ \@
+\____/@
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __@
+ __/_/@
+/ __ \@
+\____/@
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ //|@
+ _|/||@
+/ __ \@
+\____/@
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\//@
+ _//\/ @
+/ __ \ @
+\____/ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+/ __ \ @
+\____/ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ /|/|@
+ > < @
+|/|/ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _____ @
+ / _// \@
+/ //// /@
+\_//__/ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ __\_\ @
+/ /_/ /@
+\____/ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __@
+ __ /_/@
+/ /_/ /@
+\____/ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //|@
+ __|/||@
+/ /_/ /@
+\____/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+/ /_/ / @
+\____/ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __@
+__/_/@
+\ V /@
+ /_/ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ __ @
+ / / @
+ / -_)@
+/_/ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ____ @
+ / _ )@
+ / /< < @
+ / //__/ @
+/_/ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ _\_\_@
+/ _ `/@
+\_,_/ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __@
+ __/_/@
+/ _ `/@
+\_,_/ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ //|@
+ _|/||@
+/ _ `/@
+\_,_/ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\//@
+ _//\/ @
+/ _ `/ @
+\_,_/ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+/ _ `/ @
+\_,_/ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ _(())@
+/ _ `/@
+\_,_/ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ ___ ___ @
+/ _ ` -_)@
+\_,____/ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ ____@
+/ __/@
+\__/ @
+/_) @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ _\_\@
+/ -_)@
+\__/ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __@
+ _/_/@
+/ -_)@
+\__/ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //|@
+ |/||@
+/ -_)@
+\__/ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+(_)(_)@
+/ -_) @
+\__/ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ / / @
+/_/ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ / / @
+/_/ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //|@
+ |/||@
+ / / @
+/_/ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+(_)_(_)@
+ / / @
+/_/ @
+ @@
+240 LATIN SMALL LETTER ETH
+ _||_@
+ __ || @
+/ _` | @
+\___/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\//@
+ _//\/ @
+ / _ \ @
+/_//_/ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ _\_\@
+/ _ \@
+\___/@
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __@
+ _/_/@
+/ _ \@
+\___/@
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //|@
+ _|/||@
+/ _ \ @
+\___/ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\//@
+ _//\/ @
+/ _ \ @
+\___/ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+/ _ \ @
+\___/ @
+ @@
+247 DIVISION SIGN
+ _ @
+ _(_)@
+/___/@
+(_) @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ ___ @
+/ //\@
+\//_/@
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ __\_\@
+/ // /@
+\_,_/ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __@
+ __/_/@
+/ // /@
+\_,_/ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ //|@
+ _|/||@
+/ // /@
+\_,_/ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+/ // / @
+\_,_/ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __@
+ __/_/@
+ / // /@
+ \_, / @
+/___/ @@
+254 LATIN SMALL LETTER THORN
+ __ @
+ / / @
+ / _ \@
+ / .__/@
+/_/ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / // / @
+ \_, / @
+/___/ @@
diff --git a/externals/figlet/fonts/standard.flf b/externals/figlet/fonts/standard.flf
new file mode 100644
index 0000000000..bb15241b0a
--- /dev/null
+++ b/externals/figlet/fonts/standard.flf
@@ -0,0 +1,2238 @@
+flf2a$ 6 5 16 15 15 0 24463 229
+Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Modified for figlet 2.2 by John Cowan <cowan@ccil.org>
+ to add Latin-{2,3,4,5} support (Unicode U+0100-017F).
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+---
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+Modified 2012-05 by Patrick Gillespie (patorjk@gmail.com) to add the 0xCA0 character.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ _ @
+ | |@
+ | |@
+ |_|@
+ (_)@
+ @@
+ _ _ @
+ ( | )@
+ V V @
+ $ @
+ $ @
+ @@
+ _ _ @
+ _| || |_ @
+ |_ .. _|@
+ |_ _|@
+ |_||_| @
+ @@
+ _ @
+ | | @
+ / __)@
+ \__ \@
+ ( /@
+ |_| @@
+ _ __@
+ (_)/ /@
+ / / @
+ / /_ @
+ /_/(_)@
+ @@
+ ___ @
+ ( _ ) @
+ / _ \/\@
+ | (_> <@
+ \___/\/@
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+ $ @
+ @@
+ __@
+ / /@
+ | | @
+ | | @
+ | | @
+ \_\@@
+ __ @
+ \ \ @
+ | |@
+ | |@
+ | |@
+ /_/ @@
+ @
+ __/\__@
+ \ /@
+ /_ _\@
+ \/ @
+ @@
+ @
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ @@
+ @
+ @
+ @
+ _ @
+ ( )@
+ |/ @@
+ @
+ @
+ _____ @
+ |_____|@
+ $ @
+ @@
+ @
+ @
+ @
+ _ @
+ (_)@
+ @@
+ __@
+ / /@
+ / / @
+ / / @
+ /_/ @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ @
+ / |@
+ | |@
+ | |@
+ |_|@
+ @@
+ ____ @
+ |___ \ @
+ __) |@
+ / __/ @
+ |_____|@
+ @@
+ _____ @
+ |___ / @
+ |_ \ @
+ ___) |@
+ |____/ @
+ @@
+ _ _ @
+ | || | @
+ | || |_ @
+ |__ _|@
+ |_| @
+ @@
+ ____ @
+ | ___| @
+ |___ \ @
+ ___) |@
+ |____/ @
+ @@
+ __ @
+ / /_ @
+ | '_ \ @
+ | (_) |@
+ \___/ @
+ @@
+ _____ @
+ |___ |@
+ / / @
+ / / @
+ /_/ @
+ @@
+ ___ @
+ ( _ ) @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \__, |@
+ /_/ @
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+ (_)@
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+ ( )@
+ |/ @@
+ __@
+ / /@
+ / / @
+ \ \ @
+ \_\@
+ @@
+ @
+ _____ @
+ |_____|@
+ |_____|@
+ $ @
+ @@
+ __ @
+ \ \ @
+ \ \@
+ / /@
+ /_/ @
+ @@
+ ___ @
+ |__ \@
+ / /@
+ |_| @
+ (_) @
+ @@
+ ____ @
+ / __ \ @
+ / / _` |@
+ | | (_| |@
+ \ \__,_|@
+ \____/ @@
+ _ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @@
+ ____ @
+ | __ ) @
+ | _ \ @
+ | |_) |@
+ |____/ @
+ @@
+ ____ @
+ / ___|@
+ | | @
+ | |___ @
+ \____|@
+ @@
+ ____ @
+ | _ \ @
+ | | | |@
+ | |_| |@
+ |____/ @
+ @@
+ _____ @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @@
+ _____ @
+ | ___|@
+ | |_ @
+ | _| @
+ |_| @
+ @@
+ ____ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+ _ _ @
+ | | | |@
+ | |_| |@
+ | _ |@
+ |_| |_|@
+ @@
+ ___ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+ _ @
+ | |@
+ _ | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ __@
+ | |/ /@
+ | ' / @
+ | . \ @
+ |_|\_\@
+ @@
+ _ @
+ | | @
+ | | @
+ | |___ @
+ |_____|@
+ @@
+ __ __ @
+ | \/ |@
+ | |\/| |@
+ | | | |@
+ |_| |_|@
+ @@
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | __/ @
+ |_| @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \__\_\@
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ @@
+ ____ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ |_| @
+ @@
+ _ _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ / / @
+ \ V / @
+ \_/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ /\ / / @
+ \ V V / @
+ \_/\_/ @
+ @@
+ __ __@
+ \ \/ /@
+ \ / @
+ / \ @
+ /_/\_\@
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ | | @
+ |_| @
+ @@
+ _____@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+ __ @
+ | _|@
+ | | @
+ | | @
+ | | @
+ |__|@@
+ __ @
+ \ \ @
+ \ \ @
+ \ \ @
+ \_\@
+ @@
+ __ @
+ |_ |@
+ | |@
+ | |@
+ | |@
+ |__|@@
+ /\ @
+ |/\|@
+ $ @
+ $ @
+ $ @
+ @@
+ @
+ @
+ @
+ @
+ _____ @
+ |_____|@@
+ _ @
+ ( )@
+ \|@
+ $ @
+ $ @
+ @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ _ @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+ @@
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+ _ @
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+ __ @
+ / _|@
+ | |_ @
+ | _|@
+ |_| @
+ @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+ _ @
+ | |__ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ | |@
+ _/ |@
+ |__/ @@
+ _ @
+ | | __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ @@
+ _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+ @@
+ @
+ _ __ ___ @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+ @@
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ @
+ _ __ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_| @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |_|@@
+ @
+ _ __ @
+ | '__|@
+ | | @
+ |_| @
+ @@
+ @
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ @@
+ _ @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ @@
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+ @
+ __ __@
+ \ \ / /@
+ \ V / @
+ \_/ @
+ @@
+ @
+ __ __@
+ \ \ /\ / /@
+ \ V V / @
+ \_/\_/ @
+ @@
+ @
+ __ __@
+ \ \/ /@
+ > < @
+ /_/\_\@
+ @@
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+ @
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @@
+ __@
+ / /@
+ | | @
+ < < @
+ | | @
+ \_\@@
+ _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __ @
+ \ \ @
+ | | @
+ > >@
+ | | @
+ /_/ @@
+ /\/|@
+ |/\/ @
+ $ @
+ $ @
+ $ @
+ @@
+ _ _ @
+ (_)_(_)@
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+ ___ @
+ / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_| @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+ @@
+162 CENT SIGN
+ _ @
+ | | @
+ / __)@
+ | (__ @
+ \ )@
+ |_| @@
+163 POUND SIGN
+ ___ @
+ / ,_\ @
+ _| |_ @
+ | |___ @
+ (_,____|@
+ @@
+164 CURRENCY SIGN
+ /\___/\@
+ \ _ /@
+ | (_) |@
+ / ___ \@
+ \/ \/@
+ @@
+165 YEN SIGN
+ __ __ @
+ \ V / @
+ |__ __|@
+ |__ __|@
+ |_| @
+ @@
+166 BROKEN BAR
+ _ @
+ | |@
+ |_|@
+ _ @
+ | |@
+ |_|@@
+167 SECTION SIGN
+ __ @
+ _/ _)@
+ / \ \ @
+ \ \\ \@
+ \ \_/@
+ (__/ @@
+168 DIAERESIS
+ _ _ @
+ (_) (_)@
+ $ $ @
+ $ $ @
+ $ $ @
+ @@
+169 COPYRIGHT SIGN
+ _____ @
+ / ___ \ @
+ / / __| \ @
+ | | (__ |@
+ \ \___| / @
+ \_____/ @@
+170 FEMININE ORDINAL INDICATOR
+ __ _ @
+ / _` |@
+ \__,_|@
+ |____|@
+ $ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+ / / / @
+ \ \ \ @
+ \_\_\@
+ @@
+172 NOT SIGN
+ @
+ _____ @
+ |___ |@
+ |_|@
+ $ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ ____ @
+ |____|@
+ $ @
+ @@
+174 REGISTERED SIGN
+ _____ @
+ / ___ \ @
+ / | _ \ \ @
+ | | / |@
+ \ |_|_\ / @
+ \_____/ @@
+175 MACRON
+ _____ @
+ |_____|@
+ $ @
+ $ @
+ $ @
+ @@
+176 DEGREE SIGN
+ __ @
+ / \ @
+ | () |@
+ \__/ @
+ $ @
+ @@
+177 PLUS-MINUS SIGN
+ _ @
+ _| |_ @
+ |_ _|@
+ _|_|_ @
+ |_____|@
+ @@
+178 SUPERSCRIPT TWO
+ ___ @
+ |_ )@
+ / / @
+ /___|@
+ $ @
+ @@
+179 SUPERSCRIPT THREE
+ ____@
+ |__ /@
+ |_ \@
+ |___/@
+ $ @
+ @@
+180 ACUTE ACCENT
+ __@
+ /_/@
+ $ @
+ $ @
+ $ @
+ @@
+181 MICRO SIGN
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ |_| @@
+182 PILCROW SIGN
+ _____ @
+ / |@
+ | (| | |@
+ \__ | |@
+ |_|_|@
+ @@
+183 MIDDLE DOT
+ @
+ _ @
+ (_)@
+ $ @
+ $ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ _ @
+ )_)@@
+185 SUPERSCRIPT ONE
+ _ @
+ / |@
+ | |@
+ |_|@
+ $ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \@
+ \___/@
+ |___|@
+ $ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____ @
+ \ \ \ @
+ \ \ \@
+ / / /@
+ /_/_/ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ __ @
+ / | / / _ @
+ | |/ / | | @
+ |_/ /|_ _|@
+ /_/ |_| @
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ __ @
+ / | / /__ @
+ | |/ /_ )@
+ |_/ / / / @
+ /_/ /___|@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ____ __ @
+ |__ / / / _ @
+ |_ \/ / | | @
+ |___/ /|_ _|@
+ /_/ |_| @
+ @@
+191 INVERTED QUESTION MARK
+ _ @
+ (_) @
+ | | @
+ / /_ @
+ \___|@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ \_\ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __ @
+ /_/ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/| @
+ |/\/ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ (o) @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+198 LATIN CAPITAL LETTER AE
+ ______ @
+ / ____|@
+ / _ _| @
+ / __ |___ @
+ /_/ |_____|@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ ____ @
+ / ___|@
+ | | @
+ | |___ @
+ \____|@
+ )_) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ _\_\_ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __ @
+ _/_/_ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ \_\ @
+ |_ _|@
+ | | @
+ |___|@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __ @
+ /_/ @
+ |_ _|@
+ | | @
+ |___|@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ |_ _|@
+ | | @
+ |___|@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ |_ _| @
+ | | @
+ |___| @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ____ @
+ | _ \ @
+ _| |_| |@
+ |__ __| |@
+ |____/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/|@
+ |/\/ @
+ | \| |@
+ | .` |@
+ |_|\_|@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/| @
+ |/\/ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ /\/\@
+ > <@
+ \/\/@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ ____ @
+ / _// @
+ | |// |@
+ | //| |@
+ //__/ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ _\_\_ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __ @
+ _/_/_ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __ @
+ __/_/__@
+ \ \ / /@
+ \ V / @
+ |_| @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ _ @
+ | |___ @
+ | __ \@
+ | ___/@
+ |_| @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ___ @
+ / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_| @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ \_\_ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __ @
+ /_/_ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/| @
+ |/\/_ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ (()) @
+ / _ '|@
+ | (_| |@
+ \__,_|@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ __ ____ @
+ / _` _ \@
+ | (_| __/@
+ \__,____|@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ )_) @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ \_\ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __ @
+ /_/ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ / _ \@
+ | __/@
+ \___|@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | __/ @
+ \___| @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ | |@
+ | |@
+ |_|@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ | |@
+ | |@
+ |_|@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ | | @
+ | | @
+ |_| @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ | | @
+ | | @
+ |_| @
+ @@
+240 LATIN SMALL LETTER ETH
+ /\/\ @
+ > < @
+ _\/\ |@
+ / __` |@
+ \____/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/| @
+ |/\/ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/| @
+ |/\/ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+247 DIVISION SIGN
+ @
+ _ @
+ _(_)_ @
+ |_____|@
+ (_) @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ ____ @
+ / _//\ @
+ | (//) |@
+ \//__/ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ _\_\_ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __ @
+ _/_/_ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __ @
+ _/_/_ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+ ____ @
+ /___/ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+ ___ @
+ /_ _/@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+ _ _ @
+ \\_// @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+ \_/ @
+ ___ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+ @
+ _ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ (_(@@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ (_(@@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+ __ @
+ _/_/ @
+ / ___|@
+ | |___ @
+ \____|@
+ @@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+ __ @
+ /__/@
+ / __|@
+ | (__ @
+ \___|@
+ @@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ /\ @
+ _//\\@
+ / ___|@
+ | |___ @
+ \____|@
+ @@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+ /\ @
+ /_\ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+ [] @
+ ____ @
+ / ___|@
+ | |___ @
+ \____|@
+ @@
+0x010B LATIN SMALL LETTER C WITH DOT ABOVE
+ [] @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+0x010C LATIN CAPITAL LETTER C WITH CARON
+ \\// @
+ _\/_ @
+ / ___|@
+ | |___ @
+ \____|@
+ @@
+0x010D LATIN SMALL LETTER C WITH CARON
+ \\//@
+ _\/ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+0x010E LATIN CAPITAL LETTER D WITH CARON
+ \\// @
+ __\/ @
+ | _ \ @
+ | |_| |@
+ |____/ @
+ @@
+0x010F LATIN SMALL LETTER D WITH CARON
+ \/ _ @
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+ ____ @
+ |_ __ \ @
+ /| |/ | |@
+ /|_|/_| |@
+ |_____/ @
+ @@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+ ---|@
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+ ____ @
+ /___/ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+ ____@
+ /_ _/@
+ / _ \ @
+ | __/ @
+ \___| @
+ @@
+0x0114 LATIN CAPITAL LETTER E WITH BREVE
+ _ _ @
+ \\_// @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+0x0115 LATIN SMALL LETTER E WITH BREVE
+ \\ //@
+ -- @
+ / _ \ @
+ | __/ @
+ \___| @
+ @@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+ [] @
+ _____ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ [] @
+ __ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+ @
+ _____ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ (__(@@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ (_(@@
+0x011A LATIN CAPITAL LETTER E WITH CARON
+ \\// @
+ __\/_ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+0x011B LATIN SMALL LETTER E WITH CARON
+ \\//@
+ \/ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ _/\_ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ /\ @
+ _/_ \@
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+0x011E LATIN CAPITAL LETTER G WITH BREVE
+ _\/_ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+0x011F LATIN SMALL LETTER G WITH BREVE
+ \___/ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+ _[]_ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+ [] @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+ ____ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ )__) @@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |_))))@@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ _/ \_ @
+ | / \ |@
+ | |_| |@
+ | _ |@
+ |_| |_|@
+ @@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+ _ /\ @
+ | |//\ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+ _ _ @
+ | |=| |@
+ | |_| |@
+ | _ |@
+ |_| |_|@
+ @@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+ _ @
+ |=|__ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+ /\//@
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+ @
+ /\/@
+ | |@
+ | |@
+ |_|@
+ @@
+0x012A LATIN CAPITAL LETTER I WITH MACRON
+ /___/@
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+0x012B LATIN SMALL LETTER I WITH MACRON
+ ____@
+ /___/@
+ | | @
+ | | @
+ |_| @
+ @@
+0x012C LATIN CAPITAL LETTER I WITH BREVE
+ \__/@
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+0x012D LATIN SMALL LETTER I WITH BREVE
+ @
+ \_/@
+ | |@
+ | |@
+ |_|@
+ @@
+0x012E LATIN CAPITAL LETTER I WITH OGONEK
+ ___ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ (__(@@
+0x012F LATIN SMALL LETTER I WITH OGONEK
+ _ @
+ (_) @
+ | | @
+ | | @
+ |_|_@
+ (_(@@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+ _[] @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+0x0131 LATIN SMALL LETTER DOTLESS I
+ @
+ _ @
+ | |@
+ | |@
+ |_|@
+ @@
+0x0132 LATIN CAPITAL LIGATURE IJ
+ ___ _ @
+ |_ _|| |@
+ | | | |@
+ | |_| |@
+ |__|__/ @
+ @@
+0x0133 LATIN SMALL LIGATURE IJ
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ |_|_/ |@
+ |__/ @@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ /\ @
+ /_\|@
+ _ | | @
+ | |_| | @
+ \___/ @
+ @@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+ /\@
+ /_\@
+ | |@
+ | |@
+ _/ |@
+ |__/ @@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+ _ _ @
+ | |/ / @
+ | ' / @
+ | . \ @
+ |_|\_\ @
+ )__)@@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+ _ @
+ | | __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ )_)@@
+0x0138 LATIN SMALL LETTER KRA
+ @
+ _ __ @
+ | |/ \@
+ | < @
+ |_|\_\@
+ @@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+ _ //@
+ | | // @
+ | | @
+ | |___ @
+ |_____|@
+ @@
+0x013A LATIN SMALL LETTER L WITH ACUTE
+ //@
+ | |@
+ | |@
+ | |@
+ |_|@
+ @@
+0x013B LATIN CAPITAL LETTER L WITH CEDILLA
+ _ @
+ | | @
+ | | @
+ | |___ @
+ |_____|@
+ )__)@@
+0x013C LATIN SMALL LETTER L WITH CEDILLA
+ _ @
+ | | @
+ | | @
+ | | @
+ |_| @
+ )_)@@
+0x013D LATIN CAPITAL LETTER L WITH CARON
+ _ \\//@
+ | | \/ @
+ | | @
+ | |___ @
+ |_____|@
+ @@
+0x013E LATIN SMALL LETTER L WITH CARON
+ _ \\//@
+ | | \/ @
+ | | @
+ | | @
+ |_| @
+ @@
+0x013F LATIN CAPITAL LETTER L WITH MIDDLE DOT
+ _ @
+ | | @
+ | | [] @
+ | |___ @
+ |_____|@
+ @@
+0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT
+ _ @
+ | | @
+ | | []@
+ | | @
+ |_| @
+ @@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+ __ @
+ | // @
+ |//| @
+ // |__ @
+ |_____|@
+ @@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+ _ @
+ | |@
+ |//@
+ //|@
+ |_|@
+ @@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+ _/ /_ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+ _ @
+ _ /_/ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ )_) @@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ )_) @@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+ _\/ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @@
+0x0148 LATIN SMALL LETTER N WITH CARON
+ \\// @
+ _\/_ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+ @
+ _ __ @
+ ( )| '_\ @
+ |/| | | |@
+ |_| |_|@
+ @@
+0x014A LATIN CAPITAL LETTER ENG
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \ |@
+ )_)@@
+0x014B LATIN SMALL LETTER ENG
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| | |@
+ | |@
+ |__ @@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+ ____ @
+ /_ _/ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ ____ @
+ /_ _/ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+0x014E LATIN CAPITAL LETTER O WITH BREVE
+ \ / @
+ _-_ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+0x014F LATIN SMALL LETTER O WITH BREVE
+ \ / @
+ _-_ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ ___ @
+ /_/_/@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ ___ @
+ /_/_/@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+0x0152 LATIN CAPITAL LIGATURE OE
+ ___ ___ @
+ / _ \| __|@
+ | | | | | @
+ | |_| | |__@
+ \___/|____@
+ @@
+0x0153 LATIN SMALL LIGATURE OE
+ @
+ ___ ___ @
+ / _ \ / _ \@
+ | (_) | __/@
+ \___/ \___|@
+ @@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+ _/_/ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ @@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+ __@
+ _ /_/@
+ | '__|@
+ | | @
+ |_| @
+ @@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+ ____ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ )_) @@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+ @
+ _ __ @
+ | '__|@
+ | | @
+ |_| @
+ )_) @@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+ _\_/ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ @@
+0x0159 LATIN SMALL LETTER R WITH CARON
+ \\// @
+ _\/_ @
+ | '__|@
+ | | @
+ |_| @
+ @@
+0x015A LATIN CAPITAL LETTER S WITH ACUTE
+ _/_/ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+0x015B LATIN SMALL LETTER S WITH ACUTE
+ __@
+ _/_/@
+ / __|@
+ \__ \@
+ |___/@
+ @@
+0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ _/\_ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+ @
+ /_\_@
+ / __|@
+ \__ \@
+ |___/@
+ @@
+0x015E LATIN CAPITAL LETTER S WITH CEDILLA
+ ____ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ )__)@@
+0x015F LATIN SMALL LETTER S WITH CEDILLA
+ @
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ )_)@@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+ _\_/ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+0x0161 LATIN SMALL LETTER S WITH CARON
+ \\//@
+ _\/ @
+ / __|@
+ \__ \@
+ |___/@
+ @@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ |_| @
+ )__)@@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+ _ @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ )_)@@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ |_| @
+ @@
+0x0165 LATIN SMALL LETTER T WITH CARON
+ \/ @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ @@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+ _____ @
+ |_ _|@
+ | | @
+ -|-|- @
+ |_| @
+ @@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+ _ @
+ | |_ @
+ | __|@
+ |-|_ @
+ \__|@
+ @@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+ @
+ _/\/_ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+ @
+ _/\/_ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x016A LATIN CAPITAL LETTER U WITH MACRON
+ ____ @
+ /__ _/@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+0x016B LATIN SMALL LETTER U WITH MACRON
+ ____ @
+ / _ /@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x016C LATIN CAPITAL LETTER U WITH BREVE
+ @
+ \_/_ @
+ | | | |@
+ | |_| |@
+ \____|@
+ @@
+0x016D LATIN SMALL LETTER U WITH BREVE
+ @
+ \_/_ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
+ O @
+ __ _ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ O @
+ __ __ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ -- --@
+ /_//_/@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ ____@
+ _/_/_/@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+ _ _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ (__(@@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ (_(@@
+0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ __ /\ __@
+ \ \ //\\/ /@
+ \ \ /\ / / @
+ \ V V / @
+ \_/\_/ @
+ @@
+0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
+ /\ @
+ __ //\\__@
+ \ \ /\ / /@
+ \ V V / @
+ \_/\_/ @
+ @@
+0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+ /\ @
+ __//\\ @
+ \ \ / /@
+ \ V / @
+ |_| @
+ @@
+0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ /\ @
+ //\\ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+ [] []@
+ __ _@
+ \ \ / /@
+ \ V / @
+ |_| @
+ @@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+ __/_/@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+0x017A LATIN SMALL LETTER Z WITH ACUTE
+ _ @
+ _/_/@
+ |_ /@
+ / / @
+ /___|@
+ @@
+0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ __[]_@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
+ [] @
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @@
+0x017D LATIN CAPITAL LETTER Z WITH CARON
+ _\_/_@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+0x017E LATIN SMALL LETTER Z WITH CARON
+ \\//@
+ _\/_@
+ |_ /@
+ / / @
+ /___|@
+ @@
+0x017F LATIN SMALL LETTER LONG S
+ __ @
+ / _|@
+ |-| | @
+ |-| | @
+ |_| @
+ @@
+0x02C7 CARON
+ \\//@
+ \/ @
+ $@
+ $@
+ $@
+ $@@
+0x02D8 BREVE
+ \\_//@
+ \_/ @
+ $@
+ $@
+ $@
+ $@@
+0x02D9 DOT ABOVE
+ []@
+ $@
+ $@
+ $@
+ $@
+ $@@
+0x02DB OGONEK
+ $@
+ $@
+ $@
+ $@
+ $@
+ )_) @@
+0x02DD DOUBLE ACUTE ACCENT
+ _ _ @
+ /_/_/@
+ $@
+ $@
+ $@
+ $@@
+0xCA0 KANNADA LETTER TTHA
+ _____)@
+ /_ ___/@
+ / _ \ @
+ | (_) | @
+ $\___/$ @
+ @@
diff --git a/externals/figlet/fonts/term.flf b/externals/figlet/fonts/term.flf
new file mode 100644
index 0000000000..e27d01eeec
--- /dev/null
+++ b/externals/figlet/fonts/term.flf
@@ -0,0 +1,600 @@
+flf2a 1 1 2 -1 13 0 0 242
+Terminal by Glenn Chappell 4/93
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Double-checked by Paul Burton <solution@earthlink.net> 12/96. Added the new
+parameter supported by FIGlet and FIGWin. Unlike all other FIGfonts, this one
+is intended to produce output exactly the same as the input unless a control
+file is used. Therefore it produces the SAME output for smush, kern or fit.
+
+@
+!@
+"@
+#@
+$@
+%@
+&@
+'@
+(@
+)@
+*@
++@
+,@
+-@
+.@
+/@
+0@
+1@
+2@
+3@
+4@
+5@
+6@
+7@
+8@
+9@
+:@
+;@
+<@
+=@
+>@
+?@
+@#
+A@
+B@
+C@
+D@
+E@
+F@
+G@
+H@
+I@
+J@
+K@
+L@
+M@
+N@
+O@
+P@
+Q@
+R@
+S@
+T@
+U@
+V@
+W@
+X@
+Y@
+Z@
+[@
+\@
+]@
+^@
+_@
+`@
+a@
+b@
+c@
+d@
+e@
+f@
+g@
+h@
+i@
+j@
+k@
+l@
+m@
+n@
+o@
+p@
+q@
+r@
+s@
+t@
+u@
+v@
+w@
+x@
+y@
+z@
+{@
+|@
+}@
+~@
+Ä@
+Ö@
+Ü@
+ä@
+ö@
+ü@
+ß@
+128
+€@
+129
+@
+130
+‚@
+131
+ƒ@
+132
+„@
+133
+…@
+134
+†@
+135
+‡@
+136
+ˆ@
+137
+‰@
+138
+Š@
+139
+‹@
+140
+Œ@
+141
+@
+142
+Ž@
+143
+@
+144
+@
+145
+‘@
+146
+’@
+147
+“@
+148
+”@
+149
+•@
+150
+–@
+151
+—@
+152
+˜@
+153
+™@
+154
+š@
+155
+›@
+156
+œ@
+157
+@
+158
+ž@
+159
+Ÿ@
+160 NO-BREAK SPACE
+ @
+161 INVERTED EXCLAMATION MARK
+¡@
+162 CENT SIGN
+¢@
+163 POUND SIGN
+£@
+164 CURRENCY SIGN
+¤@
+165 YEN SIGN
+¥@
+166 BROKEN BAR
+¦@
+167 SECTION SIGN
+§@
+168 DIAERESIS
+¨@
+169 COPYRIGHT SIGN
+©@
+170 FEMININE ORDINAL INDICATOR
+ª@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+«@
+172 NOT SIGN
+¬@
+173 SOFT HYPHEN
+­@
+174 REGISTERED SIGN
+®@
+175 MACRON
+¯@
+176 DEGREE SIGN
+°@
+177 PLUS-MINUS SIGN
+±@
+178 SUPERSCRIPT TWO
+²@
+179 SUPERSCRIPT THREE
+³@
+180 ACUTE ACCENT
+´@
+181 MICRO SIGN
+µ@
+182 PILCROW SIGN
+¶@
+183 MIDDLE DOT
+·@
+184 CEDILLA
+¸@
+185 SUPERSCRIPT ONE
+¹@
+186 MASCULINE ORDINAL INDICATOR
+º@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+»@
+188 VULGAR FRACTION ONE QUARTER
+¼@
+189 VULGAR FRACTION ONE HALF
+½@
+190 VULGAR FRACTION THREE QUARTERS
+¾@
+191 INVERTED QUESTION MARK
+¿@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+À@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+Á@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+Â@
+195 LATIN CAPITAL LETTER A WITH TILDE
+Ã@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+Ä@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+Å@
+198 LATIN CAPITAL LETTER AE
+Æ@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+Ç@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+È@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+É@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+Ê@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+Ë@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+Ì@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+Í@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+Î@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+Ï@
+208 LATIN CAPITAL LETTER ETH
+Ð@
+209 LATIN CAPITAL LETTER N WITH TILDE
+Ñ@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+Ò@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+Ó@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+Ô@
+213 LATIN CAPITAL LETTER O WITH TILDE
+Õ@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+Ö@
+215 MULTIPLICATION SIGN
+×@
+216 LATIN CAPITAL LETTER O WITH STROKE
+Ø@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+Ù@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+Ú@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+Û@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+Ü@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+Ý@
+222 LATIN CAPITAL LETTER THORN
+Þ@
+223 LATIN SMALL LETTER SHARP S
+ß@
+224 LATIN SMALL LETTER A WITH GRAVE
+à@
+225 LATIN SMALL LETTER A WITH ACUTE
+á@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+â@
+227 LATIN SMALL LETTER A WITH TILDE
+ã@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ä@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+å@
+230 LATIN SMALL LETTER AE
+æ@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ç@
+232 LATIN SMALL LETTER E WITH GRAVE
+è@
+233 LATIN SMALL LETTER E WITH ACUTE
+é@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ê@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ë@
+236 LATIN SMALL LETTER I WITH GRAVE
+ì@
+237 LATIN SMALL LETTER I WITH ACUTE
+í@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+î@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ï@
+240 LATIN SMALL LETTER ETH
+ð@
+241 LATIN SMALL LETTER N WITH TILDE
+ñ@
+242 LATIN SMALL LETTER O WITH GRAVE
+ò@
+243 LATIN SMALL LETTER O WITH ACUTE
+ó@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ô@
+245 LATIN SMALL LETTER O WITH TILDE
+õ@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ö@
+247 DIVISION SIGN
+÷@
+248 LATIN SMALL LETTER O WITH STROKE
+ø@
+249 LATIN SMALL LETTER U WITH GRAVE
+ù@
+250 LATIN SMALL LETTER U WITH ACUTE
+ú@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+û@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ü@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ý@
+254 LATIN SMALL LETTER THORN
+þ@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ÿ@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+À@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+à@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+Ã@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+ã@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+¡@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+±@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+Æ@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+æ@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+Æ@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+æ@
+0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+Å@
+0x010B LATIN SMALL LETTER C WITH DOT ABOVE
+å@
+0x010C LATIN CAPITAL LETTER C WITH CARON
+È@
+0x010D LATIN SMALL LETTER C WITH CARON
+è@
+0x010E LATIN CAPITAL LETTER D WITH CARON
+Ï@
+0x010F LATIN SMALL LETTER D WITH CARON
+ï@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+Ð@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+ð@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+ª@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+º@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+Ì@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ì@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+Ê@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+ê@
+0x011A LATIN CAPITAL LETTER E WITH CARON
+Ì@
+0x011B LATIN SMALL LETTER E WITH CARON
+ì@
+0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+Ø@
+0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ø@
+0x011E LATIN CAPITAL LETTER G WITH BREVE
+«@
+0x011F LATIN SMALL LETTER G WITH BREVE
+»@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+Õ@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+õ@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+«@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+»@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+¦@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+¶@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+¡@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+±@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+¥@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+µ@
+0x012A LATIN CAPITAL LETTER I WITH MACRON
+Ï@
+0x012B LATIN SMALL LETTER I WITH MACRON
+ï@
+0x012E LATIN CAPITAL LETTER I WITH OGONEK
+Ç@
+0x012F LATIN SMALL LETTER I WITH OGONEK
+ç@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+©@
+0x0131 LATIN SMALL LETTER DOTLESS I
+¹@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+¬@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+¼@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+Ó@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+ó@
+0x0138 LATIN SMALL LETTER KRA
+¢@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+Å@
+0x013A LATIN SMALL LETTER L WITH ACUTE
+å@
+0x013B LATIN CAPITAL LETTER L WITH CEDILLA
+¦@
+0x013C LATIN SMALL LETTER L WITH CEDILLA
+¶@
+0x013D LATIN CAPITAL LETTER L WITH CARON
+¥@
+0x013E LATIN SMALL LETTER L WITH CARON
+µ@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+£@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+³@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+Ñ@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+ñ@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+Ñ@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+ñ@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+Ò@
+0x0148 LATIN SMALL LETTER N WITH CARON
+ò@
+0x014A LATIN CAPITAL LETTER ENG
+½@
+0x014B LATIN SMALL LETTER ENG
+¿@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+Ò@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ò@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+Õ@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+õ@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+À@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+à@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+£@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+³@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+Ø@
+0x0159 LATIN SMALL LETTER R WITH CARON
+ø@
+0x015A LATIN CAPITAL LETTER S WITH ACUTE
+¦@
+0x015B LATIN SMALL LETTER S WITH ACUTE
+¶@
+0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+Þ@
+0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+þ@
+0x015E LATIN CAPITAL LETTER S WITH CEDILLA
+ª@
+0x015F LATIN SMALL LETTER S WITH CEDILLA
+º@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+©@
+0x0161 LATIN SMALL LETTER S WITH CARON
+¹@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+Þ@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+þ@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+«@
+0x0165 LATIN SMALL LETTER T WITH CARON
+»@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+¬@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+¼@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+Ý@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+ý@
+0x016A LATIN CAPITAL LETTER U WITH MACRON
+Þ@
+0x016B LATIN SMALL LETTER U WITH MACRON
+þ@
+0x016C LATIN CAPITAL LETTER U WITH BREVE
+Ý@
+0x016D LATIN SMALL LETTER U WITH BREVE
+ý@
+0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
+Ù@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ù@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+Û@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+û@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+Ù@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+ù@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+¬@
+0x017A LATIN SMALL LETTER Z WITH ACUTE
+¼@
+0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+¯@
+0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
+¿@
+0x017D LATIN CAPITAL LETTER Z WITH CARON
+®@
+0x017E LATIN SMALL LETTER Z WITH CARON
+¾@
+0x02C7 CARON
+·@
+0x02D8 BREVE
+¢@
+0x02D9 DOT ABOVE
+ÿ@
+0x02DB OGONEK
+²@
+0x02DD DOUBLE ACUTE ACCENT
+½@
diff --git a/externals/figlet/fonts/upper.flc b/externals/figlet/fonts/upper.flc
new file mode 100644
index 0000000000..f383471764
--- /dev/null
+++ b/externals/figlet/fonts/upper.flc
@@ -0,0 +1,193 @@
+flc2a
+# Upper by Glenn Chappell <ggc@uiuc.edu> 1/94
+# Converts lower-case to upper-case.
+# Modified to support all of Unicode by John Cowan <cowan@ccil.org> 10/96
+# figlet release 2.2 -- November 1996
+#
+# This is a figlet controlfile.
+#
+# Explanation of first line:
+# flc2 - "magic number" for file identification
+# a - should always be `a', for now
+#
+# File body:
+# The first character of any line is the "command" for that line.
+# Possible figlet 2.1 commands are as follows:
+# `#' - comment, continues until end-of-line
+# `t' - translate, a not-so-fancy version of the Unix "tr" command
+# `f' - freeze, treat further lines as if they were in a new file
+#
+# The following lines convert lower-case to upper-case.
+#
+# Standard letters:
+t a-z A-Z
+#
+# figlet Deutsch characters (obsolete in 2.2 and later):
+t \-252-\-250 \-255-\-253
+#
+# ISO Latin-1 accented letters:
+t \224-\246 \192-\214
+t \248-\254 \216-\222
+# Note: Latin-1 has no upper-case Y umlaut, so map to "Y".
+# But remove the following line for Unicode fonts.
+t \255 Y
+# This is the proper Unicode mapping, and does no harm for non-Unicode fonts.
+t \255 \0x0178
+# Latin Extended A (Latin-2,3,4,5) accented letters:
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0107 \0x0106
+t \0x0109 \0x0108
+t \0x010B \0x010A
+t \0x010D \0x010C
+t \0x010F \0x010E
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0117 \0x0116
+t \0x0119 \0x0118
+t \0x011B \0x011A
+t \0x011D \0x011C
+t \0x011F \0x011E
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0127 \0x0126
+t \0x0129 \0x0128
+t \0x012B \0x012A
+t \0x012D \0x012C
+t \0x012F \0x012E
+t \0x0131 I
+t \0x0133 \0x0132
+t \0x0135 \0x0134
+t \0x0137 \0x0136
+t \0x0138 K
+t \0x013A \0x0139
+t \0x013C \0x013B
+t \0x013E \0x013D
+t \0x0140 \0x013F
+t \0x0142 \0x0141
+t \0x0144 \0x0143
+t \0x0146 \0x0145
+t \0x0148 \0x0147
+t \0x0149 N
+t \0x014B \0x014A
+t \0x014D \0x014C
+t \0x014F \0x014E
+t \0x0151 \0x0150
+t \0x0153 \0x0152
+t \0x0155 \0x0154
+t \0x0157 \0x0156
+t \0x0159 \0x0158
+t \0x015B \0x015A
+t \0x015D \0x015C
+t \0x015F \0x015E
+t \0x0161 \0x0160
+t \0x0163 \0x0162
+t \0x0165 \0x0164
+t \0x0167 \0x0166
+t \0x0169 \0x0168
+t \0x016B \0x016A
+t \0x016D \0x016C
+t \0x016F \0x016E
+t \0x0171 \0x0170
+t \0x0173 \0x0172
+t \0x0175 \0x0174
+t \0x0177 \0x0176
+t \0x017A \0x0179
+t \0x017C \0x017B
+t \0x017E \0x017D
+t \0x017F S
+# Greek letters:
+\0x037A \0x0399
+\0x0390 \0x0399
+\0x03AC \0x0386
+\0x03AD \0x0388
+\0x03AE \0x0389
+\0x03AF \0x038A
+\0x03B0 \0x03AB
+\0x03B1-\0x03C1 \0x0391-\0x03A1
+\0x03C2 \0x03A3
+\0x03C3-\0x03CB \0x03A3-\0x03AB
+\0x03CC \0x038C
+\0x03CD \0x038E
+\0x03CE \0x038F
+\0x03E3 \0x03E2
+\0x03E5 \0x03E4
+\0x03E7 \0x03E6
+\0x03E9 \0x03E8
+\0x03EB \0x03EA
+\0x03ED \0x03EC
+\0x03EF \0x03ED
+# Cyrillic letters:
+\0x0430-\0x044F \0x0410-\0x042F
+\0x0451-\0x045F \0x0401-\0x040F
+\0x0461 \0x0460
+\0x0463 \0x0461
+\0x0465 \0x0464
+\0x0467 \0x0466
+\0x0469 \0x0468
+\0x046B \0x046A
+\0x046D \0x046C
+\0x046F \0x046E
+\0x0471 \0x0470
+\0x0473 \0x0471
+\0x0475 \0x0474
+\0x0477 \0x0476
+\0x0479 \0x0478
+\0x047B \0x047A
+\0x047D \0x047C
+\0x047F \0x047E
+\0x0481 \0x0480
+\0x0491 \0x0490
+\0x0493 \0x0491
+\0x0495 \0x0494
+\0x0497 \0x0496
+\0x0499 \0x0498
+\0x049B \0x049A
+\0x049D \0x049C
+\0x049F \0x049E
+\0x04A1 \0x04A0
+\0x04A3 \0x04A1
+\0x04A5 \0x04A4
+\0x04A7 \0x04A6
+\0x04A9 \0x04A8
+\0x04AB \0x04AA
+\0x04AD \0x04AC
+\0x04AF \0x04AE
+\0x04B1 \0x04B0
+\0x04B3 \0x04B1
+\0x04B5 \0x04B4
+\0x04B7 \0x04B6
+\0x04B9 \0x04B8
+\0x04BB \0x04BA
+\0x04BD \0x04BC
+\0x04BF \0x04BE
+\0x04C2 \0x04C1
+\0x04C4 \0x04C3
+\0x04C8 \0x04C7
+\0x04CC \0x04CB
+\0x04D1 \0x04D0
+\0x04D3 \0x04D2
+\0x04D5 \0x04D4
+\0x04D7 \0x04D6
+\0x04D9 \0x04D8
+\0x04DB \0x04DA
+\0x04DD \0x04DC
+\0x04DF \0x04DE
+\0x04E1 \0x04E0
+\0x04E3 \0x04E2
+\0x04E5 \0x04E4
+\0x04E7 \0x04E6
+\0x04E9 \0x04E8
+\0x04EB \0x04EA
+\0x04ED \0x04EC
+\0x04EF \0x04EE
+\0x04F1 \0x04F0
+\0x04F3 \0x04F2
+\0x04F5 \0x04F4
+\0x04F7 \0x04F6
+\0x04F9 \0x04F8
+# Armenian letters:
+\0x0561-\0x0586 \0x0531-\0x0556
diff --git a/externals/figlet/fonts/ushebrew.flc b/externals/figlet/fonts/ushebrew.flc
new file mode 100644
index 0000000000..313af84b5b
--- /dev/null
+++ b/externals/figlet/fonts/ushebrew.flc
@@ -0,0 +1,33 @@
+flc2a
+# implements a natural mapping from the U.S. keyboard
+# to Hebrew characters in the Ivrit font.
+# Note that capital letters remain unchanged.
+
+t a \0x05d0
+t b \0x05d1
+t g \0x05d2
+t d \0x05d3
+t h \0x05d4
+t v \0x05d5
+t z \0x05d6
+t c \0x05d7
+t t \0x05d8
+t y \0x05d9
+t k \0x05db
+t f \0x05da
+t l \0x05dc
+t m \0x05de
+t o \0x05dd
+t n \0x05e0
+t i \0x05df
+t e \0x05e1
+t _ \0x05e2
+t p \0x05e4
+t u \0x05e3
+t j \0x05e6
+t w \0x05e5
+t q \0x05e7
+t r \0x05e8
+t s \0x05e9
+t x \0x05ea
+t ~ \-3
diff --git a/externals/figlet/fonts/uskata.flc b/externals/figlet/fonts/uskata.flc
new file mode 100644
index 0000000000..62e559f4be
--- /dev/null
+++ b/externals/figlet/fonts/uskata.flc
@@ -0,0 +1,53 @@
+flc2a
+# Maps the upper and lower case alphabet (A-Z and a-v) into the
+# 48 basic katakana Unicodes. Can be used with any Unicode katakana
+# font, such as Banner.
+t A \0x30A2
+t B \0x30A4
+t C \0x30A6
+t D \0x30A8
+t E \0x30AA
+t F \0x30AB
+t G \0x30AD
+t H \0x30AF
+t I \0x30B1
+t J \0x30B3
+t K \0x30B5
+t L \0x30B7
+t M \0x30B9
+t N \0x30BB
+t O \0x30BD
+t P \0x30BF
+t Q \0x30C1
+t R \0x30C4
+t S \0x30C6
+t T \0x30C8
+t U \0x30CA
+t V \0x30CB
+t W \0x30CC
+t X \0x30CD
+t Y \0x30CE
+t Z \0x30CF
+t a \0x30D2
+t b \0x30D5
+t c \0x30D8
+t d \0x30DB
+t e \0x30DE
+t f \0x30DF
+t g \0x30E0
+t h \0x30E1
+t i \0x30E2
+t j \0x30E4
+t k \0x30E6
+t l \0x30E8
+t m \0x30F1
+t n \0x30E9
+t o \0x30EA
+t p \0x30EB
+t q \0x30EC
+t r \0x30ED
+t s \0x30EF
+t t \0x30F0
+t u \0x30F2
+t v \0x30F3
+t ~ \-4
diff --git a/externals/figlet/fonts/utf8.flc b/externals/figlet/fonts/utf8.flc
new file mode 100644
index 0000000000..532986d7c6
--- /dev/null
+++ b/externals/figlet/fonts/utf8.flc
@@ -0,0 +1,4 @@
+flc2a
+# Set UTF-8 input mode (an 8-bit encoding of Unicode that preserves ASCII)
+# Meaningful only to FIGlet 2.2 beta 4 or better
+u
diff --git a/externals/figlet/getopt.c b/externals/figlet/getopt.c
new file mode 100644
index 0000000000..421899152c
--- /dev/null
+++ b/externals/figlet/getopt.c
@@ -0,0 +1,104 @@
+/*
+ * * @(#)getopt.c 2.3 (smail) 5/30/87
+ */
+
+/*
+ * Here's something you've all been waiting for: the AT&T public domain
+ * source for getopt(3). It is the code which was given out at the 1985
+ * UNIFORUM conference in Dallas. I obtained it by electronic mail directly
+ * from AT&T. The people there assure me that it is indeed in the public
+ * domain.
+ *
+ * There is no manual page. That is because the one they gave out at UNIFORUM
+ * was slightly different from the current System V Release 2 manual page.
+ * The difference apparently involved a note about the famous rules 5 and 6,
+ * recommending using white space between an option and its first argument,
+ * and not grouping options that have arguments. Getopt itself is currently
+ * lenient about both of these things White space is allowed, but not
+ * mandatory, and the last option in a group can have an argument. That
+ * particular version of the man page evidently has no official existence,
+ * and my source at AT&T did not send a copy. The current SVR2 man page
+ * reflects the actual behavior of this getopt. However, I am not about to
+ * post a copy of anything licensed by AT&T.
+ */
+
+#ifdef BSD
+ #include <strings.h>
+#else
+ #define index strchr
+ #include <string.h>
+#endif
+
+/* LINTLIBRARY */
+#ifndef NULL
+#define NULL 0
+#endif
+
+#define EOF (-1)
+#define ERR(s, c) if(opterr){\
+ extern int write(int, void *, unsigned);\
+ char errbuf[2];\
+ errbuf[0] = (char)c; errbuf[1] = '\n';\
+ (void) write(2, strlwr(argv[0]), (unsigned)strlen(argv[0]));\
+ (void) write(2, s, (unsigned)strlen(s));\
+ (void) write(2, errbuf, 2);}
+
+extern char *index();
+
+int opterr = 1;
+int optind = 1;
+int optopt;
+char *optarg;
+
+int getopt(int argc, char *argv[], char *opts)
+{
+ static int sp = 1;
+ register int c;
+ register char *cp;
+
+ if (sp == 1)
+ {
+ if (optind >= argc || argv[optind][0] != '-' ||
+ argv[optind][1] == '\0')
+ return (EOF);
+ else if (strcmp(argv[optind], "--") == 0)
+ {
+ optind++;
+ return (EOF);
+ }
+ }
+ optopt = c = argv[optind][sp];
+ if (c == ':' || (cp = index(opts, c)) == NULL)
+ {
+ ERR(": illegal option -- ", c);
+ if (argv[optind][++sp] == '\0')
+ {
+ optind++;
+ sp = 1;
+ }
+ return ('?');
+ }
+ if (*++cp == ':')
+ {
+ if (argv[optind][sp + 1] != '\0')
+ optarg = &argv[optind++][sp + 1];
+ else if (++optind >= argc)
+ {
+ ERR(": option requires an argument -- ", c);
+ sp = 1;
+ return ('?');
+ }
+ else optarg = argv[optind++];
+ sp = 1;
+ }
+ else
+ {
+ if (argv[optind][++sp] == '\0')
+ {
+ sp = 1;
+ optind++;
+ }
+ optarg = NULL;
+ }
+ return (c);
+}
diff --git a/externals/figlet/inflate.c b/externals/figlet/inflate.c
new file mode 100644
index 0000000000..06cef443b6
--- /dev/null
+++ b/externals/figlet/inflate.c
@@ -0,0 +1,1321 @@
+/*
+ * inflate.c - inflate decompression routine
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * inflate.c is based on the public-domain (non-copyrighted) version
+ * written by Mark Adler, version c14o, 23 August 1994. It has been
+ * modified to be reentrant, more portable, and to be data driven.
+ */
+
+/*
+ * 1) All file i/o is done externally to these routines
+ * 2) Routines are symmetrical so inflate can feed into deflate
+ * 3) Routines can be easily integrated into wide range of applications
+ * 4) Routines are very portable, and use only ANSI C
+ * 5) No #defines in inflate.h to conflict with external #defines
+ * 6) No external routines need be called by these routines
+ * 7) Buffers are owned by the calling routine
+ * 8) No static non-constant variables are allowed
+ */
+
+/*
+ * Note that for each call to InflatePutBuffer, there will be
+ * 0 or more calls to (*putbuffer_ptr). Before InflatePutBuffer
+ * returns, it will have output as much uncompressed data as
+ * is possible.
+ */
+
+#ifdef MEMCPY
+#include <mem.h>
+#endif
+
+#include "inflate.h"
+
+/*
+ * Macros for constants
+ */
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef WINDOWSIZE
+#define WINDOWSIZE 0x8000
+#endif
+
+#ifndef WINDOWMASK
+#define WINDOWMASK 0x7fff
+#endif
+
+#ifndef BUFFERSIZE
+#define BUFFERSIZE 0x4000
+#endif
+
+#ifndef BUFFERMASK
+#define BUFFERMASK 0x3fff
+#endif
+
+#ifndef INFLATESTATETYPE
+#define INFLATESTATETYPE 0xabcdabcdL
+#endif
+
+/*
+ * typedefs
+ */
+
+typedef unsigned long ulg;
+typedef unsigned short ush;
+typedef unsigned char uch;
+
+/* Structure to hold state for inflating zip files */
+struct InflateState {
+
+ unsigned long runtimetypeid1; /* to detect run-time errors */
+ int errorencountered; /* error encountered flag */
+
+ /* Decoding state */
+ int state; /* -1 -> need block type */
+ /* 0 -> need stored setup */
+ /* 1 -> need fixed setup */
+ /* 2 -> need dynamic setup */
+ /* 10 -> need stored data */
+ /* 11 -> need fixed data */
+ /* 12 -> need dynamic data */
+
+/* State for decoding fixed & dynamic data */
+ struct huft *tl; /* literal/length decoder tbl */
+ struct huft *td; /* distance decoder table */
+ int bl; /* bits decoded by tl */
+ int bd; /* bits decoded by td */
+
+ /* State for decoding stored data */
+ unsigned int storelength;
+
+ /* State to keep track that last block has been encountered */
+ int lastblock; /* current block is last */
+
+ /* Input buffer state (circular) */
+ ulg bb; /* input buffer bits */
+ unsigned int bk; /* input buffer count of bits */
+ unsigned int bp; /* input buffer pointer */
+ unsigned int bs; /* input buffer size */
+ unsigned char buffer[BUFFERSIZE]; /* input buffer data */
+
+ /* Storage for try/catch */
+ ulg catch_bb; /* bit buffer */
+ unsigned int catch_bk; /* bits in bit buffer */
+ unsigned int catch_bp; /* buffer pointer */
+ unsigned int catch_bs; /* buffer size */
+
+ /* Output window state (circular) */
+ unsigned int wp; /* output window pointer */
+ unsigned int wf; /* output window flush-from */
+ unsigned char window[WINDOWSIZE]; /* output window data */
+
+ /* Application state */
+ void *AppState; /* opaque ptr for callout */
+
+ /* pointers to call-outs */
+ int (*putbuffer_ptr)( /* returns 0 on success */
+ void *AppState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+ );
+
+ void *(*malloc_ptr)(long length); /* utility routine */
+
+ void (*free_ptr)(void *buffer); /* utility routine */
+
+ unsigned long runtimetypeid2; /* to detect run-time errors */
+};
+
+/*
+ * Error handling macro
+ */
+
+#define ERROREXIT(is) {(is)->errorencountered = TRUE; return TRUE;}
+
+/*
+ * Macros for handling data in the input buffer
+ *
+ * Note that the NEEDBITS and DUMPBITS macros
+ * need to be bracketed by the TRY/CATCH macros
+ *
+ * The usage is:
+ *
+ * TRY
+ * {
+ * NEEDBITS(j)
+ * x = b & mask_bits[j];
+ * DUMPBITS(j)
+ * }
+ * CATCH_BEGIN
+ * cleanup code
+ * CATCH_END
+ *
+ * Note that there can only be one TRY/CATCH pair per routine
+ * because of the use of goto in the implementation of the macros.
+ *
+ * NEEDBITS makes sure that b has at least j bits in it, and
+ * DUMPBITS removes the bits from b. The macros use the variable k
+ * for the number of bits in b. Normally, b and k are register
+ * variables for speed, and are initialized at the beginning of a
+ * routine that uses these macros from a global bit buffer and count.
+ *
+ * In order to not ask for more bits than there are in the compressed
+ * stream, the Huffman tables are constructed to only ask for just
+ * enough bits to make up the end-of-block code (value 256). Then no
+ * bytes need to be "returned" to the buffer at the end of the last
+ * block. See the huft_build() routine.
+ */
+
+#define TRY \
+ is->catch_bb = b; \
+ is->catch_bk = k; \
+ is->catch_bp = is->bp; \
+ is->catch_bs = is->bs;
+
+#define CATCH_BEGIN \
+ goto cleanup_done; \
+ cleanup: \
+ b = is->catch_bb; \
+ k = is->catch_bk; \
+ is->bb = b; \
+ is->bk = k; \
+ is->bp = is->catch_bp; \
+ is->bs = is->catch_bs;
+
+#define CATCH_END \
+ cleanup_done: ;
+
+#define NEEDBITS(n) \
+{ \
+ while (k < (n)) \
+ { \
+ if (is->bs <= 0) \
+ { \
+ goto cleanup; \
+ } \
+ b |= ((ulg) (is->buffer[is->bp & BUFFERMASK])) << k; \
+ is->bs--; \
+ is->bp++; \
+ k += 8; \
+ } \
+}
+
+#define DUMPBITS(n) \
+{ \
+ b >>= (n); \
+ k -= (n); \
+}
+
+/*
+ * Macro for flushing the output window to the putbuffer callout.
+ *
+ * Note that the window is always flushed when it fills to 32K,
+ * and before returning to the application.
+ */
+
+#define FLUSHWINDOW(w, now) \
+if ((now && (is->wp > is->wf)) || ((w) >= WINDOWSIZE)) \
+{ \
+ is->wp = (w); \
+ if ((*(is->putbuffer_ptr)) \
+ (is->AppState, is->window+is->wf, is->wp-is->wf)) \
+ ERROREXIT(is); \
+ is->wp &= WINDOWMASK; \
+ is->wf = is->wp; \
+ (w) = is->wp; \
+}
+
+/*
+ * Inflate deflated (PKZIP's method 8 compressed) data. The compression
+ * method searches for as much of the current string of bytes (up to a
+ * length of 258) in the previous 32K bytes. If it doesn't find any
+ * matches (of at least length 3), it codes the next byte. Otherwise, it
+ * codes the length of the matched string and its distance backwards from
+ * the current position. There is a single Huffman code that codes both
+ * single bytes (called "literals") and match lengths. A second Huffman
+ * code codes the distance information, which follows a length code. Each
+ * length or distance code actually represents a base value and a number
+ * of "extra" (sometimes zero) bits to get to add to the base value. At
+ * the end of each deflated block is a special end-of-block (EOB) literal/
+ * length code. The decoding process is basically: get a literal/length
+ * code; if EOB then done; if a literal, emit the decoded byte; if a
+ * length then get the distance and emit the referred-to bytes from the
+ * sliding window of previously emitted data.
+ *
+ * There are (currently) three kinds of inflate blocks: stored, fixed, and
+ * dynamic. The compressor outputs a chunk of data at a time and decides
+ * which method to use on a chunk-by-chunk basis. A chunk might typically
+ * be 32K to 64K, uncompressed. If the chunk is uncompressible, then the
+ * "stored" method is used. In this case, the bytes are simply stored as
+ * is, eight bits per byte, with none of the above coding. The bytes are
+ * preceded by a count, since there is no longer an EOB code.
+ *
+ * If the data is compressible, then either the fixed or dynamic methods
+ * are used. In the dynamic method, the compressed data is preceded by
+ * an encoding of the literal/length and distance Huffman codes that are
+ * to be used to decode this block. The representation is itself Huffman
+ * coded, and so is preceded by a description of that code. These code
+ * descriptions take up a little space, and so for small blocks, there is
+ * a predefined set of codes, called the fixed codes. The fixed method is
+ * used if the block ends up smaller that way (usually for quite small
+ * chunks); otherwise the dynamic method is used. In the latter case, the
+ * codes are customized to the probabilities in the current block and so
+ * can code it much better than the pre-determined fixed codes can.
+ *
+ * The Huffman codes themselves are decoded using a mutli-level table
+ * lookup, in order to maximize the speed of decoding plus the speed of
+ * building the decoding tables. See the comments below that precede the
+ * lbits and dbits tuning parameters.
+ */
+
+/*
+ * Notes beyond the 1.93a appnote.txt:
+ *
+ * 1. Distance pointers never point before the beginning of the output
+ * stream.
+ * 2. Distance pointers can point back across blocks, up to 32k away.
+ * 3. There is an implied maximum of 7 bits for the bit length table and
+ * 15 bits for the actual data.
+ * 4. If only one code exists, then it is encoded using one bit. (Zero
+ * would be more efficient, but perhaps a little confusing.) If two
+ * codes exist, they are coded using one bit each (0 and 1).
+ * 5. There is no way of sending zero distance codes--a dummy must be
+ * sent if there are none. (History: a pre 2.0 version of PKZIP would
+ * store blocks with no distance codes, but this was discovered to be
+ * too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
+ * zero distance codes, which is sent as one code of zero bits in
+ * length.
+ * 6. There are up to 286 literal/length codes. Code 256 represents the
+ * end-of-block. Note however that the static length tree defines
+ * 288 codes just to fill out the Huffman codes. Codes 286 and 287
+ * cannot be used though, since there is no length base or extra bits
+ * defined for them. Similarly, there are up to 30 distance codes.
+ * However, static trees define 32 codes (all 5 bits) to fill out the
+ * Huffman codes, but the last two had better not show up in the data.
+ * 7. Unzip can check dynamic Huffman blocks for complete code sets.
+ * The exception is that a single code would not be complete (see #4).
+ * 8. The five bits following the block type is really the number of
+ * literal codes sent minus 257.
+ * 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
+ * (1+6+6). Therefore, to output three times the length, you output
+ * three codes (1+1+1), whereas to output four times the same length,
+ * you only need two codes (1+3). Hmm.
+ *10. In the tree reconstruction algorithm, Code = Code + Increment
+ * only if BitLength(i) is not zero. (Pretty obvious.)
+ *11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
+ *12. Note: length code 284 can represent 227-258, but length code 285
+ * really is 258. The last length deserves its own, short code
+ * since it gets used a lot in very redundant files. The length
+ * 258 is special since 258 - 3 (the min match length) is 255.
+ *13. The literal/length and distance code bit lengths are read as a
+ * single stream of lengths. It is possible (and advantageous) for
+ * a repeat code (16, 17, or 18) to go across the boundary between
+ * the two sets of lengths.
+ */
+
+/*
+ * Huffman code lookup table entry--this entry is four bytes for machines
+ * that have 16-bit pointers (e.g. PC's in the small or medium model).
+ * Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16
+ * means that v is a literal, 16 < e < 32 means that v is a pointer to
+ * the next table, which codes e - 16 bits, and lastly e == 99 indicates
+ * an unused code. If a code with e == 99 is looked up, this implies an
+ * error in the data.
+ */
+
+struct huft {
+ uch e; /* number of extra bits or operation */
+ uch b; /* number of bits in this code or subcode */
+ union {
+ ush n; /* literal, length base, or distance base */
+ struct huft *t; /* pointer to next level of table */
+ } v;
+};
+
+/*
+ * Tables for deflate from PKZIP's appnote.txt.
+ */
+
+static const unsigned border[] = { /* Order of the bit length code lengths */
+ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+static const ush cplens[] = { /* Copy lengths for literal codes 257..285 */
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+ /* note: see note #13 above about the 258 in this list. */
+
+static const ush cplext[] = { /* Extra bits for literal codes 257..285 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
+ 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */
+
+static const ush cpdist[] = { /* Copy offsets for distance codes 0..29 */
+ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+ 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+ 8193, 12289, 16385, 24577};
+
+static const ush cpdext[] = { /* Extra bits for distance codes */
+ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
+ 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
+ 12, 12, 13, 13};
+
+/*
+ * Constants for run-time computation of mask
+ */
+
+static const ush mask_bits[] = {
+ 0x0000,
+ 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
+ 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
+};
+
+/*
+ * Huffman code decoding is performed using a multi-level table lookup.
+ * The fastest way to decode is to simply build a lookup table whose
+ * size is determined by the longest code. However, the time it takes
+ * to build this table can also be a factor if the data being decoded
+ * is not very long. The most common codes are necessarily the
+ * shortest codes, so those codes dominate the decoding time, and hence
+ * the speed. The idea is you can have a shorter table that decodes the
+ * shorter, more probable codes, and then point to subsidiary tables for
+ * the longer codes. The time it costs to decode the longer codes is
+ * then traded against the time it takes to make longer tables.
+ *
+ * This results of this trade are in the variables lbits and dbits
+ * below. lbits is the number of bits the first level table for literal/
+ * length codes can decode in one step, and dbits is the same thing for
+ * the distance codes. Subsequent tables are also less than or equal to
+ * those sizes. These values may be adjusted either when all of the
+ * codes are shorter than that, in which case the longest code length in
+ * bits is used, or when the shortest code is *longer* than the requested
+ * table size, in which case the length of the shortest code in bits is
+ * used.
+ *
+ * There are two different values for the two tables, since they code a
+ * different number of possibilities each. The literal/length table
+ * codes 286 possible values, or in a flat code, a little over eight
+ * bits. The distance table codes 30 possible values, or a little less
+ * than five bits, flat. The optimum values for speed end up being
+ * about one bit more than those, so lbits is 8+1 and dbits is 5+1.
+ * The optimum values may differ though from machine to machine, and
+ * possibly even between compilers. Your mileage may vary.
+ */
+
+static const int lbits = 9; /* bits in base literal/length lookup table */
+static const int dbits = 6; /* bits in base distance lookup table */
+
+/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
+#define BMAX 16 /* maximum bit length of any code (16 for explode) */
+#define N_MAX 288 /* maximum number of codes in any set */
+
+/*
+ * Free the malloc'ed tables built by huft_build(), which makes a linked
+ * list of the tables it made, with the links in a dummy first entry of
+ * each table.
+ */
+
+static int huft_free(
+ struct InflateState *is, /* Inflate state */
+ struct huft *t /* table to free */
+)
+{
+ struct huft *p, *q;
+
+ /* Go through linked list, freeing from the malloced (t[-1]) address. */
+ p = t;
+ while (p != (struct huft *)NULL)
+ {
+ q = (--p)->v.t;
+ (*is->free_ptr)((char*)p);
+ p = q;
+ }
+ return 0;
+}
+
+/*
+ * Given a list of code lengths and a maximum table size, make a set of
+ * tables to decode that set of codes. Return zero on success, one if
+ * the given code set is incomplete (the tables are still built in this
+ * case), two if the input is invalid (all zero length codes or an
+ * oversubscribed set of lengths), and three if not enough memory.
+ * The code with value 256 is special, and the tables are constructed
+ * so that no bits beyond that code are fetched when that code is
+ * decoded.
+ */
+
+static int huft_build(
+ struct InflateState *is, /* Inflate state */
+ unsigned *b, /* code lengths in bits (all assumed <= BMAX) */
+ unsigned n, /* number of codes (assumed <= N_MAX) */
+ unsigned s, /* number of simple-valued codes (0..s-1) */
+ const ush *d, /* list of base values for non-simple codes */
+ const ush *e, /* list of extra bits for non-simple codes */
+ struct huft **t, /* result: starting table */
+ int *m /* maximum lookup bits, returns actual */
+)
+{
+ unsigned a; /* counter for codes of length k */
+ unsigned c[BMAX+1]; /* bit length count table */
+ unsigned el; /* length of EOB code (value 256) */
+ unsigned f; /* i repeats in table every f entries */
+ int g; /* maximum code length */
+ int h; /* table level */
+ unsigned i; /* counter, current code */
+ unsigned j; /* counter */
+ int k; /* number of bits in current code */
+ int lx[BMAX+1]; /* memory for l[-1..BMAX-1] */
+ int *l = lx+1; /* stack of bits per table */
+ unsigned *p; /* pointer into c[], b[], or v[] */
+ struct huft *q; /* points to current table */
+ struct huft r; /* table entry for structure assignment */
+ struct huft *u[BMAX]; /* table stack */
+ unsigned v[N_MAX]; /* values in order of bit length */
+ int w; /* bits before this table == (l * h) */
+ unsigned x[BMAX+1]; /* bit offsets, then code stack */
+ unsigned *xp; /* pointer into x */
+ int y; /* number of dummy codes added */
+ unsigned z; /* number of entries in current table */
+
+ /* clear the bit length count table */
+ for (i=0; i<(BMAX+1); i++)
+ {
+ c[i] = 0;
+ }
+
+ /* Generate counts for each bit length */
+ el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */
+ p = b; i = n;
+ do {
+ c[*p]++; p++; /* assume all entries <= BMAX */
+ } while (--i);
+ if (c[0] == n) /* null input--all zero length codes */
+ {
+ *t = (struct huft *)NULL;
+ *m = 0;
+ return 0;
+ }
+
+ /* Find minimum and maximum length, bound *m by those */
+ for (j = 1; j <= BMAX; j++)
+ if (c[j])
+ break;
+ k = j; /* minimum code length */
+ if ((unsigned)*m < j)
+ *m = j;
+ for (i = BMAX; i; i--)
+ if (c[i])
+ break;
+ g = i; /* maximum code length */
+ if ((unsigned)*m > i)
+ *m = i;
+
+ /* Adjust last length count to fill out codes, if needed */
+ for (y = 1 << j; j < i; j++, y <<= 1)
+ if ((y -= c[j]) < 0)
+ return 2; /* bad input: more codes than bits */
+ if ((y -= c[i]) < 0)
+ return 2;
+ c[i] += y;
+
+ /* Generate starting offsets into the value table for each length */
+ x[1] = j = 0;
+ p = c + 1; xp = x + 2;
+ while (--i) { /* note that i == g from above */
+ *xp++ = (j += *p++);
+ }
+
+ /* Make a table of values in order of bit lengths */
+ p = b; i = 0;
+ do {
+ if ((j = *p++) != 0)
+ v[x[j]++] = i;
+ } while (++i < n);
+
+ /* Generate the Huffman codes and for each, make the table entries */
+ x[0] = i = 0; /* first Huffman code is zero */
+ p = v; /* grab values in bit order */
+ h = -1; /* no tables yet--level -1 */
+ w = l[-1] = 0; /* no bits decoded yet */
+ u[0] = (struct huft *)NULL; /* just to keep compilers happy */
+ q = (struct huft *)NULL; /* ditto */
+ z = 0; /* ditto */
+
+ /* go through the bit lengths (k already is bits in shortest code) */
+ for (; k <= g; k++)
+ {
+ a = c[k];
+ while (a--)
+ {
+ /* here i is the Huffman code of length k bits for value *p */
+ /* make tables up to required level */
+ while (k > w + l[h])
+ {
+ w += l[h++]; /* add bits already decoded */
+
+ /* compute minimum size table less than or equal to *m bits */
+ z = (z = g - w) > (unsigned)*m ? *m : z; /* upper limit */
+ if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
+ { /* too few codes for k-w bit table */
+ f -= a + 1; /* deduct codes from patterns left */
+ xp = c + k;
+ while (++j < z) /* try smaller tables up to z bits */
+ {
+ if ((f <<= 1) <= *++xp)
+ break; /* enough codes to use up j bits */
+ f -= *xp; /* else deduct codes from patterns */
+ }
+ }
+ if ((unsigned)w + j > el && (unsigned)w < el)
+ j = el - w; /* make EOB code end at table */
+ z = 1 << j; /* table entries for j-bit table */
+ l[h] = j; /* set table size in stack */
+
+ /* allocate and link in new table */
+ if ((q = (struct huft *)
+ ((*is->malloc_ptr)((z + 1)*sizeof(struct huft)))) ==
+ (struct huft *)NULL)
+ {
+ if (h)
+ huft_free(is, u[0]);
+ return 3; /* not enough memory */
+ }
+ *t = q + 1; /* link to list for huft_free() */
+ *(t = &(q->v.t)) = (struct huft *)NULL;
+ u[h] = ++q; /* table starts after link */
+
+ /* connect to last table, if there is one */
+ if (h)
+ {
+ x[h] = i; /* save pattern for backing up */
+ r.b = (uch)l[h-1]; /* bits to dump before this table */
+ r.e = (uch)(16 + j); /* bits in this table */
+ r.v.t = q; /* pointer to this table */
+ j = (i & ((1 << w) - 1)) >> (w - l[h-1]);
+ u[h-1][j] = r; /* connect to last table */
+ }
+ }
+
+ /* set up table entry in r */
+ r.b = (uch)(k - w);
+ if (p >= v + n)
+ r.e = 99; /* out of values--invalid code */
+ else if (*p < s)
+ {
+ r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */
+ r.v.n = (ush) *p++; /* simple code is just the value */
+ }
+ else
+ {
+ r.e = (uch)e[*p - s]; /* non-simple--look up in lists */
+ r.v.n = d[*p++ - s];
+ }
+
+ /* fill code-like entries with r */
+ f = 1 << (k - w);
+ for (j = i >> w; j < z; j += f)
+ q[j] = r;
+
+ /* backwards increment the k-bit code i */
+ for (j = 1 << (k - 1); i & j; j >>= 1)
+ i ^= j;
+ i ^= j;
+
+ /* backup over finished tables */
+ while ((i & ((1 << w) - 1)) != x[h])
+ w -= l[--h]; /* don't need to update q */
+ }
+ }
+
+ /* return actual size of base table */
+ *m = l[0];
+
+ /* Return true (1) if we were given an incomplete table */
+ return y != 0 && g != 1;
+}
+
+/*
+ * inflate (decompress) the codes in a stored (uncompressed) block.
+ * Return an error code or zero if it all goes ok.
+ */
+
+static int inflate_stored(
+ struct InflateState *is /* Inflate state */
+)
+{
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+ unsigned w; /* current window position */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+ w = is->wp; /* initialize window position */
+
+ /*
+ * Note that this code knows that NEEDBITS jumps to cleanup
+ */
+
+ while (is->storelength > 0) /* do until end of block */
+ {
+ NEEDBITS(8)
+ is->window[w++] = (uch) b;
+ DUMPBITS(8)
+ FLUSHWINDOW(w, FALSE);
+ is->storelength--;
+ }
+
+ cleanup:
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+ is->wp = w; /* restore window pointer */
+
+ if (is->storelength > 0)
+ return -1;
+ else
+ return 0;
+}
+
+static int inflate_codes(
+ struct InflateState *is, /* Inflate state */
+ struct huft *tl, /* literal/length decoder table */
+ struct huft *td, /* distance decoder table */
+ int bl, /* number of bits decoded by tl[] */
+ int bd /* number of bits decoded by td[] */
+)
+{
+ unsigned e; /* table entry flag/number of extra bits */
+ unsigned n, d; /* length and index for copy */
+ unsigned w; /* current window position */
+ struct huft *t; /* pointer to table entry */
+ unsigned ml, md; /* masks for bl and bd bits */
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+ w = is->wp; /* initialize window position */
+
+ /* inflate the coded data */
+ ml = mask_bits[bl]; /* precompute masks for speed */
+ md = mask_bits[bd];
+ for (;;) /* do until end of block */
+ {
+ TRY
+ {
+ NEEDBITS((unsigned)bl)
+ if ((e = (t = tl + ((unsigned)b & ml))->e) > 16)
+ do {
+ if (e == 99)
+ return 1;
+ DUMPBITS(t->b)
+ e -= 16;
+ NEEDBITS(e)
+ } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
+ DUMPBITS(t->b)
+
+ if (e == 16) /* it's a literal */
+ {
+ is->window[w++] = (uch)t->v.n;
+ FLUSHWINDOW(w, FALSE);
+ }
+ else if (e == 15) /* it's an EOB */
+ {
+ break;
+ }
+ else /* it's a length */
+ {
+ /* get length of block to copy */
+ NEEDBITS(e)
+ n = t->v.n + ((unsigned)b & mask_bits[e]);
+ DUMPBITS(e);
+
+ /* decode distance of block to copy */
+ NEEDBITS((unsigned)bd)
+ if ((e = (t = td + ((unsigned)b & md))->e) > 16)
+ do {
+ if (e == 99)
+ return 1;
+ DUMPBITS(t->b)
+ e -= 16;
+ NEEDBITS(e)
+ } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
+ DUMPBITS(t->b)
+ NEEDBITS(e)
+ d = w - t->v.n - ((unsigned)b & mask_bits[e]);
+ DUMPBITS(e)
+
+ /* do the copy */
+ do {
+ n -= (e = ((e = WINDOWSIZE - ((d &= WINDOWMASK) > w ? d : w)) > n)
+ ? n : e
+ );
+#if defined(MEMCPY)
+ if (w - d >= e) /* (this test assumes unsigned comparison) */
+ {
+ memcpy(is->window + w, is->window + d, e);
+ w += e;
+ d += e;
+ }
+ else /* do it slow to avoid memcpy() overlap */
+#endif /* MEMCPY */
+ do {
+ is->window[w++] = is->window[d++];
+ } while (--e);
+ FLUSHWINDOW(w, FALSE);
+ } while (n);
+ }
+ }
+ CATCH_BEGIN
+ is->wp = w; /* restore window pointer */
+ return -1;
+ CATCH_END
+ }
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+ is->wp = w; /* restore window pointer */
+
+ /* done */
+ return 0;
+}
+
+/*
+ * "decompress" an inflated type 0 (stored) block.
+ */
+
+static int inflate_stored_setup(
+ struct InflateState *is /* Inflate state */
+)
+{
+ unsigned n; /* number of bytes in block */
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+
+ TRY
+ {
+ /* go to byte boundary */
+ n = k & 7;
+ DUMPBITS(n);
+
+ /* get the length and its complement */
+ NEEDBITS(16)
+ n = ((unsigned)b & 0xffff);
+ DUMPBITS(16)
+ NEEDBITS(16)
+ if (n != (unsigned)((~b) & 0xffff))
+ return 1; /* error in compressed data */
+ DUMPBITS(16)
+ }
+ CATCH_BEGIN
+ return -1;
+ CATCH_END
+
+ /* Save store state for this block */
+ is->storelength = n;
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+
+ return 0;
+}
+
+/*
+ * decompress an inflated type 1 (fixed Huffman codes) block. We should
+ * either replace this with a custom decoder, or at least precompute the
+ * Huffman tables.
+ */
+
+static int inflate_fixed_setup(
+ struct InflateState *is /* Inflate state */
+)
+{
+ int i; /* temporary variable */
+ struct huft *tl; /* literal/length code table */
+ struct huft *td; /* distance code table */
+ int bl; /* lookup bits for tl */
+ int bd; /* lookup bits for td */
+ unsigned l[288]; /* length list for huft_build */
+
+ /* set up literal table */
+ for (i = 0; i < 144; i++)
+ l[i] = 8;
+ for (; i < 256; i++)
+ l[i] = 9;
+ for (; i < 280; i++)
+ l[i] = 7;
+ for (; i < 288; i++) /* make a complete, but wrong code set */
+ l[i] = 8;
+ bl = 7;
+ if ((i = huft_build(is, l, 288, 257, cplens, cplext, &tl, &bl)) != 0)
+ return i;
+
+ /* set up distance table */
+ for (i = 0; i < 30; i++) /* make an incomplete code set */
+ l[i] = 5;
+ bd = 5;
+ if ((i = huft_build(is, l, 30, 0, cpdist, cpdext, &td, &bd)) > 1)
+ {
+ huft_free(is, tl);
+ return i;
+ }
+
+ /* Save inflate state for this block */
+ is->tl = tl;
+ is->td = td;
+ is->bl = bl;
+ is->bd = bd;
+
+ return 0;
+}
+
+/*
+ * decompress an inflated type 2 (dynamic Huffman codes) block.
+ */
+
+#define PKZIP_BUG_WORKAROUND
+
+static int inflate_dynamic_setup(
+ struct InflateState *is /* Inflate state */
+)
+{
+ int i; /* temporary variables */
+ unsigned j;
+ unsigned l; /* last length */
+ unsigned m; /* mask for bit lengths table */
+ unsigned n; /* number of lengths to get */
+ struct huft *tl; /* literal/length code table */
+ struct huft *td; /* distance code table */
+ int bl; /* lookup bits for tl */
+ int bd; /* lookup bits for td */
+ unsigned nb; /* number of bit length codes */
+ unsigned nl; /* number of literal/length codes */
+ unsigned nd; /* number of distance codes */
+#ifdef PKZIP_BUG_WORKAROUND
+ unsigned ll[288+32]; /* literal/length and distance code lengths */
+#else
+ unsigned ll[286+30]; /* literal/length and distance code lengths */
+#endif
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+
+ /* initialize tl for cleanup */
+ tl = NULL;
+
+ TRY
+ {
+ /* read in table lengths */
+ NEEDBITS(5)
+ nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */
+ DUMPBITS(5)
+ NEEDBITS(5)
+ nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */
+ DUMPBITS(5)
+ NEEDBITS(4)
+ nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */
+ DUMPBITS(4)
+#ifdef PKZIP_BUG_WORKAROUND
+ if (nl > 288 || nd > 32)
+#else
+ if (nl > 286 || nd > 30)
+#endif
+ return 1; /* bad lengths */
+
+ /* read in bit-length-code lengths */
+ for (j = 0; j < 19; j++) ll[j] = 0;
+ for (j = 0; j < nb; j++)
+ {
+ NEEDBITS(3)
+ ll[border[j]] = (unsigned)b & 7;
+ DUMPBITS(3)
+ }
+
+ /* build decoding table for trees--single level, 7 bit lookup */
+ bl = 7;
+ if ((i = huft_build(is, ll, 19, 19, NULL, NULL, &tl, &bl)) != 0)
+ {
+ if (i == 1)
+ huft_free(is, tl);
+ return i; /* incomplete code set */
+ }
+
+ /* read in literal and distance code lengths */
+ n = nl + nd;
+ m = mask_bits[bl];
+ i = l = 0;
+ while ((unsigned)i < n)
+ {
+ NEEDBITS((unsigned)bl)
+ j = (td = tl + ((unsigned)b & m))->b;
+ DUMPBITS(j)
+ j = td->v.n;
+ if (j < 16) /* length of code in bits (0..15) */
+ ll[i++] = l = j; /* save last length in l */
+ else if (j == 16) /* repeat last length 3 to 6 times */
+ {
+ NEEDBITS(2)
+ j = 3 + ((unsigned)b & 3);
+ DUMPBITS(2)
+ if ((unsigned)i + j > n)
+ return 1;
+ while (j--)
+ ll[i++] = l;
+ }
+ else if (j == 17) /* 3 to 10 zero length codes */
+ {
+ NEEDBITS(3)
+ j = 3 + ((unsigned)b & 7);
+ DUMPBITS(3)
+ if ((unsigned)i + j > n)
+ return 1;
+ while (j--)
+ ll[i++] = 0;
+ l = 0;
+ }
+ else /* j == 18: 11 to 138 zero length codes */
+ {
+ NEEDBITS(7)
+ j = 11 + ((unsigned)b & 0x7f);
+ DUMPBITS(7)
+ if ((unsigned)i + j > n)
+ return 1;
+ while (j--)
+ ll[i++] = 0;
+ l = 0;
+ }
+ }
+
+ /* free decoding table for trees */
+ huft_free(is, tl);
+ }
+ CATCH_BEGIN
+ if (tl) huft_free(is, tl);
+ return -1;
+ CATCH_END
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+
+ /* build the decoding tables for literal/length and distance codes */
+ bl = lbits;
+ if ((i = huft_build(is, ll, nl, 257, cplens, cplext, &tl, &bl)) != 0)
+ {
+ if (i == 1) {
+ /* incomplete literal tree */
+ huft_free(is, tl);
+ }
+ return i; /* incomplete code set */
+ }
+ bd = dbits;
+ if ((i = huft_build(is, ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0)
+ {
+ if (i == 1) {
+ /* incomplete distance tree */
+#ifdef PKZIP_BUG_WORKAROUND
+ }
+#else
+ huft_free(is, td);
+ }
+ huft_free(is, tl);
+ return i; /* incomplete code set */
+#endif
+ }
+
+ /* Save inflate state for this block */
+ is->tl = tl;
+ is->td = td;
+ is->bl = bl;
+ is->bd = bd;
+
+ return 0;
+}
+
+/* Routine to initialize inflate decompression */
+void *InflateInitialize( /* returns InflateState */
+ void *AppState, /* for passing to putbuffer */
+ int (*putbuffer_ptr)( /* returns 0 on success */
+ void *AppState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+ ),
+ void *(*malloc_ptr)(long length), /* utility routine */
+ void (*free_ptr)(void *buffer) /* utility routine */
+)
+{
+ struct InflateState *is;
+
+ /* Do some argument checking */
+ if ((!putbuffer_ptr) || (!malloc_ptr) || (!free_ptr)) return NULL;
+
+ /* Allocate the InflateState memory area */
+ is = (struct InflateState *) (*malloc_ptr)(sizeof(struct InflateState));
+ if (!is) return NULL;
+
+ /* Set up the initial values of the inflate state */
+ is->runtimetypeid1 = INFLATESTATETYPE;
+ is->errorencountered = FALSE;
+
+ is->bb = 0;
+ is->bk = 0;
+ is->bp = 0;
+ is->bs = 0;
+
+ is->wp = 0;
+ is->wf = 0;
+
+ is->state = -1;
+ is->lastblock = FALSE;
+
+ is->AppState = AppState;
+
+ is->putbuffer_ptr = putbuffer_ptr;
+ is->malloc_ptr = malloc_ptr;
+ is->free_ptr = free_ptr;
+
+ is->runtimetypeid2 = INFLATESTATETYPE;
+
+ /* Return this state info to the caller */
+ return is;
+}
+
+/* Call-in routine to put a buffer into inflate decompression */
+int InflatePutBuffer( /* returns 0 on success */
+ void *InflateState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+)
+{
+ struct InflateState *is;
+
+ int beginstate;
+
+ /* Get (and check) the InflateState structure */
+ is = (struct InflateState *) InflateState;
+ if (!is || (is->runtimetypeid1 != INFLATESTATETYPE)
+ || (is->runtimetypeid2 != INFLATESTATETYPE)) return TRUE;
+ if (is->errorencountered) return TRUE;
+
+ do
+ {
+ int size, i;
+
+
+ if ((is->state == -1) && (is->lastblock)) break;
+
+ /* Save the beginning state */
+ beginstate = is->state;
+
+ /* Push as much as possible into input buffer */
+ size = BUFFERSIZE - is->bs;
+ if (size > length) size = (int) length;
+ i = is->bp + is->bs;
+
+ while (size-- > 0)
+ {
+ is->buffer[i++ & BUFFERMASK] = *buffer;
+ is->bs++;
+ buffer++;
+ length--;
+ }
+
+ /* Process some more data */
+ if (is->state == -1)
+ {
+ int e; /* last block flag */
+ unsigned t; /* block type */
+
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+
+ TRY
+ {
+ /* read in last block bit */
+ NEEDBITS(1)
+ e = (int)b & 1;
+ DUMPBITS(1)
+
+ /* read in block type */
+ NEEDBITS(2)
+ t = (unsigned)b & 3;
+ DUMPBITS(2)
+
+ if (t <= 2)
+ {
+ is->state = t;
+ is->lastblock = e;
+ }
+ else
+ {
+ ERROREXIT(is);
+ }
+ }
+ CATCH_BEGIN
+ CATCH_END
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+ }
+ else if (is->state == 0)
+ {
+ int ret;
+
+ ret = inflate_stored_setup(is);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0) is->state += 10;
+ }
+ else if (is->state == 1)
+ {
+ int ret;
+
+ ret = inflate_fixed_setup(is);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0) is->state += 10;
+ }
+ else if (is->state == 2)
+ {
+ int ret;
+
+ ret = inflate_dynamic_setup(is);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0) is->state += 10;
+ }
+ else if (is->state == 10)
+ {
+ int ret;
+
+ ret = inflate_stored(is);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0)
+ {
+ is->state = -1;
+ }
+ }
+ else if ((is->state == 11) ||
+ (is->state == 12) )
+ {
+ int ret;
+
+ ret = inflate_codes(is, is->tl, is->td, is->bl, is->bd);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0)
+ {
+ /* free the decoding tables */
+ huft_free(is, is->tl);
+ huft_free(is, is->td);
+ is->state = -1;
+ }
+ }
+ else
+ {
+ ERROREXIT(is);
+ }
+ }
+ while (length || (is->state != beginstate));
+
+ FLUSHWINDOW(is->wp, TRUE);
+
+ return is->errorencountered;
+}
+
+/* Routine to terminate inflate decompression */
+int InflateTerminate( /* returns 0 on success */
+ void *InflateState /* opaque ptr from Initialize */
+)
+{
+ int err;
+ void (*free_ptr)(void *buffer);
+
+ struct InflateState *is;
+
+ /* Get (and check) the InflateState structure */
+ is = (struct InflateState *) InflateState;
+ if (!is || (is->runtimetypeid1 != INFLATESTATETYPE)
+ || (is->runtimetypeid2 != INFLATESTATETYPE)) return TRUE;
+
+ /* save the error return */
+ err = is->errorencountered || (is->bs > 0)
+ || (is->state != -1)
+ || (!is->lastblock);
+
+ /* save the address of the free routine */
+ free_ptr = is->free_ptr;
+
+ /* Deallocate everything */
+ (*free_ptr)(is);
+
+ return err;
+}
diff --git a/externals/figlet/inflate.h b/externals/figlet/inflate.h
new file mode 100644
index 0000000000..4fc7454820
--- /dev/null
+++ b/externals/figlet/inflate.h
@@ -0,0 +1,90 @@
+/*
+ * inflate.h - inflate decompression routine
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * 1) All file i/o is done externally to these routines
+ * 2) Routines are symmetrical so inflate can feed into deflate
+ * 3) Routines can be easily integrated into wide range of applications
+ * 4) Routines are very portable, and use only ANSI C
+ * 5) No #defines in inflate.h to conflict with external #defines
+ * 6) No external routines need be called by these routines
+ * 7) Buffers are owned by the calling routine
+ * 8) No static non-constant variables are allowed
+ */
+
+/*
+ * Note that for each call to InflatePutBuffer, there will be
+ * 0 or more calls to (*putbuffer_ptr). All except the last
+ * call to (*putbuffer_ptr) will be with 32768 bytes, although
+ * this behaviour may change in the future. Before InflatePutBuffer
+ * returns, it will have output as much uncompressed data as
+ * is possible.
+ */
+
+#ifndef __INFLATE_H
+#define __INFLATE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Routine to initialize inflate decompression */
+void *InflateInitialize( /* returns InflateState */
+ void *AppState, /* for passing to putbuffer */
+ int (*putbuffer_ptr)( /* returns 0 on success */
+ void *AppState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+ ),
+ void *(*malloc_ptr)(long length), /* utility routine */
+ void (*free_ptr)(void *buffer) /* utility routine */
+);
+
+/* Call-in routine to put a buffer into inflate decompression */
+int InflatePutBuffer( /* returns 0 on success */
+ void *InflateState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+);
+
+/* Routine to terminate inflate decompression */
+int InflateTerminate( /* returns 0 on success */
+ void *InflateState /* opaque ptr from Initialize */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/figlet/run-tests.sh b/externals/figlet/run-tests.sh
new file mode 100755
index 0000000000..4c373ec8d0
--- /dev/null
+++ b/externals/figlet/run-tests.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+LC_ALL=POSIX
+export LC_ALL
+
+TESTDIR=tests
+OUTPUT=.test-output.txt
+LOGFILE=tests.log
+CMD="./figlet"
+FONTDIR="$1"
+
+run_test() {
+ test_dsc=$1
+ test_cmd=$2
+
+ total=`expr $total + 1`
+ test_num=`printf %03d $total`
+
+ echo >> $LOGFILE
+ printf "Run test $test_num: ${test_dsc}... " | tee -a $LOGFILE
+ echo >> $LOGFILE
+ echo "Command: $test_cmd" >> $LOGFILE
+ eval "$test_cmd" > "$OUTPUT" 2>> $LOGFILE
+ cmp "$OUTPUT" "tests/res${test_num}.txt" >> $LOGFILE 2>&1
+ if [ $? -eq 0 ]; then
+ echo "pass" | tee -a $LOGFILE
+ else
+ echo "**fail**" | tee -a $LOGFILE
+ result=1
+ fail=`expr $fail + 1`
+ fi
+}
+
+result=0
+fail=0
+$CMD -v > $LOGFILE
+
+file="$TESTDIR/input.txt"
+cmd="cat $file|$CMD"
+
+printf "Default font dir: "; $CMD -I2
+if [ -n "$FONTDIR" ]; then
+ FIGLET_FONTDIR="$FONTDIR"
+ export FIGLET_FONTDIR
+fi
+printf "Current font dir: "; $CMD -I2
+printf "Default font: "; $CMD -I3
+$CMD -f small "Test results" | tee -a $LOGFILE
+
+total=0
+
+run_test "showfigfonts output" "./showfigfonts"
+run_test "text rendering in all fonts" \
+ "for i in fonts/*.flf; do $cmd -f \$i; done"
+run_test "long text rendering" "cat tests/longtext.txt|$CMD"
+run_test "left-to-right text" "$cmd -L"
+run_test "right-to-left text" "$cmd -R"
+run_test "flush-left justification" "$cmd -l"
+run_test "flush-right justification" "$cmd -r"
+run_test "center justification" "$cmd -c"
+run_test "kerning mode" "$cmd -k"
+run_test "full width mode" "$cmd -W"
+run_test "overlap mode" "$cmd -o"
+run_test "tlf2 font rendering" "$cmd -f tests/emboss"
+run_test "kerning flush-left right-to-left mode" "$cmd -klR"
+run_test "kerning centered right-to-left mode (slant)" "$cmd -kcR -f slant"
+run_test "full-width flush-right right-to-left mode" "$cmd -WrR"
+run_test "overlap flush-right mode (big)" "$cmd -or -f big"
+run_test "tlf2 kerning flush-right mode" "$cmd -kr -f tests/emboss"
+run_test "tlf2 overlap centered mode" "$cmd -oc -f tests/emboss"
+run_test "tlf2 full-width flush-left right-to-left mode" \
+ "$cmd -WRl -f tests/emboss"
+run_test "specify font directory" \
+ "X=.t;mkdir \$X;cp fonts/script.flf \$X/foo.flf;$cmd -d\$X -ffoo;rm -Rf \$X"
+run_test "paragraph mode long line output" "$cmd -p -w250"
+run_test "short line output" "$cmd -w5"
+run_test "kerning paragraph centered mode (small)" "$cmd -kpc -fsmall"
+run_test "list of control files" "ls fonts/*flc"
+run_test "uskata control file" "printf 'ABCDE'|$CMD -fbanner -Cuskata"
+run_test "jis0201 control file" "printf '\261\262\263\264\265'|$CMD -fbanner -Cjis0201"
+run_test "right-to-left smushing with JavE font" "$cmd -f tests/flowerpower -R"
+
+rm -f "$OUTPUT"
+
+echo
+if [ $result -ne 0 ]; then
+ echo " $fail tests failed. See $LOGFILE for result details"
+else
+ echo " All tests passed."
+fi
+
+exit $result
diff --git a/externals/figlet/showfigfonts b/externals/figlet/showfigfonts
new file mode 100755
index 0000000000..90c4d0afed
--- /dev/null
+++ b/externals/figlet/showfigfonts
@@ -0,0 +1,55 @@
+#!/bin/sh -
+# showfigfonts by Glenn Chappell <ggc@uiuc.edu>
+# figlet release 2.1.1 -- 25 Aug 1994
+# Based on showfigfonts by Greg Galperin <grg@ai.mit.edu>, Nov 1993.
+#
+# Prints a list of available figlet fonts, along with a sample of each
+# font. If directory is given, lists fonts in that directory; otherwise
+# uses the default font directory. If word is given, prints that word
+# in each font; otherwise prints the font name.
+#
+# Usage: showfigfonts [ -d directory ] [ word ]
+
+DIR=`dirname $0`
+FIGLET=$DIR/figlet
+
+# Get figlet version
+FIGLETVERSION=`$FIGLET -I1 2>/dev/null`
+if [ -z "$FIGLETVERSION" ]; then
+ FIGLETVERSION=20000
+fi
+
+USAGE="Usage: `basename $0` [ -d directory ] [ word ]"
+
+if [ "$1" = '-d' ]; then
+ FONTDIR="$2"
+ WORD="$3"
+ if [ $# -gt 3 ] || [ $# -lt 2 ]; then
+ echo "$USAGE"
+ exit 1
+ fi
+else
+ WORD="$1"
+ if [ $# -gt 1 ]; then
+ echo "$USAGE"
+ exit 1
+ fi
+ if [ "$FIGLETVERSION" -lt 20100 ]; then
+ # figlet 2.0
+ FONTDIR="`$FIGLET -F | sed -e '1d' -e '3,$d' -e 's/Font directory: //'`"
+ else
+ # figlet 2.1 or later
+ FONTDIR="`$FIGLET -I2`"
+ fi
+fi
+
+FONTLIST=`ls "$FONTDIR"/*.flf | sed 's!.*/\(.*\)\.flf$!\1!'`
+for F in $FONTLIST ; do
+ echo "$F :"
+ if [ -n "$WORD" ]; then
+ echo "$WORD" | $FIGLET -d "$FONTDIR" -f "$F"
+ else
+ echo "$F" | $FIGLET -d "$FONTDIR" -f "$F"
+ fi
+ echo "" ; echo ""
+done
diff --git a/externals/figlet/showfigfonts.6 b/externals/figlet/showfigfonts.6
new file mode 100644
index 0000000000..0ec5783dff
--- /dev/null
+++ b/externals/figlet/showfigfonts.6
@@ -0,0 +1,67 @@
+.\" showfigfonts by Glenn Chappell <ggc@uiuc.edu>
+.\" figlet release 2.1.1 -- 25 Aug 1994
+.\" Based on showfigfonts by Greg Galperin <grg@ai.mit.edu>, Nov 1993.
+.\"
+.\" Prints a list of available figlet fonts, along with a sample of each
+.\" font. If directory is given, lists fonts in that directory; otherwise
+.\" uses the default font directory. If word is given, prints that word
+.\" in each font; otherwise prints the font name.
+.\"
+.\" Usage: showfigfonts [ -d directory ] [ word ]
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH SHOWFIGFONTS 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+showfigfonts \- prints a list of available figlet fonts
+
+.SH SYNOPSIS
+.B showfigfonts
+[
+.B \-d
+.I directory
+]
+[
+.I word
+]
+
+.SH "DESCRIPTION"
+Prints a list of available figlet fonts, along with a sample of each
+font. If directory is given, lists fonts in that directory; otherwise
+uses the default font directory. If word is given, prints that word
+in each font; otherwise prints the font name.
+
+.SH EXAMPLES
+To use
+.B showfigfonts
+with its default settings, simply type
+.RS
+
+.B example% showfigfonts
+
+.RE
+
+To print all the fonts in /usr/share/fonts/figlet
+.RS
+
+.B example% showfigfonts -d /usr/share/fonts/figlet
+
+.RE
+
+To print the word foo using all available fonts
+.RS
+
+.B example% showfigfonts foo
+
+.RE
+
+.SH "AUTHORS"
+showfigfonts was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR chkfont (6),
+.BR figlist (6)
diff --git a/externals/figlet/tests/emboss.tlf b/externals/figlet/tests/emboss.tlf
new file mode 100644
index 0000000000..eff0852d4f
--- /dev/null
+++ b/externals/figlet/tests/emboss.tlf
@@ -0,0 +1,325 @@
+tlf2a 3 3 8 -1 18 0 0 0
+===============================================================================
+ This is emboss.tlf, or “Emboss”, by Sam Hocevar <sam@hocevar.net>. It was
+created on September 30th, 2006.
+
+ This font is free software. It comes without any warranty, to the extent
+permitted by applicable law. You can redistribute it and/or modify it under
+the terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
+details.
+
+ Missing characters: # $ % , ; < >
+
+ To create emboss2.tlf, use the following command:
+ $ sed '/@@/,$y/━┃┏┓┗┛/═║╔╗╚╝/' < emboss.tlf > emboss2.tlf
+
+ This font is part of TOIlet’s official distribution. More information
+on the TOIlet website at http://caca.zoy.org/wiki/toilet
+===============================================================================
+ @
+ @
+ @@
+┃!
+┛!
+┛!!
+┛┛"
+ "
+ ""
+ @
+ @
+#@@
+ @
+ @
+$@@
+ @
+ @
+%@@
+┏┛┃ &
+┃━┏┛&
+━━┛ &&
+┛'
+ '
+ ''
+ ┛(
+┃ (
+ ┛((
+━ )
+ ┃)
+━ ))
+┛ ┛*
+━┏┛*
+┛ ┛**
+ ┃ +
+━┏┛+
+ ┛ ++
+ @
+ @
+,@@
+ -
+━┛-
+ --
+ .
+ .
+┛..
+ ┛/
+ ┛ /
+┛ //
+┏━┃0
+┃┛┃0
+━━┛00
+━┃ 1
+ ┃ 1
+━━┛11
+━━┃2
+┏━┛2
+━━┛22
+━━┃3
+━━┃3
+━━┛33
+┃ ┃4
+━━┃4
+ ┛44
+┏━┛5
+━━┃5
+━━┛55
+┏━┛6
+┏━┃6
+━━┛66
+┏━┃7
+ ┃7
+ ┛77
+┏━┃8
+┏━┃8
+━━┛88
+┏━┃9
+━━┃9
+━━┛99
+ :
+┛:
+┛::
+ @
+ @
+;@@
+ @
+ @
+<@@
+ =
+━━┛=
+━━┛==
+ @
+ @
+>@@
+┏━┃?
+ ┛?
+ ┛ ??
+┏━┃@
+┃┛┛@
+━━┛@@
+┏━┃A
+┏━┃A
+┛ ┛AA
+┏━ B
+┏━┃B
+━━ BB
+┏━┛C
+┃ C
+━━┛CC
+┏━ D
+┃ ┃D
+━━ DD
+┏━┛E
+┏━┛E
+━━┛EE
+┏━┛F
+┏━┛F
+┛ FF
+┏━┛G
+┃ ┃G
+━━┛GG
+┃ ┃H
+┏━┃H
+┛ ┛HH
+┛I
+┃I
+┛II
+ ┛J
+ ┃J
+━┛JJ
+┃ ┃K
+┏┛ K
+┛ ┛KK
+┃ L
+┃ L
+━━┛LL
+┏┏ M
+┃┃┃M
+┛┛┛MM
+┏━ N
+┃ ┃N
+┛ ┛NN
+┏━┃O
+┃ ┃O
+━━┛OO
+┏━┃p
+┏━┛P
+┛ PP
+┏━┃ Q
+┃ ┃ Q
+━━━┛QQ
+┏━┃R
+┏┏┛R
+┛ ┛RR
+┏━┛S
+━━┃S
+━━┛SS
+━┏┛T
+ ┃ T
+ ┛ TT
+┃ ┃U
+┃ ┃U
+━━┛UU
+┃ ┃V
+┃ ┃V
+ ┛ VV
+┃┃┃W
+┃┃┃W
+━━┛WW
+┃ ┃X
+ ┛ X
+┛ ┛XX
+┃ ┃Y
+━┏┛Y
+ ┛ YY
+━━┃Z
+┏┛ Z
+━━┛ZZ
+┏┛[
+┃ [
+━┛[[
+┛ \
+ ┛ \
+ ┛\\
+━┃]
+ ┃]
+━┛]]
+ ┛ ^
+┛ ┛^
+ ^^
+ _
+ _
+━━┛__
+┛ `
+ ┛`
+ ``
+┏━┃a
+┏━┃a
+┛ ┛aa
+┏━ b
+┏━┃b
+━━ bb
+┏━┛c
+┃ c
+━━┛cc
+┏━ d
+┃ ┃d
+━━ dd
+┏━┛e
+┏━┛e
+━━┛ee
+┏━┛f
+┏━┛f
+┛ ff
+┏━┛g
+┃ ┃g
+━━┛gg
+┃ ┃h
+┏━┃h
+┛ ┛hh
+┛i
+┃i
+┛ii
+ ┛j
+ ┃j
+━┛jj
+┃ ┃k
+┏┛ k
+┛ ┛kk
+┃ l
+┃ l
+━━┛ll
+┏┏ m
+┃┃┃m
+┛┛┛mm
+┏━ n
+┃ ┃n
+┛ ┛nn
+┏━┃o
+┃ ┃o
+━━┛oo
+┏━┃p
+┏━┛p
+┛ pp
+┏━┃ q
+┃ ┃ q
+━━━┛qq
+┏━┃r
+┏┏┛r
+┛ ┛rr
+┏━┛s
+━━┃s
+━━┛ss
+━┏┛t
+ ┃ t
+ ┛ tt
+┃ ┃u
+┃ ┃u
+━━┛uu
+┃ ┃v
+┃ ┃v
+ ┛ vv
+┃┃┃w
+┃┃┃w
+━━┛ww
+┃ ┃x
+ ┛ x
+┛ ┛xx
+┃ ┃y
+━┏┛y
+ ┛ yy
+━━┃z
+┏┛ z
+━━┛zz
+ ┏┛{
+━┃ {
+ ━┛{{
+┃|
+┃|
+┛||
+━┃ }
+ ┏┛}
+━┛ }}
+ ┛ ┛~
+┛ ┛ ~
+ ~~
+┏━┃┏━┛Ä
+┏━┃┏━┛Ä
+┛ ┛━━┛ÄÄ
+┏━┃┏━┛Ö
+┃ ┃┏━┛Ö
+━━┛━━┛ÖÖ
+┃ ┃┏━┛Ü
+┃ ┃┏━┛Ü
+━━┛━━┛ÜÜ
+┏━┃┏━┛ä
+┏━┃┏━┛ä
+┛ ┛━━┛ää
+┏━┃┏━┛ö
+┃ ┃┏━┛ö
+━━┛━━┛öö
+┃ ┃┏━┛ü
+┃ ┃┏━┛ü
+━━┛━━┛üü
+┏━┛┏━┛ß
+━━┃━━┃ß
+━━┛━━┛ßß
diff --git a/externals/figlet/tests/flowerpower.flf b/externals/figlet/tests/flowerpower.flf
new file mode 100644
index 0000000000..3f294fb374
Binary files /dev/null and b/externals/figlet/tests/flowerpower.flf differ
diff --git a/externals/figlet/tests/input.txt b/externals/figlet/tests/input.txt
new file mode 100644
index 0000000000..8826520227
--- /dev/null
+++ b/externals/figlet/tests/input.txt
@@ -0,0 +1,7 @@
+<joshk> joshk@influx:/etc/logrotate.d> sh -n *
+<joshk> apache: line 14: syntax error near unexpected token `}'
+<joshk> apache: line 14: `}'
+<joshk> the plot thickens
+<asuffield> those aren't shell scripts
+<erich> this wasn't chicken.
+ -- in #debian-devel
diff --git a/externals/figlet/tests/longtext.txt b/externals/figlet/tests/longtext.txt
new file mode 100644
index 0000000000..72e3a18209
--- /dev/null
+++ b/externals/figlet/tests/longtext.txt
@@ -0,0 +1,14 @@
+ What is involved in such [close] relationships is a form of emotional
+chemistry, so far unexplained by any school of psychiatry I am aware of, that
+conditions nothing so simple as a choice between the poles of attraction and
+repulsion. You can meet some people thirty, forty times down the years, and
+they remain amiable bystanders, like the shore lights of towns that a sailor
+passes at stated times but never calls at on the regular run. Conversely,
+all considerations of sex aside, you can meet some other people once or twice
+and they remain permanent influences on your life.
+ Everyone is aware of this discrepancy between the acquaintance seen
+as familiar wallpaper or instant friend. The chemical action it entails is
+less worth analyzing than enjoying. At any rate, these six pieces are about
+men with whom I felt an immediate sympat - to use a coining of Max Beerbohm's
+more satisfactory to me than the opaque vogue word "empathy".
+ -- Alistair Cooke, "Six Men"
diff --git a/externals/figlet/tests/res001.txt b/externals/figlet/tests/res001.txt
new file mode 100644
index 0000000000..a85fa59528
--- /dev/null
+++ b/externals/figlet/tests/res001.txt
@@ -0,0 +1,148 @@
+banner :
+
+##### ## # # # # ###### #####
+# # # # ## # ## # # # #
+##### # # # # # # # # ##### # #
+# # ###### # # # # # # # #####
+# # # # # ## # ## # # #
+##### # # # # # # ###### # #
+
+
+
+big :
+ _ _
+| | (_)
+| |__ _ __ _
+| '_ \| |/ _` |
+| |_) | | (_| |
+|_.__/|_|\__, |
+ __/ |
+ |___/
+
+
+block :
+
+_| _| _|
+_|_|_| _| _|_| _|_|_| _| _|
+_| _| _| _| _| _| _|_|
+_| _| _| _| _| _| _| _|
+_|_|_| _| _|_| _|_|_| _| _|
+
+
+
+
+bubble :
+ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \
+( b | u | b | b | l | e )
+ \_/ \_/ \_/ \_/ \_/ \_/
+
+
+digital :
++-+-+-+-+-+-+-+
+|d|i|g|i|t|a|l|
++-+-+-+-+-+-+-+
+
+
+ivrit :
+ _ _ _
+ | |_(_)_ ____ _(_)
+ | __| | '__\ \ / / |
+ | |_| | | \ V /| |
+ \__|_|_| \_/ |_|
+
+
+
+lean :
+
+ _/
+ _/ _/_/ _/_/_/ _/_/_/
+ _/ _/_/_/_/ _/ _/ _/ _/
+ _/ _/ _/ _/ _/ _/
+_/ _/_/_/ _/_/_/ _/ _/
+
+
+
+
+mini :
+
+._ _ o._ o
+| | ||| ||
+
+
+
+mnemonic :
+mnemonic
+
+
+script :
+
+ o
+ , __ ,_ _ _|_
+/ \_/ / | | |/ \_|
+ \/ \___/ |_/|_/|__/ |_/
+ /|
+ \|
+
+
+shadow :
+ | |
+ __| __ \ _` | _` | _ \\ \ \ /
+\__ \ | | | ( | ( | ( |\ \ \ /
+____/_| |_|\__,_|\__,_|\___/ \_/\_/
+
+
+
+slant :
+ __ __
+ _____/ /___ _____ / /_
+ / ___/ / __ `/ __ \/ __/
+ (__ ) / /_/ / / / / /_
+/____/_/\__,_/_/ /_/\__/
+
+
+
+small :
+ _ _
+ ____ __ __ _| | |
+(_-< ' \/ _` | | |
+/__/_|_|_\__,_|_|_|
+
+
+
+smscript :
+
+ , , _ ,_ o _|_
+/ \_/|/|/| / \_/ / | | |/\_|
+ \/ | | |_/ \/ \__/ |/|/|_/ |_/
+ (|
+
+
+smshadow :
+ | |
+(_-< ` \ (_-< \ _` | _` | _ \\ \ \ /
+___/_|_|_|___/_| _|\__,_|\__,_|\___/ \_/\_/
+
+
+
+smslant :
+ __ __
+ ___ __ _ ___ / /__ ____ / /_
+ (_-</ ' \(_-</ / _ `/ _ \/ __/
+/___/_/_/_/___/_/\_,_/_//_/\__/
+
+
+
+standard :
+ _ _ _
+ ___| |_ __ _ _ __ __| | __ _ _ __ __| |
+/ __| __/ _` | '_ \ / _` |/ _` | '__/ _` |
+\__ \ || (_| | | | | (_| | (_| | | | (_| |
+|___/\__\__,_|_| |_|\__,_|\__,_|_| \__,_|
+
+
+
+term :
+term
+
+
diff --git a/externals/figlet/tests/res002.txt b/externals/figlet/tests/res002.txt
new file mode 100644
index 0000000000..752f6578be
--- /dev/null
+++ b/externals/figlet/tests/res002.txt
@@ -0,0 +1,1992 @@
+ # #
+ # # #### #### # # # # #
+ # # # # # # # # # #
+# # # # #### ###### #### #
+ # # # # # # # # # #
+ # # # # # # # # # # # #
+ # #### #### #### # # # # #
+
+ #####
+ # #### #### # # # # # # # # # ###### # # #
+ # # # # # # # # # ### # # ## # # # # #
+ # # # #### ###### #### # ### # # # # # ##### # # #
+ # # # # # # # # # #### # # # # # # # #
+# # # # # # # # # # # # # ## # # # #
+ #### #### #### # # # # ##### # # # # ###### ####
+
+ # # #
+# # ### # ###### ##### #### # # #### #### #####
+ # # # # # # # # # # # # # # # #
+ ## # ##### # # # # # # # # #
+ ## # # # # # # # # # # ### #####
+ # # ### # # # # # # # # # # # # #
+# # # # ###### # #### # ###### #### #### # #
+
+ #
+ #### ##### ## ##### ###### ##### # #### # #
+# # # # # # # # # # # # #
+# # # # # # ##### # # # #### ######
+# # # ###### # # ### # # # # # #
+# # # # # # # ### # # # # # # #
+ #### # # # # ###### ### ##### # #### # #
+
+
+ # # # #
+ ## # # #
+##### # # # #######
+ # # # # #
+ # ## # #
+ # #
+
+ # #
+ # # #### #### # # # # #
+ # # # # # # # # # #
+# # # # #### ###### #### #
+ # # # # # # # # # #
+ # # # # # # # # # # # #
+ # #### #### #### # # # # #
+
+ #
+ ## ##### ## #### # # ###### ### # # # # ######
+ # # # # # # # # # # # # # # ## # #
+# # # # # # # ###### ##### # # # # # #####
+###### ##### ###### # # # # # # # # # # #
+# # # # # # # # # # ### # # # ## #
+# # # # # #### # # ###### # ###### # # # ######
+
+ # # #
+ ## # # ### #### # # # # ##### ## # #
+# # # # # # # # ## # # # # # #
+ # # # #### # # # # # # # ##
+ # ####### # # # # # # # ###### ##
+ # # ### # # # # ## # # # # #
+##### # # #### # # # # # # # #
+
+
+###### ##### ##### #### ##### # # ###### ## #####
+# # # # # # # # # ## # # # # # #
+##### # # # # # # # # # # # ##### # # # #
+# ##### ##### # # ##### # # # # ###### #####
+# # # # # # # # # # ## # # # # #
+###### # # # # #### # # # # ###### # # # #
+
+
+# # # # ###### # # ##### ###### #### ##### ###### #####
+# # ## # # # # # # # # # # # # #
+# # # # # ##### ## # # ##### # # ##### # #
+# # # # # # ## ##### # # # # # #
+# # # ## # # # # # # # # # # #
+ #### # # ###### # # # ###### #### # ###### #####
+
+ ### ### ###
+##### #### # # ###### # # ### # ###
+ # # # # # # ## # # # #
+ # # # #### ##### # # # # ## #
+ # # # # # # # # # #
+ # # # # # # # ## #
+ # #### # # ###### # # ###
+
+ # #
+ # # #### #### # # # # #
+ # # # # # # # # # #
+# # # # #### ###### #### #
+ # # # # # # # # # #
+ # # # # # # # # # # # #
+ # #### #### #### # # # # #
+
+ #
+ ## ##### ## #### # # ###### ### # # # # ######
+ # # # # # # # # # # # # # # ## # #
+# # # # # # # ###### ##### # # # # # #####
+###### ##### ###### # # # # # # # # # # #
+# # # # # # # # # # ### # # # ## #
+# # # # # #### # # ###### # ###### # # # ######
+
+ # # # ### ### ###
+ ## # # ### ### # ###
+# # # # # # # #
+ # # # # ## #
+ # ####### # #
+ # # ### #
+##### # # ###
+
+ # #
+ # # #### #### # # # # # ##### # # ######
+ # # # # # # # # # # # # # #
+# # # # #### ###### #### # # ###### #####
+ # # # # # # # # # # # # # #
+ # # # # # # # # # # # # # # # #
+ # #### #### #### # # # # # # # # ######
+
+
+##### # #### #####
+# # # # # #
+# # # # # #
+##### # # # #
+# # # # #
+# ###### #### #
+
+
+##### # # # #### # # ###### # # ####
+ # # # # # # # # # ## # #
+ # ###### # # #### ##### # # # ####
+ # # # # # # # # # # # #
+ # # # # # # # # # # ## # #
+ # # # # #### # # ###### # # ####
+
+ # #
+ # ## #### # # ###### ###### # ###### # ##### #
+ # # # # # # # # # # # # # #
+# # # #### # # ##### ##### # ##### # # # #
+ # ###### # # # # # # # # # # #
+ # # # # # # # # # # # # # # #
+ # # # #### #### # # # ###### ###### ##### #
+
+ ###
+##### # # #### #### ###### ## ##### ###### # # ### #####
+ # # # # # # # # # # # # ## # # #
+ # ###### # # #### ##### # # # # ##### # # # # #
+ # # # # # # # ###### ##### # # # # #
+ # # # # # # # # # # # # # # ## #
+ # # # #### #### ###### # # # # ###### # # #
+
+
+ #### # # ###### # #
+# # # # # #
+ #### ###### ##### # #
+ # # # # # #
+# # # # # # #
+ #### # # ###### ###### ######
+
+
+ #### #### ##### # ##### ##### ####
+# # # # # # # # # #
+ #### # # # # # # # ####
+ # # ##### # ##### # #
+# # # # # # # # # # #
+ #### #### # # # # # ####
+
+ # #
+ # ###### ##### # #### # # # ##### # # # ####
+ # # # # # # # # # # # # # # #
+# ##### # # # # ###### # # ###### # ####
+ # # ##### # # # # # # # # # #
+ # # # # # # # # # # # # # # # #
+ # ###### # # # #### # # # # # # # ####
+
+ ###
+# # ## #### # # ### #####
+# # # # # ## # # #
+# # # # #### # # # # #
+# ## # ###### # # # # #
+## ## # # # # # ## #
+# # # # #### # # #
+
+
+ #### # # # #### # # ###### # #
+# # # # # # # # # # ## #
+# ###### # # #### ##### # # #
+# # # # # # # # # # # ###
+# # # # # # # # # # # ## ###
+ #### # # # #### # # ###### # # ###
+
+
+ # # #
+ # ## #
+ ##### ##### # # # #
+ # # # #
+ # # ##
+ # # #
+
+ # #
+ # # ##### ###### ##### # ## # # ##### ###### # # ######
+####### # # # # # # # # ## # # # # # # #
+ # # # # ##### ##### # # # # # # ##### # # ##### # # #####
+####### # # # # # # ###### # # # # # # # # #
+ # # # # # # # # # # # ## # # # # # #
+ # # ##### ###### ##### # # # # # ##### ###### ## ######
+
+
+#
+#
+#
+#
+#
+######
+
+ ___ _ _ __
+ / (_) | | | | \ \
+ / / _ ___ ___| |__ | | __ \ \
+< < | |/ _ \/ __| '_ \| |/ / > >
+ \ \| | (_) \__ \ | | | < / /
+ \_\ |\___/|___/_| |_|_|\_\/_/
+ _/ |
+ |__/
+ _ _ _ _ __ _ __ _
+ (_) | | | | ____ (_) / _| | _ / / | |
+ _ ___ ___| |__ | | __/ __ \ _ _ __ | |_| |_ ___ _(_) / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| _| | | | \ \/ / / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | | | | |_| |> < _ / / __/ || (__
+ | |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+ _/ | \____/
+|__/
+ ___ _ _ ___ _
+ / / | | | | | | \ \ | |
+ / /| | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| |\ \ ___| |__
+ / / | |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` | > > / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ __/ |
+ |___/
+ _
+ /\| |/\
+ ______ _ __ \ ` ' /
+|______| '_ \ |_ _|
+ | | | | / , . \
+ |_| |_| \/|_|\/
+
+
+ ___ _ _ __ _
+ / (_) | | | | \ \ | | _
+ / / _ ___ ___| |__ | | __ \ \ __ _ _ __ __ _ ___| |__ ___(_)
+< < | |/ _ \/ __| '_ \| |/ / > > / _` | '_ \ / _` |/ __| '_ \ / _ \
+ \ \| | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ _/ | | |
+ |__/ |_|
+ _ _ __ _ _ _
+| (_) /_ | || | _ | |
+| |_ _ __ ___ | | || |_(_) ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ \ | |__ _| / __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __/ | | | | _ \__ \ |_| | | | | || (_| |> <
+|_|_|_| |_|\___| |_| |_| (_) |___/\__, |_| |_|\__\__,_/_/\_\
+ __/ |
+ |___/
+
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+| __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+
+ _ _ _ _
+ | | | | | | | |
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ | |
+ |_|
+ ___ _
+( ) \ ( )
+ \|| ||/
+ \ \
+ / /
+ | |
+ /_/
+
+ ___ _ _ __ _
+ / (_) | | | | \ \ | | _
+ / / _ ___ ___| |__ | | __ \ \ __ _ _ __ __ _ ___| |__ ___(_)
+< < | |/ _ \/ __| '_ \| |/ / > > / _` | '_ \ / _` |/ __| '_ \ / _ \
+ \ \| | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ _/ | | |
+ |__/ |_|
+ _ _ __ _ _ ___ _
+| (_) /_ | || | _ ( ) \ ( )
+| |_ _ __ ___ | | || |_(_) \|| ||/
+| | | '_ \ / _ \ | |__ _| \ \
+| | | | | | __/ | | | | _ / /
+|_|_|_| |_|\___| |_| |_| (_) | |
+ /_/
+
+ ___ _ _ __ _ _ _ _
+ / (_) | | | | \ \ | | | | | | | |
+ / / _ ___ ___| |__ | | __ \ \ | |_| |__ ___ _ __ | | ___ | |_
+< < | |/ _ \/ __| '_ \| |/ / > > | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+ \ \| | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ _/ | | |
+ |__/ |_|
+ _ _ _ _
+| | | | (_) | |
+| |_| |__ _ ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+
+ __ __ __ _ _ ___ _ _
+ / / / _|/ _(_) | | | \ \ | | | |
+ / / __ _ ___ _ _| |_| |_ _ ___| | __| |\ \ | |_| |__ ___ ___ ___
+< < / _` / __| | | | _| _| |/ _ \ |/ _` | > > | __| '_ \ / _ \/ __|/ _ \
+ \ \ (_| \__ \ |_| | | | | | | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+
+ _ _ _ _ _
+ ( ) | | | | | |
+ __ _ _ __ ___ _ __ |/| |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \ | __| / __| '_ \ / _ \ | |
+| (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+
+ _ _
+ (_) | |
+ ___ ___ _ __ _ _ __ | |_ ___
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| | | | |_) | |_\__ \
+|___/\___|_| |_| .__/ \__|___/
+ | |
+ |_|
+ __ _ _ __ _ _ _
+ / / (_) | | \ \ | | | | (_)
+ / / ___ _ __ _ ___| |__ \ \ | |_| |__ _ ___
+< < / _ \ '__| |/ __| '_ \ > > | __| '_ \| / __|
+ \ \ __/ | | | (__| | | |/ / | |_| | | | \__ \
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/
+
+
+ _ _ _ _ _
+ ( ) | | | (_) | |
+__ ____ _ ___ _ __ |/| |_ ___| |__ _ ___| | _____ _ __
+\ \ /\ / / _` / __| '_ \ | __| / __| '_ \| |/ __| |/ / _ \ '_ \
+ \ V V / (_| \__ \ | | | | |_ | (__| | | | | (__| < __/ | | |_
+ \_/\_/ \__,_|___/_| |_| \__| \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+
+ _
+ (_)
+ ______ ______ _ _ __
+ |______|______| | | '_ \
+ | | | | |
+ |_|_| |_|
+
+
+ _ _ _ _ _ _ _
+ _| || |_ | | | | (_) | | | |
+|_ __ _| __| | ___| |__ _ __ _ _ __ ______ __| | _____ _____| |
+ _| || |_ / _` |/ _ \ '_ \| |/ _` | '_ \______/ _` |/ _ \ \ / / _ \ |
+|_ __ _| (_| | __/ |_) | | (_| | | | | | (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
+
+
+ _| _| _| _| _|
+ _| _|_| _|_|_| _|_|_| _| _| _|
+_| _| _| _| _|_| _| _| _|_| _|
+ _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _|_| _|_|_| _| _| _| _| _|
+ _|
+ _|
+
+ _| _| _| _|_|_|_|_| _|
+ _|_| _|_|_| _|_|_| _| _| _| _| _|_|_|
+ _| _| _| _|_| _| _| _|_| _| _|_|_| _| _| _| _|
+ _| _| _| _|_| _| _| _| _| _| _| _| _| _| _| _|
+ _| _|_| _|_|_| _| _| _| _| _| _|_|_|_| _| _| _|
+ _| _|
+_| _|_|_|_|_|_|
+
+ _|_| _| _| _|
+ _| _| _| _| _| _| _| _| _|_| _|_|_|_| _|_|_|
+_|_|_|_| _| _| _| _|_| _| _|_|_|_| _| _|
+ _| _| _| _| _| _| _| _| _| _|
+ _| _| _|_|_| _| _| _| _| _|_|_| _|_| _|_|_|
+
+
+
+ _| _| _|
+ _| _| _|_| _|_|_| _| _|_| _|_| _|_|_|_| _|_|_|
+ _| _| _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _| _| _| _| _| _| _| _| _| _|
+_| _| _|_| _|_|_| _| _|_| _|_| _|_|_|
+ _|
+ _|_|
+
+ _| _| _| _|
+_|_|_|_| _|_| _|_|_| _| _|_|_| _|_|_|
+ _| _|_|_|_| _| _| _| _|_| _| _|
+ _| _| _| _| _| _|_| _| _|
+ _|_| _|_|_| _| _|_|_| _| _|_|_| _| _|
+
+
+
+ _| _| _|
+ _|_|_| _|_|_|
+_|_|_|_|_| _| _| _|_|_|_|_|
+ _| _| _|_|_|
+ _| _| _| _| _|
+
+
+
+ _| _| _| _| _|
+ _| _|_| _|_|_| _|_|_| _| _| _|
+_| _| _| _| _|_| _| _| _|_| _|
+ _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _|_| _|_|_| _| _| _| _| _|
+ _|
+ _|
+
+ _|
+ _|_|_| _|_|_| _|_|_| _|_|_| _|_|_| _|_| _|
+_| _| _| _| _| _| _| _| _| _|_|_|_|
+_| _| _| _| _| _| _| _| _| _|
+ _|_|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _|
+ _|
+ _|
+
+_| _| _| _| _|
+_| _|_|_| _|_| _|_| _| _| _|
+_| _| _| _| _|_|_|_| _| _|_|_|_|
+_| _| _| _| _| _| _|
+_| _| _| _| _|_|_| _| _| _|
+
+
+
+ _|
+ _|_|_| _| _| _|_|_| _|_|_|_| _|_|_| _| _|
+_|_| _| _| _| _| _| _| _| _|_|
+ _|_| _| _| _| _| _| _| _| _| _|
+_|_|_| _|_|_| _| _| _|_| _|_|_| _| _|
+ _|
+ _|_|
+
+
+ _|_| _| _|_| _| _|_| _|_| _| _|_|
+_|_|_|_| _|_| _|_| _| _| _|_|
+_| _| _| _| _| _|
+ _|_|_| _| _| _|_| _|
+
+
+
+
+_|_|_| _|_| _|_|_| _| _|_|
+_| _| _|_|_|_| _| _| _|_|
+_| _| _| _| _| _|
+_| _| _|_|_| _|_|_| _|
+
+
+
+
+_| _| _|_|_| _|_| _| _| _|_|_| _|_| _|_|_|
+_| _| _| _| _|_|_|_| _|_| _| _| _|_|_|_| _|
+_| _| _| _| _| _| _| _| _| _| _|
+ _|_|_| _| _| _|_|_| _| _| _|_|_| _|_|_| _|_|_|
+ _|
+ _|
+
+ _| _|
+_|_|_|_| _|_| _|_|_|
+ _| _|_|_|_| _| _|
+ _| _| _| _|
+ _|_| _|_|_| _|_|_|
+
+
+ _| _| _|
+ _| _| _| _| _|
+_|_|_|_| _|_| _| _| _|_| _|_|_| _|
+ _| _| _| _|_| _|_|_|_| _| _| _|
+ _| _| _| _| _| _| _| _| _|
+ _|_| _|_| _| _| _|_|_| _| _| _|
+ _|
+
+
+ _| _| _| _| _|
+ _| _|_| _|_|_| _|_|_| _| _| _|
+_| _| _| _| _|_| _| _| _|_| _|
+ _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _|_| _|_|_| _| _| _| _| _|
+ _|
+ _|
+
+ _|
+ _|_|_| _|_|_| _|_|_| _|_|_| _|_|_| _|_| _|
+_| _| _| _| _| _| _| _| _| _|_|_|_|
+_| _| _| _| _| _| _| _| _| _|
+ _|_|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _|
+ _|
+ _|
+ _| _| _|
+_| _| _| _| _| _| _| _|
+_| _|_|_| _|_| _|_| _| _| _| _|
+_| _| _| _| _|_|_|_| _| _|_|_|_| _|
+_| _| _| _| _| _| _| _|
+_| _| _| _| _|_|_| _| _| _| _|
+ _|
+
+
+ _| _| _| _| _|
+ _| _|_| _|_|_| _|_|_| _| _| _|
+_| _| _| _| _|_| _| _| _|_| _|
+ _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _|_| _|_|_| _| _| _| _| _|
+ _|
+ _|
+
+ _| _| _| _|
+_|_|_|_| _|_|_| _|_| _|_|_| _| _|_| _|_|_|_|
+ _| _| _| _|_|_|_| _| _| _| _| _| _|
+ _| _| _| _| _| _| _| _| _| _|
+ _|_| _| _| _|_|_| _|_|_| _| _|_| _|_|
+ _|
+ _|
+
+ _| _| _| _|
+_|_|_|_| _|_|_| _|_|_| _| _| _|_| _|_|_| _|_|_|
+ _| _| _| _| _| _|_| _|_|_|_| _| _| _|_|
+ _| _| _| _| _| _| _| _| _| _| _|_|
+ _|_| _| _| _| _|_|_| _| _| _|_|_| _| _| _|_|_|
+
+
+
+ _| _|_| _|_| _| _|
+ _| _|_|_| _|_|_| _| _| _| _| _|_| _|
+_| _| _| _|_| _| _| _|_|_|_| _|_|_|_| _| _|_|_|_| _|
+ _| _| _| _|_| _| _| _| _| _| _| _|
+ _| _|_|_| _|_|_| _|_|_| _| _| _| _|_|_| _|
+
+
+
+ _| _| _| _|
+ _|_|_| _| _|_|_|_| _|_|_| _|_| _|_|_| _|_|
+_| _| _| _| _| _| _| _| _|_| _|_|_|_|
+_| _| _| _| _| _| _| _| _|_| _|
+ _|_|_| _| _|_| _| _| _|_| _|_|_| _|_|_|
+
+
+ _|
+ _| _|
+ _|_|_| _| _|_| _|_| _|_|_| _|_|_|_|
+_| _| _|_| _|_|_|_| _| _| _|
+_| _| _| _| _| _| _|
+ _|_|_| _| _|_|_| _| _| _|_|
+
+
+
+ _| _| _|
+ _|_|_| _|_|_| _|_| _| _|
+_|_| _| _| _|_|_|_| _| _|
+ _|_| _| _| _| _| _|
+_|_|_| _| _| _|_|_| _| _|
+
+
+
+ _| _|
+ _|_|_| _|_|_| _| _|_| _|_|_| _|_|_|_| _|_|_|
+_|_| _| _|_| _| _| _| _| _|_|
+ _|_| _| _| _| _| _| _| _|_|
+_|_|_| _|_|_| _| _| _|_|_| _|_| _|_|_|
+ _|
+ _|
+
+ _| _| _| _|
+ _| _|_| _| _|_| _|_|_| _|_|_| _|
+_| _|_|_|_| _|_| _| _| _| _| _|
+ _| _| _| _| _| _| _| _|
+ _| _|_|_| _| _| _|_|_| _| _| _|
+
+
+
+ _| _| _|
+_|_|_|_| _|_|_| _|_|_|
+ _| _| _| _| _|_|
+ _| _| _| _| _|_|
+ _|_| _| _| _| _|_|_|
+
+
+ _|
+ _| _|
+_| _| _| _|_|_| _|_|_| _|_|_| _|_|_|_|
+_| _| _| _| _| _|_| _| _| _|
+ _| _| _| _| _| _| _|_| _| _| _|
+ _| _| _|_|_| _|_|_| _| _| _|_|
+
+
+
+ _| _| _|
+ _|_|_| _|_|_| _|_|_| _| _| _|_| _|_|_|
+_| _| _| _| _| _|_| _|_|_|_| _| _|
+_| _| _| _| _| _| _| _| _| _|
+ _|_|_| _| _| _| _|_|_| _| _| _|_|_| _| _| _|
+
+
+
+
+
+ _|_|_|_|_|
+
+
+
+
+
+ _|
+ _|_|_|
+_|_|_|_|_| _| _| _|
+ _| _| _|
+ _| _| _|
+
+
+
+ _| _| _| _| _|
+_|_|_|_|_| _|_|_| _|_| _|_|_| _|_|_| _|_|_|
+ _| _| _| _| _|_|_|_| _| _| _| _| _| _| _| _|_|_|_|_|
+_|_|_|_|_| _| _| _| _| _| _| _| _| _| _|
+ _| _| _|_|_| _|_|_| _|_|_| _| _|_|_| _| _|
+
+
+
+ _| _|
+ _|_|_| _|_| _| _| _|_| _|
+_| _| _|_|_|_| _| _| _|_|_|_| _|
+_| _| _| _| _| _| _|
+ _|_|_| _|_|_| _| _|_|_| _|
+
+
+ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \
+( < | j | o | s | h | k | > )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( j | o | s | h | k | @ | i | n | f | l | u | x | : | / | e | t | c | / | l )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( o | g | r | o | t | a | t | e | . | d | > ) ( s | h ) ( - | n ) ( * )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | j | o | s | h | k | > ) ( a | p | a | c | h | e | : ) ( l | i | n | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( 1 | 4 | : ) ( s | y | n | t | a | x ) ( e | r | r | o | r ) ( n | e | a | r )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( u | n | e | x | p | e | c | t | e | d ) ( t | o | k | e | n ) ( ` | } | ' )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | j | o | s | h | k | > ) ( a | p | a | c | h | e | : ) ( l | i | n | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \
+( 1 | 4 | : ) ( ` | } | ' )
+ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | j | o | s | h | k | > ) ( t | h | e ) ( p | l | o | t )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \
+( t | h | i | c | k | e | n | s )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | a | s | u | f | f | i | e | l | d | > ) ( t | h | o | s | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( a | r | e | n | ' | t ) ( s | h | e | l | l ) ( s | c | r | i | p | t | s )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | e | r | i | c | h | > ) ( t | h | i | s ) ( w | a | s | n | ' | t )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \
+( c | h | i | c | k | e | n | . )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _
+ / \ / \ / \ / \
+ ( - | - ) ( i | n )
+ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( # | d | e | b | i | a | n | - | d | e | v | e | l )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|<|j|o|s|h|k|>| |j|o|s|h|k|@|i|n|f|l|u|x|:|/|e|t|c|/|l|o|g|r|o|t|a|t|e|.|d|>|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
++-+-+ +-+-+ +-+
+|s|h| |-|n| |*|
++-+-+ +-+-+ +-+
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+
+|<|j|o|s|h|k|>| |a|p|a|c|h|e|:| |l|i|n|e| |1|4|:| |s|y|n|t|a|x| |e|r|r|o|r|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+
++-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+
+|n|e|a|r| |u|n|e|x|p|e|c|t|e|d| |t|o|k|e|n| |`|}|'|
++-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+
+|<|j|o|s|h|k|>| |a|p|a|c|h|e|:| |l|i|n|e| |1|4|:| |`|}|'|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+-+
+|<|j|o|s|h|k|>| |t|h|e| |p|l|o|t| |t|h|i|c|k|e|n|s|
++-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+-+
++-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+
+|<|a|s|u|f|f|i|e|l|d|>| |t|h|o|s|e| |a|r|e|n|'|t| |s|h|e|l|l| |s|c|r|i|p|t|s|
++-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
+|<|e|r|i|c|h|>| |t|h|i|s| |w|a|s|n|'|t| |c|h|i|c|k|e|n|.|
++-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
+ +-+-+ +-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |-|-| |i|n| |#|d|e|b|i|a|n|-|d|e|v|e|l|
+ +-+-+ +-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
+ __ _ _ _ __
+ \ \| | _| |__ ___ ___ (_)/ /
+ \ \ |/ / '_ \/ __|/ _ \| / /
+ / / <| | | \__ \ (_) | \ \
+ /_/|_|\_\_| |_|___/\___// |\_\
+ |__/
+ _ __ _ __ _ ____ _ _ _
+ ___| |_ ___ / /__ ___ _| |/ _|_ __ (_) / __ \| | _| |__ ___ ___ (_)
+ / __| __/ _ \ / (_) \/ / | | | | |_| '_ \| |/ / _` | |/ / '_ \/ __|/ _ \| |
+ | (__| || __// / _ > <| |_| | | _| | | | | | (_| | <| | | \__ \ (_) | |
+ \___|\__\___/_/ (_)_/\_\\__,_|_|_| |_| |_|_|\ \__,_|_|\_\_| |_|___/\___// |
+ \____/ |__/
+ _ __ _ _ _ _ __
+ | |__ ___ \ \ __| | ___| |_ __ _| |_ ___ _ __ __ _ ___ | | / /
+ | '_ \/ __| \ \/ _` | / _ \ __/ _` | __/ _ \| '__/ _` |/ _ \| | / /
+ | | | \__ \ / / (_| || __/ || (_| | || (_) | | | (_| | (_) | |/ /
+ |_| |_|___/ /_/ \__,_(_)___|\__\__,_|\__\___/|_| \__, |\___/|_/_/
+ |___/
+
+ __/\__ _ __
+ \ / | '_ \ _____
+ /_ _\ | | | |_____|
+ \/ |_| |_|
+
+ _ __ _ _ _ __
+ _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ /
+ (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / /
+ | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \
+ (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ _ _ _ _ _ _
+ __ ____ _| |_ _ __ _ _ ___ _| || | / | ___ _ __ (_) |
+ \ \/ / _` | __| '_ \| | | / __| (_) || |_| | / _ \ '_ \| | |
+ > < (_| | |_| | | | |_| \__ \ _|__ _| | | __/ | | | | |
+ /_/\_\__,_|\__|_| |_|\__, |___/ (_) |_| |_| \___|_| |_|_|_|
+ |___/
+
+ _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___
+ | '__/ _` |/ _ \ '_ \ | '__/ _ \| '__| '__/ _ \
+ | | | (_| | __/ | | | | | | (_) | | | | | __/
+ |_| \__,_|\___|_| |_| |_| \___/|_| |_| \___|
+
+ _ _ _ _
+ _ __ ___| | _____ | |_ __| | ___| |_ ___ ___ _ ____ _____ _ __ _ _
+ | '_ \ / _ \ |/ / _ \| __| / _` |/ _ \ __/ __/ _ \ '_ \ \/ / _ \ '_ \| | | |
+ | | | | __/ < (_) | |_ | (_| | __/ || (_| __/ |_) > < __/ | | | |_| |
+ |_| |_|\___|_|\_\___/ \__| \__,_|\___|\__\___\___| .__/_/\_\___|_| |_|\__,_|
+ |_|
+ ___ _
+ ( ) \ ( )
+ |/ | | \|
+ > >
+ | |
+ /_/
+ _ __ _ _ _ __
+ _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ /
+ (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / /
+ | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \
+ (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ ___ _ _ _ _ _ _
+ ( ) \ ( ) _| || | / | ___ _ __ (_) |
+ |/ | | \| (_) || |_| | / _ \ '_ \| | |
+ > > _|__ _| | | __/ | | | | |
+ | | (_) |_| |_| \___|_| |_|_|_|
+ /_/
+ _ _ _ _ __ _ _ _ __
+ | |_ ___ | |_ __ ___| |__ | |_ \ \| | _| |__ ___ ___ (_)/ /
+ | __/ _ \| | '_ \ / _ \ '_ \| __| \ \ |/ / '_ \/ __|/ _ \| / /
+ | || (_) | | |_) | | __/ | | | |_ / / <| | | \__ \ (_) | \ \
+ \__\___/|_| .__/ \___|_| |_|\__| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ _ _ _ _
+ ___ _ __ ___| | _____(_) |__ | |_
+ / __| '_ \ / _ \ |/ / __| | '_ \| __|
+ \__ \ | | | __/ < (__| | | | | |_
+ |___/_| |_|\___|_|\_\___|_|_| |_|\__|
+
+ _ _ __ _ _ _ __ __ __
+ ___ ___ ___ | |__ | |_ \ \ __| | | ___(_)/ _|/ _|_ _ ___ __ _ / /
+ / _ \/ __|/ _ \| '_ \| __| \ \/ _` | |/ _ \ | |_| |_| | | / __|/ _` / /
+ | __/\__ \ (_) | | | | |_ / / (_| | | __/ | _| _| |_| \__ \ (_| \ \
+ \___||___/\___/|_| |_|\__| /_/ \__,_|_|\___|_|_| |_| \__,_|___/\__,_|\_\
+
+ _ _ _ _ _
+ | | | ___| |__ ___ | |_( )_ __ ___ _ __ __ _
+ | | |/ _ \ '_ \/ __| | __|/| '_ \ / _ \ '__/ _` |
+ | | | __/ | | \__ \ | |_ | | | | __/ | | (_| |
+ |_|_|\___|_| |_|___/ \__| |_| |_|\___|_| \__,_|
+
+ _ _
+ ___| |_ _ __ (_)_ __ ___ ___
+ / __| __| '_ \| | '__/ __/ __|
+ \__ \ |_| |_) | | | | (__\__ \
+ |___/\__| .__/|_|_| \___|___/
+ |_|
+ _ _ _ __ _ _ __
+ ___(_) |__ | |_ \ \| |__ ___(_)_ __ ___ / /
+ / __| | '_ \| __| \ \ '_ \ / __| | '__/ _ \/ /
+ \__ \ | | | | |_ / / | | | (__| | | | __/\ \
+ |___/_|_| |_|\__| /_/|_| |_|\___|_|_| \___| \_\
+
+ _ _ _ _ _
+ _ __ ___| | _____(_) |__ ___ | |_( )_ __ ___ __ ___ __
+ | '_ \ / _ \ |/ / __| | '_ \ / __| | __|/| '_ \/ __|/ _` \ \ /\ / /
+ _| | | | __/ < (__| | | | | (__ | |_ | | | \__ \ (_| |\ V V /
+ (_)_| |_|\___|_|\_\___|_|_| |_|\___| \__| |_| |_|___/\__,_| \_/\_/
+
+ _
+ _ __ (_)
+ | '_ \| | _____ _____
+ | | | | | |_____|_____|
+ |_| |_|_|
+
+ _ _ _ _ _ _ _
+ | | _____ _____ __| | _ __ __ _(_) |__ ___ __| |_| || |_
+ | |/ _ \ \ / / _ \/ _` |_____| '_ \ / _` | | '_ \ / _ \/ _` |_ .. _|
+ | | __/\ V / __/ (_| |_____| | | | (_| | | |_) | __/ (_| |_ _|
+ |_|\___| \_/ \___|\__,_| |_| |_|\__,_|_|_.__/ \___|\__,_| |_||_|
+
+
+ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/
+ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/
+ _/
+ _/
+
+ _/ _/ _/ _/_/_/_/_/ _/
+ _/_/ _/_/_/ _/_/_/ _/ _/ _/ _/
+ _/ _/ _/ _/_/ _/ _/ _/_/ _/ _/_/_/ _/ _/
+ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/ _/_/_/_/ _/
+ _/ _/
+_/ _/_/_/_/_/_/
+
+ _/_/ _/ _/
+ _/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/
+ _/ _/ _/_/_/_/ _/ _/ _/ _/_/ _/ _/_/_/_/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+_/ _/ _/ _/ _/_/_/ _/ _/ _/ _/ _/_/_/
+
+
+
+ _/ _/ _/
+_/_/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/_/ _/_/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/_/
+ _/
+ _/_/
+
+ _/ _/ _/ _/
+_/_/_/_/ _/_/_/ _/_/_/_/ _/_/ _/_/_/ _/
+ _/ _/ _/ _/ _/_/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/
+ _/_/ _/_/_/ _/_/ _/_/_/ _/ _/_/_/ _/
+
+
+
+ _/ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/
+ _/_/ _/ _/ _/_/_/_/_/ _/ _/ _/_/_/_/_/
+ _/_/ _/ _/ _/ _/ _/_/_/
+_/_/_/ _/ _/ _/ _/ _/ _/ _/
+
+
+
+ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/
+ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/
+ _/
+ _/
+
+ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/ _/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ _/
+ _/
+ _/
+
+ _/ _/ _/ _/ _/
+ _/ _/_/_/ _/_/ _/_/ _/ _/ _/
+ _/ _/ _/ _/ _/_/_/_/ _/ _/_/_/_/
+ _/ _/ _/ _/ _/ _/ _/
+_/ _/ _/ _/ _/_/_/ _/ _/ _/
+
+
+
+ _/
+ _/_/_/ _/ _/ _/_/_/ _/_/_/_/ _/_/_/ _/ _/
+ _/_/ _/ _/ _/ _/ _/ _/ _/ _/_/
+ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+_/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/
+ _/
+ _/_/
+
+
+ _/_/ _/ _/_/ _/ _/_/ _/_/ _/ _/_/
+ _/_/_/_/ _/_/ _/_/ _/ _/ _/_/
+_/ _/ _/ _/ _/ _/
+ _/_/_/ _/ _/ _/_/ _/
+
+
+
+
+ _/_/_/ _/_/ _/_/_/ _/ _/_/
+ _/ _/ _/_/_/_/ _/ _/ _/_/
+ _/ _/ _/ _/ _/ _/
+_/ _/ _/_/_/ _/_/_/ _/
+
+
+
+
+ _/ _/ _/_/_/ _/_/ _/ _/ _/_/_/ _/_/ _/_/_/
+ _/ _/ _/ _/ _/_/_/_/ _/_/ _/ _/ _/_/_/_/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/_/_/ _/_/_/
+ _/
+ _/
+
+ _/ _/
+_/_/_/_/ _/_/ _/_/_/
+ _/ _/_/_/_/ _/ _/
+_/ _/ _/ _/
+ _/_/ _/_/_/ _/_/_/
+
+
+ _/ _/ _/
+ _/ _/ _/ _/ _/
+_/_/_/_/ _/_/ _/ _/ _/_/ _/_/_/ _/
+ _/ _/ _/ _/_/ _/_/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/ _/_/ _/ _/ _/_/_/ _/ _/ _/
+ _/
+
+
+ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/
+ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/
+ _/
+ _/
+
+ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/ _/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ _/
+ _/
+ _/
+
+ _/ _/ _/ _/ _/
+ _/ _/_/_/ _/_/ _/_/ _/ _/ _/
+ _/ _/ _/ _/ _/_/_/_/ _/ _/_/_/_/
+ _/ _/ _/ _/ _/ _/ _/
+_/ _/ _/ _/ _/_/_/ _/ _/ _/
+
+
+ _/ _/ _/
+ _/ _/ _/
+ _/
+ _/
+ _/
+ _/
+ _/
+
+
+ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/
+ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/
+ _/
+ _/
+
+ _/ _/ _/ _/
+_/_/_/_/ _/_/_/ _/_/ _/_/_/ _/ _/_/ _/_/_/_/
+ _/ _/ _/ _/_/_/_/ _/ _/ _/ _/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/ _/ _/ _/_/_/ _/_/_/ _/ _/_/ _/_/
+ _/
+ _/
+
+ _/ _/ _/ _/
+_/_/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/_/_/
+ _/ _/ _/ _/ _/ _/_/ _/_/_/_/ _/ _/ _/_/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/
+ _/_/ _/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/_/_/
+
+
+
+ _/ _/_/ _/_/ _/ _/
+ _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/_/ _/
+_/ _/ _/ _/_/ _/ _/ _/_/_/_/_/_/_/_/ _/ _/_/_/_/ _/
+ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/ _/_/_/ _/
+
+
+
+ _/ _/ _/ _/
+ _/_/_/ _/ _/_/_/_/ _/_/_/ _/_/ _/_/_/ _/_/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/_/_/_/
+_/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/
+ _/_/_/ _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/
+
+
+ _/
+ _/ _/
+ _/_/_/ _/ _/_/ _/_/ _/_/_/ _/_/_/_/
+ _/ _/ _/_/ _/_/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/ _/_/_/ _/ _/ _/_/
+
+
+
+ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/ _/ _/
+ _/_/ _/ _/ _/_/_/_/ _/ _/
+ _/_/ _/ _/ _/ _/ _/
+_/_/_/ _/ _/ _/_/_/ _/ _/
+
+
+
+ _/ _/
+ _/_/_/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/_/ _/_/_/
+ _/_/ _/ _/_/ _/ _/ _/ _/ _/_/
+ _/_/ _/ _/ _/ _/ _/ _/ _/_/
+_/_/_/ _/_/_/ _/ _/ _/_/_/ _/_/ _/_/_/
+ _/
+ _/
+
+ _/ _/ _/ _/
+ _/ _/_/ _/ _/_/ _/_/_/ _/_/_/ _/
+_/ _/_/_/_/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/
+
+
+
+ _/ _/ _/
+_/_/_/_/ _/_/_/ _/_/_/
+ _/ _/ _/ _/ _/_/
+_/ _/ _/ _/ _/_/
+ _/_/ _/ _/ _/ _/_/_/
+
+
+ _/
+ _/ _/
+ _/ _/ _/ _/_/_/ _/_/_/ _/_/_/ _/_/_/_/
+_/ _/ _/ _/ _/ _/_/ _/ _/ _/
+ _/ _/ _/ _/ _/ _/ _/_/ _/ _/ _/
+ _/ _/ _/_/_/ _/_/_/ _/ _/ _/_/
+
+
+
+ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/
+ _/ _/ _/ _/ _/ _/_/ _/_/_/_/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/
+
+
+
+
+
+
+
+
+
+
+
+ _/
+ _/_/_/
+_/_/_/_/_/ _/_/_/_/_/ _/ _/ _/
+ _/ _/ _/
+ _/ _/ _/
+
+
+
+ _/ _/ _/ _/ _/
+ _/_/_/_/_/ _/_/_/ _/_/ _/_/_/ _/_/_/ _/_/_/
+ _/ _/ _/ _/ _/_/_/_/ _/ _/ _/ _/ _/ _/ _/
+_/_/_/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/_/_/ _/ _/
+
+
+
+ _/ _/
+ _/_/_/ _/_/ _/ _/ _/_/ _/
+_/_/_/_/_/ _/ _/ _/_/_/_/ _/ _/ _/_/_/_/ _/
+ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/_/_/ _/ _/_/_/ _/
+
+
+
+/o _ _|_ | \
+\|(_)_>| ||</
+_|
+ __ _
+ o _ _|_ | / \o.__|_| o /__|_ _ /| _ _ .___|_ _._|_ _ _|\ _|_
+ |(_)_>| ||<| (|/|| || ||_|><o/(/_|_(_/ |(_)(_||(_)|_(_| |_(/_o(_|/ _>| |
+_| \__ _|
+
+__._ \|/
+ | | /|\
+
+
+/o _ _|_ | \ _.._ _. _|_ _ o |o._ _ /||_|_o _ .__|_ _. _ ._.__ ._
+\|(_)_>| ||</ (_||_)(_|(_| |(/_o ||| |(/_ | | o _>\/| ||_(_|>< (/_| |(_)|
+_| | /
+ -.
+._ _ _.._ ._ _ ._ _ __|_ _ _| _|_ _ | _ ._ \|_/
+| |(/_(_|| |_|| |(/_><|_)(/_(_ |_(/_(_| |_(_)|<(/_| | |
+ | -'
+ -.
+/o _ _|_ | \ _.._ _. _|_ _ o |o._ _ /||_|_o \|_/
+\|(_)_>| ||</ (_||_)(_|(_| |(/_o ||| |(/_ | | o |
+_| | -'
+
+/o _ _|_ | \ _|_|_ _ ._ | __|_ _|_|_ o _| _ ._ _
+\|(_)_>| ||</ |_| |(/_ |_)|(_)|_ |_| ||(_|<(/_| |_>
+_| |
+ _ _
+/ _. _ _|__|_o _ | _|\ _|_|_ _ _ _ _..__ ._/_|_ _|_ _ || _ _._o.__|_ _
+\(_|_>|_|| | |(/_|(_|/ |_| |(_)_>(/_ (_||(/_| | |_ _>| |(/_|| _>(_| ||_)|__>
+ |
+
+/ _ ._o _|_ \ _|_|_ o _ _. _._/_|_ _|_ o _| _ ._
+\(/_| |(_| |/ |_| ||_> \/\/(_|_>| | |_ (_| ||(_|<(/_| |o
+
+
+ ____ o._ -|-|- _| _ |_ o _..____| _ _ |
+ || | -|-|-(_|(/_|_)|(_|| |(_|(/_\/(/_|
+
+<joshk>&SPjoshk&Atinflux:/etc/logrotate.d>&SPsh&SP-n&SP*
+<joshk>&SPapache:&SPline&SP14:&SPsyntax&SPerror&SPnear&SPunexpected&SPtoken
+&'!&!)'
+<joshk>&SPapache:&SPline&SP14:&SP&'!&!)'
+<joshk>&SPthe&SPplot&SPthickens
+<asuffield>&SPthose&SParen't&SPshell&SPscripts
+<erich>&SPthis&SPwasn't&SPchicken.
+&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP--&SPin&SP&Nbdebian-devel
+ _ _
+ /o | | | | \
+/ __ , | | | | \
+\ | / \_/ \_|/ \ |/_) /
+ \|/\__/ \/ | |_/| \_//
+ /|
+ \|
+ _ _ _ _
+ o | | | | ____ o | | | | o /
+ __ , | | | | / __,\ _ _ | | | | /_ _|_ __
+ | / \_/ \_|/ \ |/_) | / | || / |/ | |/ |/ | | /\/ /|/ | /
+ |/\__/ \/ | |_/| \_/| \_/|/ |_/ | |_/|__/|__/ \_/|_/ /\_/o/ |__/|_/\___/
+/| \____/ |\
+\| |/
+ _ _
+ /| | | \ | |
+ / | | __ __, ,_ __ _|_ __, _|_ _ __| \ , | |
+ / |/ / \_/ | / | / \_| / | | |/ / | / / \_|/ \
+/ |__/\__/ \_/|/ |_/\__/ |_/\_/|_/|_/|__/o\_/|_// \/ | |_/
+ /|
+ \|
+
+
+ _ _ \|/
+-----/ |/ | --*--
+ | |_/ /|\
+
+
+ _ _ _
+ /o | | | | \ | | o
+/ __ , | | | | \ __, _ __, __ | | _
+\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/
+ \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o
+ /| /|
+ \| \|
+ _ ,
+| | o /|| | o
+| | _ _ _ ||__|_ , _ _ _|_ __,
+|/ | / |/ | |/ | | / \_| | / |/ | | / | /\/
+|__/|_/ | |_/|__/ | | o \/ \_/|/ | |_/|_/\_/|_/ /\_/
+ /|
+ \|
+
+
+ _ ,_ ,_ __ ,_ _ _ _ __, ,_
+|/ / | / | / \_/ | / |/ | |/ / | / |
+|__/ |_/ |_/\__/ |_/ | |_/|__/\_/|_/ |_/
+
+
+ _
+ | | |
+ _ _ _ _ _ __ _|_ _ __| _|_ __ | | _ _ _
+| | / |/ | |/ /\/ |/ \_|/ / | |/ / | | / \_|/_) |/ / |/ |
+ \_/|_/ | |_/|__/ /\_/|__/ |__/\___/|_/|__/\_/|_/ |_/\__/ | \_/|__/ | |_/
+ /|
+ \|
+o o
+\\ /
+ |
+ >
+ |
+ /
+
+ _ _ _
+ /o | | | | \ | | o
+/ __ , | | | | \ __, _ __, __ | | _
+\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/
+ \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o
+ /| /|
+ \| \|
+ _ , o o
+| | o /|| | o \\ /
+| | _ _ _ ||__|_ |
+|/ | / |/ | |/ | | >
+|__/|_/ | |_/|__/ | | o |
+ /
+
+ _ _ _ _
+ /o | | | | \ | | | |
+/ __ , | | | | \ _|_ | | _ _ | | __ _|_
+\ | / \_/ \_|/ \ |/_) / | |/ \ |/ |/ \_|/ / \_|
+ \|/\__/ \/ | |_/| \_// |_/| |_/|__/ |__/ |__/\__/ |_/
+ /| /|
+ \| \|
+ _ _
+ | | o | |
+_|_ | | __ | | _ _ _ ,
+ | |/ \ | / |/_) |/ / |/ | / \_
+ |_/| |_/|_/\___/| \_/|__/ | |_/ \/
+
+
+ _ _ _ _
+ / | | | | o | | | \ | |
+/ __, , | | | | _ | | __| \ _|_ | | __ , _
+\ / | / \_| | |/ |/ | |/ |/ / | / | |/ \ / \_/ \_|/
+ \\_/|_/ \/ \_/|_/|__/|__/|_/|__/|__/\_/|_// |_/| |_/\__/ \/ |__/
+ |\ |\
+ |/ |/
+ o _ _ _
+ / | | | | | |
+ __, ,_ _ _ _ _|_ , | | _ | | | |
+/ | / | |/ / |/ | | / \_|/ \ |/ |/ |/
+\_/|_/ |_/|__/ | |_/ |_/ \/ | |_/|__/|__/|__/
+
+
+
+ o
+ , __ ,_ _ _|_ ,
+/ \_/ / | | |/ \_| / \_
+ \/ \___/ |_/|_/|__/ |_/ \/
+ /|
+ \|
+ _ _
+ / o | | \ | | o
+/ _ ,_ __ | | \ _|_ | | ,
+\ |/ / | | / |/ \ / | |/ \ | / \_
+ \|__/ |_/|_/\___/| |_// |_/| |_/|_/ \/
+
+
+ o _ _
+ / | | o | |
+ __, , _ _ _|_ __ | | __ | | _ _ _
+| | |_/ | / \_/ |/ | | / |/ \ | / |/_) |/ / |/ |
+ \/ \/ \_/|_/ \/ | |_/ |_/ \___/| |_/|_/\___/| \_/|__/ | |_/o
+
+
+
+ o
+ _ _
+ ---------- | / |/ |
+ |_/ | |_/
+
+
+ _ _
+ | | | | | o | | |
+--+--+-- __| _ | | __, _ _ __| _ _ | |
+--+--+--/ | |/ |/ \_| / | / |/ |-----/ | |/ | |_|/ |/
+ | | \_/|_/|__/\_/ |_/\_/|_/ | |_/ \_/|_/|__/ \/ |__/|__/
+
+
+ /_) | | \ \
+ / | _ \ __| __ \ | /\ \
+\ \ | ( |\__ \ | | | < /
+ \_\ |\___/ ____/_| |_|_|\_\_/
+ ___/
+ _) | | __ \ _) _| | / |
+ | _ \ __| __ \ | / / _` | | __ \ | | | |\ \ /_) / _ \ __|
+ | ( |\__ \ | | | < | ( | | | | __| | | | ` < / __/ |
+ |\___/ ____/_| |_|_|\_\\ \__,_|_|_| _|_| _|\__,_| _/\_\_)_/ \___|\__|
+___/ \____/
+ / | | | |\ \ |
+ __| / | _ \ _` | __| _ \ __| _` | __| _ \ _` | \ \ __| __ \
+ ( / | ( | ( | | ( | | ( | | __/ ( | / \__ \ | | |
+\___|_/ _|\___/ \__, |_| \___/ \__|\__,_|\__|\___|_)\__,_| _/ ____/_| |_|
+ |___/
+ \
+ __ \ \ /
+_____| | | _ _\
+ _| _| \/
+
+ /_) | | \ \ |
+ / | _ \ __| __ \ | /\ \ _` | __ \ _` | __| __ \ _ \_)
+\ \ | ( |\__ \ | | | < / ( | | | ( | ( | | | __/
+ \_\ |\___/ ____/_| |_|_|\_\_/ \__,_| .__/ \__,_|\___|_| |_|\___|_)
+ ___/ _|
+ |_) _ | | | |
+ | | __ \ _ \ | | | _) __| | | __ \ __| _` |\ \ /
+ | | | | __/ |___ __| \__ \ | | | | | ( | ` <
+_|_|_| _|\___| _| _| _) ____/\__, |_| _|\__|\__,_| _/\_\
+ ____/
+
+ _ \ __| __| _ \ __| __ \ _ \ _` | __|
+ __/ | | ( | | | | __/ ( | |
+\___|_| _| \___/ _| _| _|\___|\__,_|_|
+
+ | |
+ | | __ \ _ \\ \ / __ \ _ \ __| __| _ \ _` |
+ | | | | __/ ` < | | __/ ( | __/ ( |
+\__,_|_| _|\___| _/\_\ .__/ \___|\___|\__|\___|\__,_|
+ _|
+ | | )\ \ )
+ __| _ \ | / _ \ __ \ \| | /
+ | ( | < __/ | | ` >
+\__|\___/ _|\_\\___|_| _| |
+ _/
+ /_) | | \ \ |
+ / | _ \ __| __ \ | /\ \ _` | __ \ _` | __| __ \ _ \_)
+\ \ | ( |\__ \ | | | < / ( | | | ( | ( | | | __/
+ \_\ |\___/ ____/_| |_|_|\_\_/ \__,_| .__/ \__,_|\___|_| |_|\___|_)
+ ___/ _|
+ |_) _ | | | )\ \ )
+ | | __ \ _ \ | | | _) \| | /
+ | | | | __/ |___ __| ` >
+_|_|_| _|\___| _| _| _) |
+ _/
+ /_) | | \ \ | | | |
+ / | _ \ __| __ \ | /\ \ __| __ \ _ \ __ \ | _ \ __|
+\ \ | ( |\__ \ | | | < / | | | | __/ | | | ( | |
+ \_\ |\___/ ____/_| |_|_|\_\_/ \__|_| |_|\___| .__/ _|\___/ \__|
+ ___/ _|
+ | | _) |
+ __| __ \ | __| | / _ \ __ \ __|
+ | | | | | ( < __/ | |\__ \
+\__|_| |_|_|\___|_|\_\\___|_| _|____/
+
+ / _| _|_) | |\ \ | |
+ / _` | __| | | | | | _ \ | _` | \ \ __| __ \ _ \ __| _ \
+\ \ ( |\__ \ | | __| __| | __/ | ( | / | | | | ( |\__ \ __/
+ \_\\__,_|____/\__,_|_| _| _|\___|_|\__,_| _/ \__|_| |_|\___/ ____/\___|
+
+ ) | | | |
+ _` | __| _ \ __ \ / __| __| __ \ _ \ | |
+ ( | | __/ | | | \__ \ | | | __/ | |
+\__,_|_| \___|_| _| \__| ____/_| |_|\___|_|_|
+
+ _) |
+ __| __| __| | __ \ __| __|
+\__ \ ( | | | | | \__ \
+____/\___|_| _| .__/ \__|____/
+ _|
+ / _) | \ \ | | _)
+ / _ \ __| | __| __ \ \ \ __| __ \ | __|
+\ \ __/ | | ( | | | / | | | | |\__ \
+ \_\\___|_| _|\___|_| |_|_/ \__|_| |_|_|____/
+
+ ) | | _) |
+\ \ \ / _` | __| __ \ / __| __| __ \ | __| | / _ \ __ \
+ \ \ \ / ( |\__ \ | | | ( | | | | ( < __/ | |
+ \_/\_/ \__,_|____/_| _| \__| \___|_| |_|_|\___|_|\_\\___|_| _|_)
+
+ _)
+ | __ \
+ _____|_____| | | |
+ _|_| _|
+
+ | | | | _) | |
+_ |_ |_| _` | _ \ __ \ | _` | __ \ _` | _ \\ \ / _ \ |
+_ |_ |_| ( | __/ | | | ( | | |_____| ( | __/ \ \ / __/ |
+ _| _| \__,_|\___|_.__/ _|\__,_|_| _| \__,_|\___| \_/ \___|_|
+
+ __ _ __ __ __
+ / / (_)___ _____/ /_ / /_\ \
+/ / / / __ \/ ___/ __ \/ //_/\ \
+\ \ / / /_/ (__ ) / / / ,< / /
+ \_\_/ /\____/____/_/ /_/_/|_| /_/
+ /___/
+ _ __ __ ______ _ ______ __ __
+ (_)___ _____/ /_ / /__/ ____ \(_)___ / __/ /_ ___ ___ _/_/__ / /_
+ / / __ \/ ___/ __ \/ //_/ / __ `/ / __ \/ /_/ / / / / |/_(_)_/_// _ \/ __/
+ / / /_/ (__ ) / / / ,< / / /_/ / / / / / __/ / /_/ /> <_ _/_/ / __/ /_
+ __/ /\____/____/_/ /_/_/|_|\ \__,_/_/_/ /_/_/ /_/\__,_/_/|_(_)_/ \___/\__/
+/___/ \____/
+ ____ __ __ ____
+ _____ _/_/ /___ ____ __________ / /_____ _/ /____ ____/ /\ \
+ / ___/_/_// / __ \/ __ `/ ___/ __ \/ __/ __ `/ __/ _ \ / __ / \ \
+/ /___/_/ / / /_/ / /_/ / / / /_/ / /_/ /_/ / /_/ __// /_/ / / /
+\___/_/ /_/\____/\__, /_/ \____/\__/\__,_/\__/\___(_)__,_/ /_/
+ /____/
+ __
+ _____/ /_ ____ __/|_
+ / ___/ __ \ ______/ __ \ | /
+ (__ ) / / / /_____/ / / / /_ __|
+/____/_/ /_/ /_/ /_/ |/
+
+ __ _ __ __ __ __
+ / / (_)___ _____/ /_ / /_\ \ ____ _____ ____ ______/ /_ ___ _
+/ / / / __ \/ ___/ __ \/ //_/\ \ / __ `/ __ \/ __ `/ ___/ __ \/ _ \(_)
+\ \ / / /_/ (__ ) / / / ,< / / / /_/ / /_/ / /_/ / /__/ / / / __/
+ \_\_/ /\____/____/_/ /_/_/|_| /_/ \__,_/ .___/\__,_/\___/_/ /_/\___(_)
+ /___/ /_/
+ ___ _____ __ __
+ / (_)___ ___ < / // / _ _______ ______ / /_____ __ __
+ / / / __ \/ _ \ / / // /_(_) / ___/ / / / __ \/ __/ __ `/ |/_/
+ / / / / / / __/ / /__ __/ (__ ) /_/ / / / / /_/ /_/ /> <
+/_/_/_/ /_/\___/ /_/ /_/ (_) /____/\__, /_/ /_/\__/\__,_/_/|_|
+ /____/
+
+ ___ ______________ _____ ____ ___ ____ ______
+ / _ \/ ___/ ___/ __ \/ ___/ / __ \/ _ \/ __ `/ ___/
+/ __/ / / / / /_/ / / / / / / __/ /_/ / /
+\___/_/ /_/ \____/_/ /_/ /_/\___/\__,_/_/
+
+ __ __
+ __ ______ ___ _ ______ ___ _____/ /____ ____/ /
+ / / / / __ \/ _ \| |/_/ __ \/ _ \/ ___/ __/ _ \/ __ /
+/ /_/ / / / / __/> </ /_/ / __/ /__/ /_/ __/ /_/ /
+\__,_/_/ /_/\___/_/|_/ .___/\___/\___/\__/\___/\__,_/
+ /_/
+ __ __ _ _ _
+ / /_____ / /_____ ____ ( )| |( )
+ / __/ __ \/ //_/ _ \/ __ \ V / /|/
+/ /_/ /_/ / ,< / __/ / / / _>_>
+\__/\____/_/|_|\___/_/ /_/ _/_/
+ /_/
+ __ _ __ __ __ __
+ / / (_)___ _____/ /_ / /_\ \ ____ _____ ____ ______/ /_ ___ _
+/ / / / __ \/ ___/ __ \/ //_/\ \ / __ `/ __ \/ __ `/ ___/ __ \/ _ \(_)
+\ \ / / /_/ (__ ) / / / ,< / / / /_/ / /_/ / /_/ / /__/ / / / __/
+ \_\_/ /\____/____/_/ /_/_/|_| /_/ \__,_/ .___/\__,_/\___/_/ /_/\___(_)
+ /___/ /_/
+ ___ _____ __ _ _ _
+ / (_)___ ___ < / // / _ ( )| |( )
+ / / / __ \/ _ \ / / // /_(_) V / /|/
+ / / / / / / __/ / /__ __/ _>_>
+/_/_/_/ /_/\___/ /_/ /_/ (_) _/_/
+ /_/
+ __ _ __ __ __ __ __ __ __
+ / / (_)___ _____/ /_ / /_\ \ / /_/ /_ ___ ____ / /___ / /_
+/ / / / __ \/ ___/ __ \/ //_/\ \ / __/ __ \/ _ \ / __ \/ / __ \/ __/
+\ \ / / /_/ (__ ) / / / ,< / / / /_/ / / / __/ / /_/ / / /_/ / /_
+ \_\_/ /\____/____/_/ /_/_/|_| /_/ \__/_/ /_/\___/ / .___/_/\____/\__/
+ /___/ /_/
+ __ __ _ __
+ / /_/ /_ (_)____/ /_____ ____ _____
+ / __/ __ \/ / ___/ //_/ _ \/ __ \/ ___/
+/ /_/ / / / / /__/ ,< / __/ / / (__ )
+\__/_/ /_/_/\___/_/|_|\___/_/ /_/____/
+
+ __ _________ __ ____ __ __
+ / / ____ ________ __/ __/ __(_)__ / /___/ /\ \ / /_/ /_ ____ ________
+/ / / __ `/ ___/ / / / /_/ /_/ / _ \/ / __ / \ \ / __/ __ \/ __ \/ ___/ _ \
+\ \/ /_/ (__ ) /_/ / __/ __/ / __/ / /_/ / / / / /_/ / / / /_/ (__ ) __/
+ \_\__,_/____/\__,_/_/ /_/ /_/\___/_/\__,_/ /_/ \__/_/ /_/\____/____/\___/
+
+ _ __ __ ____
+ ____ _________ ____ ( )/ /_ _____/ /_ ___ / / /
+ / __ `/ ___/ _ \/ __ \|// __/ / ___/ __ \/ _ \/ / /
+/ /_/ / / / __/ / / / / /_ (__ ) / / / __/ / /
+\__,_/_/ \___/_/ /_/ \__/ /____/_/ /_/\___/_/_/
+
+ _ __
+ _______________(_)___ / /______
+ / ___/ ___/ ___/ / __ \/ __/ ___/
+ (__ ) /__/ / / / /_/ / /_(__ )
+/____/\___/_/ /_/ .___/\__/____/
+ /_/
+ __ _ ____ __ __ _
+ / / ___ _____(_)____/ /\ \ / /_/ /_ (_)____
+/ / / _ \/ ___/ / ___/ __ \ \ / __/ __ \/ / ___/
+\ \/ __/ / / / /__/ / / / / / /_/ / / / (__ )
+ \_\___/_/ /_/\___/_/ /_/_/ \__/_/ /_/_/____/
+
+ _ __ __ _ __
+ _ ______ __________ ( )/ /_ _____/ /_ (_)____/ /_____ ____
+| | /| / / __ `/ ___/ __ \|// __/ / ___/ __ \/ / ___/ //_/ _ \/ __ \
+| |/ |/ / /_/ (__ ) / / / / /_ / /__/ / / / / /__/ ,< / __/ / / /
+|__/|__/\__,_/____/_/ /_/ \__/ \___/_/ /_/_/\___/_/|_|\___/_/ /_(_)
+
+ _
+ (_)___
+ ____________ / / __ \
+ /_____/_____/ / / / / /
+ /_/_/ /_/
+
+ __ __ __ __ _ __ __
+ __/ // /_____/ /__ / /_ (_)___ _____ ____/ /__ _ _____ / /
+ /_ _ __/ __ / _ \/ __ \/ / __ `/ __ \______/ __ / _ \ | / / _ \/ /
+/_ _ __/ /_/ / __/ /_/ / / /_/ / / / /_____/ /_/ / __/ |/ / __/ /
+ /_//_/ \__,_/\___/_.___/_/\__,_/_/ /_/ \__,_/\___/|___/\___/_/
+
+ __ _ _ _ __
+ / /(_)___ __| |_ | |__\ \
+< < | / _ (_-< ' \| / / > >
+ \_\/ \___/__/_||_|_\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ _ __ _ ___
+ (_)___ __| |_ | |__/ __ \(_)_ _ / _| |_ ___ _(_) / /__| |_ __ / / |___
+ | / _ (_-< ' \| / / / _` | | ' \| _| | || \ \ /_ / / -_) _/ _|/ /| / _ \
+ _/ \___/__/_||_|_\_\ \__,_|_|_||_|_| |_|\_,_/_\_(_)_/\___|\__\__/_/ |_\___/
+|__/ \____/
+ _ _ ___ _
+ __ _ _ _ ___| |_ __ _| |_ ___ __| \ \ __| |_ ___ _ _ _/\_
+/ _` | '_/ _ \ _/ _` | _/ -_)_/ _` |> > (_-< ' \ |___| ' \ > <
+\__, |_| \___/\__\__,_|\__\___(_)__,_/_/ /__/_||_| |_||_| \/
+|___/
+ __ _ _ _ __ _ _ _ _
+ / /(_)___ __| |_ | |__\ \ __ _ _ __ __ _ __| |_ ___(_) | (_)_ _ ___
+< < | / _ (_-< ' \| / / > > / _` | '_ \/ _` / _| ' \/ -_)_ | | | ' \/ -_)
+ \_\/ \___/__/_||_|_\_\/_/ \__,_| .__/\__,_\__|_||_\___(_) |_|_|_||_\___|
+ |__/ |_|
+ _ _ _ _ _
+/ | | (_) ____ _ _ _| |_ __ ___ __ ___ _ _ _ _ ___ _ _ _ _ ___ __ _ _ _
+| |_ _| (_-< || | ' \ _/ _` \ \ / / -_) '_| '_/ _ \ '_| | ' \/ -_) _` | '_|
+|_| |_(_) /__/\_, |_||_\__\__,_/_\_\ \___|_| |_| \___/_| |_||_\___\__,_|_|
+ |__/
+ _ _ _ _ ___ _
+ _ _ _ _ _____ ___ __ ___ __| |_ ___ __| | | |_ ___| |_____ _ _ ( ) \ ( )
+| || | ' \/ -_) \ / '_ \/ -_) _| _/ -_) _` | | _/ _ \ / / -_) ' \ \|| ||/
+ \_,_|_||_\___/_\_\ .__/\___\__|\__\___\__,_| \__\___/_\_\___|_||_| | |
+ |_| /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_)___ __| |_ | |__\ \ __ _ _ __ __ _ __| |_ ___(_) | (_)_ _ ___
+< < | / _ (_-< ' \| / / > > / _` | '_ \/ _` / _| ' \/ -_)_ | | | ' \/ -_)
+ \_\/ \___/__/_||_|_\_\/_/ \__,_| .__/\__,_\__|_||_\___(_) |_|_|_||_\___|
+ |__/ |_|
+ _ _ _ _ ___ _
+/ | | (_) ( ) \ ( )
+| |_ _| \|| ||/
+|_| |_(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_)___ __| |_ | |__\ \ | |_| |_ ___ _ __| |___| |_
+< < | / _ (_-< ' \| / / > > | _| ' \/ -_) | '_ \ / _ \ _|
+ \_\/ \___/__/_||_|_\_\/_/ \__|_||_\___| | .__/_\___/\__|
+ |__/ |_|
+ _ _ _ _
+| |_| |_ (_)__| |_____ _ _ ___
+| _| ' \| / _| / / -_) ' \(_-<
+ \__|_||_|_\__|_\_\___|_||_/__/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ____ _ / _|/ _(_)___| |__| \ \ | |_| |_ ___ ___ ___
+< </ _` (_-< || | _| _| / -_) / _` |> > | _| ' \/ _ (_-</ -_)
+ \_\__,_/__/\_,_|_| |_| |_\___|_\__,_/_/ \__|_||_\___/__/\___|
+
+ _ _ _ _ _ _ _
+ __ _ _ _ ___ _ _ ( ) |_ __| |_ ___| | | ___ __ _ _(_)_ __| |_ ___
+/ _` | '_/ -_) ' \|/| _| (_-< ' \/ -_) | | (_-</ _| '_| | '_ \ _(_-<
+\__,_|_| \___|_||_| \__| /__/_||_\___|_|_| /__/\__|_| |_| .__/\__/__/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ _(_)__| |_ \ \ | |_| |_ (_)___ __ __ ____ _ ____ _ ( ) |_
+< </ -_) '_| / _| ' \ > > | _| ' \| (_-< \ V V / _` (_-< ' \|/| _|
+ \_\___|_| |_\__|_||_/_/ \__|_||_|_/__/ \_/\_/\__,_/__/_||_| \__|
+
+ _ _ _
+ __| |_ (_)__| |_____ _ _
+/ _| ' \| / _| / / -_) ' \ _
+\__|_||_|_\__|_\_\___|_||_(_)
+
+ _
+ ___ ___ (_)_ _
+ |___|___| | | ' \
+ |_|_||_|
+
+ _ _ _ _ _ _ _
+ _| | |_ __| |___| |__(_)__ _ _ _ ___ __| |_____ _____| |
+|_ . _/ _` / -_) '_ \ / _` | ' \___/ _` / -_) V / -_) |
+|_ _\__,_\___|_.__/_\__,_|_||_| \__,_\___|\_/\___|_|
+ |_|_|
+
+ /o _ , |) |) \
+< | / \_/ \_|/\ |/) >
+ \|/\_/ \/ | |/| \//
+ (|
+ ____
+ o _ , |) |) / __,\ o |\ |\ o /__|_ _ /|\ _ _,
+ | / \_/ \_|/\ |/) | / | || /|/| |/ |/ | | /\/ /|/ | / / |/ / \_/ |
+ |/\_/ \/ | |/| \/| \_/|/ |/ | |_/|_/|_/ \/|_/ /\/o/ |_/|_/\__// |_/\_/ \/|/
+(| \____/ |) (|
+
+ ,_ _ _|_ _, _|_ _ _| \ , |) \|/
+/ | / \_| / | | |/ / | > / \_|/\ ----/|/| --*--
+ |/\_/ |_/\/|_/|_/|_/o\/|_// \/ | |/ | |_/ /|\
+
+
+ /o _ , |) |) \ _, _, _ |) _ o |\ o _
+< | / \_/ \_|/\ |/) > / | |/\_/ | / |/\ |/ |/ | /|/| |/
+ \|/\_/ \/ | |/| \// \/|_/|_/ \/|_/\__/| |/|_/o |_/|/ | |_/|_/
+ (| (|
+ ,
+/|| | o , _|_ _, _ ,_ ,_ _ ,_
+ ||__|_ / \_| | /|/| | / | /\/ |/ / | / | / \_/ |
+ | | o \/ \/|/ | |_/|_/\/|_/ /\/ |_/ |/ |/\_/ |/
+ (|
+
+ _ _, ,_ _ _ _ _|_ _ _|
+/|/| |/ / | / | | | /|/| |/ /\/ |/\_|/ / | |/ / |
+ | |_/|_/\/|_/ |/ \/|_/ | |_/|_/ /\/|_/ |_/\__/|_/|_/\/|_/
+ (|
+ o o
+_|_ _ |) _ \\ /
+ | / \_|/) |/ /|/| |_
+ |_/\_/ | \/|_/ | |_/ |
+ /
+
+ /o _ , |) |) \ _, _, _ |) _ o |\ o _
+< | / \_/ \_|/\ |/) > / | |/\_/ | / |/\ |/ |/ | /|/| |/
+ \|/\_/ \/ | |/| \// \/|_/|_/ \/|_/\__/| |/|_/o |_/|/ | |_/|_/
+ (| (|
+ , o o
+/|| | o \\ /
+ ||__|_ |_
+ | | o |
+ /
+
+ /o _ , |) |) \ _|_ |) _ |\ _ _|_
+< | / \_/ \_|/\ |/) > | |/\ |/ |/\_|/ / \_|
+ \|/\_/ \/ | |/| \// |_/| |/|_/ |_/ |_/\_/ |_/
+ (| (|
+
+_|_ |) o _ |) _ ,
+ | |/\ | / |/) |/ /|/| / \_
+ |_/| |/|/\__/| \/|_/ | |_/ \/
+
+
+ / _, , |\ |\ o _ |\ _| \ _|_ |) _ , _
+< / | / \_| | |/ |/ | |/ |/ / | > | |/\ / \_/ \_|/
+ \\/|_/ \/ \/|_/|_/|_/|/|_/|_/\/|_// |_/| |/\_/ \/ |_/
+ |) |)
+ o
+ _, ,_ _ /_|_ , |) _ |\ |\ , _ ,_ o _|_ ,
+/ | / | |/ /|/| | / \_|/\ |/ |/ |/ / \_/ / | | |/\_| / \_
+\/|_/ |/|_/ | |_/ |_/ \/ | |/|_/|_/|_/ \/ \__/ |/|/|_/ |_/ \/
+ (|
+ o
+ / _ ,_ o _ |) \ _|_ |) o , _, , /_|_
+< |/ / | | / |/\ > | |/\ | / \_ | | |_/ | / \_/|/| |
+ \|_/ |/|/\__/| |// |_/| |/|/ \/ \/ \/ \/|_/ \/ | |_/ |_/
+
+
+ _ |) o _ |) _
+/ |/\ | / |/) |/ /|/|
+\__/| |/|/\__/| \/|_/ | |_/o
+
+
+ o
+ -------- | /|/|
+ |/ | |_/
+
+
+_|_|_ _| _|) o _, _| _ _ |\
+_|_|_/ | |/|/\_| / | /|/|----/ | |/ | |_|/ |/
+ | | \/|_/|_/\/ |/\/|_/ | |_/ \/|_/|_/ \/ |_/|_/
+
+ /_) | | \ \
+< < | _ \(_-< \ | /> >
+ \_\ |\___/___/_| _|_\_\_/
+ __/
+ _) | | __ \ _) _|| _) / | /|
+ | _ \(_-< \ | // _` | | \ _|| | |\ \ / / -_) _| _| / | _ \
+ |\___/___/_| _|_\_\\__,_|_|_| _|_| _|\_,_| _\_\_)_/\___|\__|\__|_/ _|\___/
+__/ \____/
+ | | |\ \ | \ \ /
+ _` | _|_ \ _| _` | _| -_) _` | > > (_-< \ ____|\ _ _|
+\__, |_|\___/\__|\__,_|\__|\___|_)\__,_| _/ ___/_| _| _| _| _/ _\
+____/
+ /_) | | \ \ | _) |_)
+< < | _ \(_-< \ | /> > _` | _ \ _` | _| \ -_) | | \ -_)
+ \_\ |\___/___/_| _|_\_\_/ \__,_|.__/\__,_|\__|_| _|\___|_) _|_|_| _|\___|
+ __/ _|
+_ | | |_) |
+ |__ _| (_-< | | \ _| _` |\ \ / -_) _|_|_ \ _|
+ _| _|_) ___/\_, |_| _|\__|\__,_| _\_\ \___|_|_|\___/_|
+ ___/
+ | |
+ \ -_) _` | _| | | \ -_)\ \ / _ \ -_) _| _| -_) _` |
+_| _|\___|\__,_|_| \_,_|_| _|\___| _\_\.__/\___|\__|\__|\___|\__,_|
+ _|
+ | | )\ \ )
+ _| _ \ | / -_) \ \| |_/
+\__|\___/_\_\\___|_| _| |
+ _/
+ /_) | | \ \ | _) |_)
+< < | _ \(_-< \ | /> > _` | _ \ _` | _| \ -_) | | \ -_)
+ \_\ |\___/___/_| _|_\_\_/ \__,_|.__/\__,_|\__|_| _|\___|_) _|_|_| _|\___|
+ __/ _|
+_ | | |_) )\ \ )
+ |__ _| \| |_/
+ _| _|_) |
+ _/
+ /_) | | \ \ | | | |
+< < | _ \(_-< \ | /> > _| \ -_) _ \ | _ \ _|
+ \_\ |\___/___/_| _|_\_\_/ \__|_| _|\___| .__/_|\___/\__|
+ __/ _|
+ | | _) |
+ _| \ | _| | / -_) \ (_-<
+\__|_| _|_|\__|_\_\\___|_| _|___/
+
+ / _|_|_) | |\ \ | |
+< < _` |(_-< | | _|_| | -_) | _` | > > _| \ _ \(_-< -_)
+ \_\\__,_|___/\_,_|_|_| _|\___|_|\__,_| _/ \__|_| _|\___/___/\___|
+
+ )| | | | _) |
+ _` | _|-_) \/ _| (_-< \ -_) | | (_-< _| _|| _ \ _|(_-<
+\__,_|_|\___|_| _|\__| ___/_| _|\___|_|_| ___/\__|_| _|.__/\__|___/
+ _|
+ / _) | \ \ | | _) )|
+< < -_) _|| _| \ > > _| \ |(_-< \ \ \ / _` |(_-< \/ _|
+ \_\\___|_| _|\__|_| _|_/ \__|_| _|_|___/ \_/\_/\__,_|___/_| _|\__|
+
+ | _) |
+ _| \ | _| | / -_) \
+\__|_| _|_|\__|_\_\\___|_| _|_)
+
+ _)
+ ____|____| | \
+ _|_| _|
+
+ | | | | _) | |
+_ |_ |_| _` | -_) _ \ | _` | \____|_` | -_)\ \ / -_) |
+_ |_ |_|\__,_|\___|_.__/_|\__,_|_| _| \__,_|\___| \_/\___|_|
+ _| _|
+ __ _ __ __ __
+ / / (_)__ ___ / / / /_\ \
+< < / / _ \(_-</ _ \/ '_/> >
+ \_\_/ /\___/___/_//_/_/\_\/_/
+ |___/
+ _ __ __ _____ _ _____ _ __ __ __
+ (_)__ ___ / / / /__/ ___ \(_)__ / _/ /_ ____ __(_)_/_/__ / /_____ _/_/
+ / / _ \(_-</ _ \/ '_/ / _ `/ / _ \/ _/ / // /\ \ / _/_// -_) __/ __//_/
+ __/ /\___/___/_//_/_/\_\\ \_,_/_/_//_/_//_/\_,_//_\_(_)_/ \__/\__/\__/_/
+|___/ \___/
+ __ __ __ ____ __
+ / /__ ___ ________ / /____ _/ /____ ___/ /\ \ ___ / / _______ _/|
+ / / _ \/ _ `/ __/ _ \/ __/ _ `/ __/ -_)/ _ / > > (_-</ _ \ /___/ _ \ > _<
+/_/\___/\_, /_/ \___/\__/\_,_/\__/\__(_)_,_/ /_/ /___/_//_/ /_//_/ |/
+ /___/
+ __ _ __ __ __ __ _ ___
+ / / (_)__ ___ / / / /_\ \ ___ ____ ___ _____/ / ___ (_) / (_)__ ___
+< < / / _ \(_-</ _ \/ '_/> > / _ `/ _ \/ _ `/ __/ _ \/ -_) / / / _ \/ -_)
+ \_\_/ /\___/___/_//_/_/\_\/_/ \_,_/ .__/\_,_/\__/_//_/\__(_) /_/_/_//_/\__/
+ |___/ /_/
+ _______ _ __
+ < / / /(_) ___ __ _____ / /____ ___ __ ___ ___________ ____
+ / /_ _/ (_-</ // / _ \/ __/ _ `/\ \ / / -_) __/ __/ _ \/ __/
+/_/ /_/(_) /___/\_, /_//_/\__/\_,_//_\_\ \__/_/ /_/ \___/_/
+ /___/
+ __ __
+ ___ ___ ___ _____ __ _____ _____ __ ___ ___ ____/ /____ ___/ /
+ / _ \/ -_) _ `/ __/ / // / _ \/ -_) \ // _ \/ -_) __/ __/ -_) _ /
+/_//_/\__/\_,_/_/ \_,_/_//_/\__/_\_\/ .__/\__/\__/\__/\__/\_,_/
+ /_/
+ __ __ _ __ _
+ / /____ / /_____ ___ ( )\ \( )
+/ __/ _ \/ '_/ -_) _ \ V / /|/
+\__/\___/_/\_\\__/_//_/ _/_/
+ /_/
+ __ _ __ __ __ __ _ ___
+ / / (_)__ ___ / / / /_\ \ ___ ____ ___ _____/ / ___ (_) / (_)__ ___
+< < / / _ \(_-</ _ \/ '_/> > / _ `/ _ \/ _ `/ __/ _ \/ -_) / / / _ \/ -_)
+ \_\_/ /\___/___/_//_/_/\_\/_/ \_,_/ .__/\_,_/\__/_//_/\__(_) /_/_/_//_/\__/
+ |___/ /_/
+ _______ _ _ __ _
+ < / / /(_) ( )\ \( )
+ / /_ _/ V / /|/
+/_/ /_/(_) _/_/
+ /_/
+ __ _ __ __ __ __ __ __ __
+ / / (_)__ ___ / / / /_\ \ / /_/ / ___ ___ / /__ / /_
+< < / / _ \(_-</ _ \/ '_/> > / __/ _ \/ -_) / _ \/ / _ \/ __/
+ \_\_/ /\___/___/_//_/_/\_\/_/ \__/_//_/\__/ / .__/_/\___/\__/
+ |___/ /_/
+ __ __ _ __
+ / /_/ / (_)___/ /_____ ___ ___
+/ __/ _ \/ / __/ '_/ -_) _ \(_-<
+\__/_//_/_/\__/_/\_\\__/_//_/___/
+
+ __ _______ __ ____ __ __
+ / /___ ____ __ __/ _/ _(_)__ / /__/ /\ \ / /_/ / ___ ___ ___
+< </ _ `(_-</ // / _/ _/ / -_) / _ / > > / __/ _ \/ _ \(_-</ -_)
+ \_\_,_/___/\_,_/_//_//_/\__/_/\_,_/ /_/ \__/_//_/\___/___/\__/
+
+ _ __ __ ____ _ __
+ ___ ________ ___ ( ) /_ ___ / / ___ / / / ___ ________(_)__ / /____
+/ _ `/ __/ -_) _ \|/ __/ (_-</ _ \/ -_) / / (_-</ __/ __/ / _ \/ __(_-<
+\_,_/_/ \__/_//_/ \__/ /___/_//_/\__/_/_/ /___/\__/_/ /_/ .__/\__/___/
+ /_/
+ __ _ ____ __ __ _ _ __
+ / /___ ____(_)___/ /\ \ / /_/ / (_)__ _ _____ ____ ___ ( ) /_
+< </ -_) __/ / __/ _ \> > / __/ _ \/ (_-< | |/|/ / _ `(_-</ _ \|/ __/
+ \_\__/_/ /_/\__/_//_/_/ \__/_//_/_/___/ |__,__/\_,_/___/_//_/ \__/
+
+ __ _ __
+ ____/ / (_)___/ /_____ ___
+/ __/ _ \/ / __/ '_/ -_) _ \_
+\__/_//_/_/\__/_/\_\\__/_//_(_)
+
+ _
+ ________ (_)__
+ /___/___/ / / _ \
+ /_/_//_/
+
+ ____ __ __ _ __ __
+ __/ / /____/ /__ / / (_)__ ____ _______/ /__ _ _____ / /
+ /_ . __/ _ / -_) _ \/ / _ `/ _ \/___/ _ / -_) |/ / -_) /
+/_ __/\_,_/\__/_.__/_/\_,_/_//_/ \_,_/\__/|___/\__/_/
+ /_/_/
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+|_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+| __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+| (_)_ __ ___ / | || | _ ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_) \|| ||/
+| | | | | | __/ | |__ _| > >
+|_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_| |__ (_) ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| | | | |_) | |_\__ \
+|___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+| (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
+<joshk> joshk@influx:/etc/logrotate.d> sh -n *
+<joshk> apache: line 14: syntax error near unexpected token `}'
+<joshk> apache: line 14: `}'
+<joshk> the plot thickens
+<asuffield> those aren't shell scripts
+<erich> this wasn't chicken.
+ -- in #debian-devel
diff --git a/externals/figlet/tests/res003.txt b/externals/figlet/tests/res003.txt
new file mode 100644
index 0000000000..31770d6c96
--- /dev/null
+++ b/externals/figlet/tests/res003.txt
@@ -0,0 +1,432 @@
+ __ ___ _ _
+ \ \ / / |__ __ _| |_ (_)___
+ \ \ /\ / /| '_ \ / _` | __| | / __|
+ \ V V / | | | | (_| | |_ | \__ \
+ \_/\_/ |_| |_|\__,_|\__| |_|___/
+
+ _ _ _ _ _
+(_)_ ____ _____ | |_ _____ __| | (_)_ __ ___ _ _ ___| |__
+| | '_ \ \ / / _ \| \ \ / / _ \/ _` | | | '_ \ / __| | | |/ __| '_ \
+| | | | \ V / (_) | |\ V / __/ (_| | | | | | | \__ \ |_| | (__| | | |
+|_|_| |_|\_/ \___/|_| \_/ \___|\__,_| |_|_| |_| |___/\__,_|\___|_| |_|
+
+ __ _ __
+| _|___| | ___ ___ __|_ |
+| |/ __| |/ _ \/ __|/ _ \ |
+| | (__| | (_) \__ \ __/ |
+| |\___|_|\___/|___/\___| |
+|__| |__|
+ _ _ _ _ _ _
+ _ __ ___| | __ _| |_(_) ___ _ __ ___| |__ (_)_ __ ___ (_)___ __ _
+| '__/ _ \ |/ _` | __| |/ _ \| '_ \/ __| '_ \| | '_ \/ __| | / __| / _` |
+| | | __/ | (_| | |_| | (_) | | | \__ \ | | | | |_) \__ \ | \__ \ | (_| |
+|_| \___|_|\__,_|\__|_|\___/|_| |_|___/_| |_|_| .__/|___/ |_|___/ \__,_|
+ |_|
+ __ __
+ / _| ___ _ __ _ __ ___ ___ / _|
+| |_ / _ \| '__| '_ ` _ \ / _ \| |_
+| _| (_) | | | | | | | | | (_) | _|
+|_| \___/|_| |_| |_| |_| \___/|_|
+
+ _ _ _
+ ___ _ __ ___ ___ | |_(_) ___ _ __ __ _| |
+ / _ \ '_ ` _ \ / _ \| __| |/ _ \| '_ \ / _` | |
+| __/ | | | | | (_) | |_| | (_) | | | | (_| | |
+ \___|_| |_| |_|\___/ \__|_|\___/|_| |_|\__,_|_|
+
+ _ _ _ __
+ ___| |__ ___ _ __ ___ (_)___| |_ _ __ _ _ ___ ___ / _| __ _ _ __
+ / __| '_ \ / _ \ '_ ` _ \| / __| __| '__| | | | / __|/ _ \ | |_ / _` | '__|
+| (__| | | | __/ | | | | | \__ \ |_| | | |_| |_ \__ \ (_) | | _| (_| | |
+ \___|_| |_|\___|_| |_| |_|_|___/\__|_| \__, ( ) |___/\___/ |_| \__,_|_|
+ |___/|/
+ _ _ _ _
+ _ _ _ __ _____ ___ __ | | __ _(_)_ __ ___ __| | | |__ _ _
+| | | | '_ \ / _ \ \/ / '_ \| |/ _` | | '_ \ / _ \/ _` | | '_ \| | | |
+| |_| | | | | __/> <| |_) | | (_| | | | | | __/ (_| | | |_) | |_| |
+ \__,_|_| |_|\___/_/\_\ .__/|_|\__,_|_|_| |_|\___|\__,_| |_.__/ \__, |
+ |_| |___/
+ _ _ __
+ __ _ _ __ _ _ ___ ___| |__ ___ ___ | | ___ / _|
+ / _` | '_ \| | | | / __|/ __| '_ \ / _ \ / _ \| | / _ \| |_
+| (_| | | | | |_| | \__ \ (__| | | | (_) | (_) | | | (_) | _|
+ \__,_|_| |_|\__, | |___/\___|_| |_|\___/ \___/|_| \___/|_|
+ |___/
+ _ _ _ ___
+ _ __ ___ _ _ ___| |__ (_) __ _| |_ _ __ _ _ |_ _| __ _ _ __ ___
+| '_ \/ __| | | |/ __| '_ \| |/ _` | __| '__| | | | | | / _` | '_ ` _ \
+| |_) \__ \ |_| | (__| | | | | (_| | |_| | | |_| | | | | (_| | | | | | |
+| .__/|___/\__, |\___|_| |_|_|\__,_|\__|_| \__, | |___| \__,_|_| |_| |_|
+|_| |___/ |___/
+ __ _ _ _
+ __ ___ ____ _ _ __ ___ ___ / _| | |_| |__ __ _| |_
+ / _` \ \ /\ / / _` | '__/ _ \ / _ \| |_ | __| '_ \ / _` | __|
+| (_| |\ V V / (_| | | | __/ | (_) | _| | |_| | | | (_| | |_
+ \__,_| \_/\_/ \__,_|_| \___| \___/|_|( ) \__|_| |_|\__,_|\__|
+ |/
+ _ _ _ _
+ ___ ___ _ __ __| (_) |_(_) ___ _ __ ___
+ / __/ _ \| '_ \ / _` | | __| |/ _ \| '_ \/ __|
+| (_| (_) | | | | (_| | | |_| | (_) | | | \__ \
+ \___\___/|_| |_|\__,_|_|\__|_|\___/|_| |_|___/
+
+ _ _ _
+ _ __ ___ | |_| |__ (_)_ __ __ _ ___ ___
+| '_ \ / _ \| __| '_ \| | '_ \ / _` | / __|/ _ \
+| | | | (_) | |_| | | | | | | | (_| | \__ \ (_) |
+|_| |_|\___/ \__|_| |_|_|_| |_|\__, | |___/\___/
+ |___/
+ _ _
+ ___(_)_ __ ___ _ __ | | ___ __ _ ___ __ _
+/ __| | '_ ` _ \| '_ \| |/ _ \ / _` / __| / _` |
+\__ \ | | | | | | |_) | | __/ | (_| \__ \ | (_| |
+|___/_|_| |_| |_| .__/|_|\___| \__,_|___/ \__,_|
+ |_|
+ _ _ _ _
+ ___| |__ ___ (_) ___ ___ | |__ ___| |___ _____ ___ _ __
+ / __| '_ \ / _ \| |/ __/ _ \ | '_ \ / _ \ __\ \ /\ / / _ \/ _ \ '_ \
+| (__| | | | (_) | | (_| __/ | |_) | __/ |_ \ V V / __/ __/ | | |
+ \___|_| |_|\___/|_|\___\___| |_.__/ \___|\__| \_/\_/ \___|\___|_| |_|
+
+ _ _ _ __
+| |_| |__ ___ _ __ ___ | | ___ ___ ___ / _|
+| __| '_ \ / _ \ | '_ \ / _ \| |/ _ \/ __| / _ \| |_
+| |_| | | | __/ | |_) | (_) | | __/\__ \ | (_) | _|
+ \__|_| |_|\___| | .__/ \___/|_|\___||___/ \___/|_|
+ |_|
+ _ _ _ _ _
+ __ _| |_| |_ _ __ __ _ ___| |_(_) ___ _ __ __ _ _ __ __| |
+ / _` | __| __| '__/ _` |/ __| __| |/ _ \| '_ \ / _` | '_ \ / _` |
+| (_| | |_| |_| | | (_| | (__| |_| | (_) | | | | | (_| | | | | (_| |
+ \__,_|\__|\__|_| \__,_|\___|\__|_|\___/|_| |_| \__,_|_| |_|\__,_|
+
+ _ _ __ __
+ _ __ ___ _ __ _ _| |___(_) ___ _ __ \ \ / /__ _ _
+| '__/ _ \ '_ \| | | | / __| |/ _ \| '_ \ \ V / _ \| | | |
+| | | __/ |_) | |_| | \__ \ | (_) | | | |_ | | (_) | |_| |
+|_| \___| .__/ \__,_|_|___/_|\___/|_| |_(_) |_|\___/ \__,_|
+ |_|
+ _
+ ___ __ _ _ __ _ __ ___ ___ ___| |_ ___ ___ _ __ ___ ___
+ / __/ _` | '_ \ | '_ ` _ \ / _ \/ _ \ __| / __|/ _ \| '_ ` _ \ / _ \
+| (_| (_| | | | | | | | | | | __/ __/ |_ \__ \ (_) | | | | | | __/
+ \___\__,_|_| |_| |_| |_| |_|\___|\___|\__| |___/\___/|_| |_| |_|\___|
+
+ _ _ _ _ _
+ _ __ ___ ___ _ __ | | ___ | |_| |__ (_)_ __| |_ _ _
+| '_ \ / _ \/ _ \| '_ \| |/ _ \ | __| '_ \| | '__| __| | | |
+| |_) | __/ (_) | |_) | | __/ | |_| | | | | | | |_| |_| |_
+| .__/ \___|\___/| .__/|_|\___| \__|_| |_|_|_| \__|\__, ( )
+|_| |_| |___/|/
+ __ _ _ _
+ / _| ___ _ __| |_ _ _ | |_(_)_ __ ___ ___ ___
+| |_ / _ \| '__| __| | | | | __| | '_ ` _ \ / _ \/ __|
+| _| (_) | | | |_| |_| | | |_| | | | | | | __/\__ \
+|_| \___/|_| \__|\__, | \__|_|_| |_| |_|\___||___/
+ |___/
+ _ _ _
+ __| | _____ ___ __ | |_| |__ ___ _ _ ___ __ _ _ __ ___
+ / _` |/ _ \ \ /\ / / '_ \ | __| '_ \ / _ \ | | | |/ _ \/ _` | '__/ __|
+| (_| | (_) \ V V /| | | | | |_| | | | __/ | |_| | __/ (_| | | \__ \_
+ \__,_|\___/ \_/\_/ |_| |_| \__|_| |_|\___| \__, |\___|\__,_|_| |___( )
+ |___/ |/
+ _
+ __ _ _ __ __| |
+ / _` | '_ \ / _` |
+| (_| | | | | (_| |
+ \__,_|_| |_|\__,_|
+
+ _ _ _
+| |_| |__ ___ _ _ _ __ ___ _ __ ___ __ _(_)_ __
+| __| '_ \ / _ \ | | | | '__/ _ \ '_ ` _ \ / _` | | '_ \
+| |_| | | | __/ |_| | | | | __/ | | | | | (_| | | | | |
+ \__|_| |_|\___|\__, | |_| \___|_| |_| |_|\__,_|_|_| |_|
+ |___/
+ _ _ _
+ __ _ _ __ ___ (_) __ _| |__ | | ___
+ / _` | '_ ` _ \| |/ _` | '_ \| |/ _ \
+| (_| | | | | | | | (_| | |_) | | __/
+ \__,_|_| |_| |_|_|\__,_|_.__/|_|\___|
+
+ _ _ _ _ _ _
+| |__ _ _ ___| |_ __ _ _ __ __| | ___ _ __ ___ | (_) | _____
+| '_ \| | | / __| __/ _` | '_ \ / _` |/ _ \ '__/ __| | | | |/ / _ \
+| |_) | |_| \__ \ || (_| | | | | (_| | __/ | \__ \_ | | | < __/
+|_.__/ \__, |___/\__\__,_|_| |_|\__,_|\___|_| |___( ) |_|_|_|\_\___|
+ |___/ |/
+ _ _ _ _ _ _ _
+| |_| |__ ___ ___| |__ ___ _ __ ___ | (_) __ _| |__ | |_ ___
+| __| '_ \ / _ \ / __| '_ \ / _ \| '__/ _ \ | | |/ _` | '_ \| __/ __|
+| |_| | | | __/ \__ \ | | | (_) | | | __/ | | | (_| | | | | |_\__ \
+ \__|_| |_|\___| |___/_| |_|\___/|_| \___| |_|_|\__, |_| |_|\__|___/
+ |___/
+ __ _ _ _ _
+ ___ / _| | |_ _____ ___ __ ___ | |_| |__ __ _| |_ __ _
+ / _ \| |_ | __/ _ \ \ /\ / / '_ \/ __| | __| '_ \ / _` | __| / _` |
+| (_) | _| | || (_) \ V V /| | | \__ \ | |_| | | | (_| | |_ | (_| |
+ \___/|_| \__\___/ \_/\_/ |_| |_|___/ \__|_| |_|\__,_|\__| \__,_|
+
+ _ _
+ ___ __ _(_) | ___ _ __
+/ __|/ _` | | |/ _ \| '__|
+\__ \ (_| | | | (_) | |
+|___/\__,_|_|_|\___/|_|
+
+ _ _ _ _
+ _ __ __ _ ___ ___ ___ ___ __ _| |_ ___| |_ __ _| |_ ___ __| |
+| '_ \ / _` / __/ __|/ _ \/ __| / _` | __| / __| __/ _` | __/ _ \/ _` |
+| |_) | (_| \__ \__ \ __/\__ \ | (_| | |_ \__ \ || (_| | || __/ (_| |
+| .__/ \__,_|___/___/\___||___/ \__,_|\__| |___/\__\__,_|\__\___|\__,_|
+|_|
+ _ _ _ _
+| |_(_)_ __ ___ ___ ___ | |__ _ _| |_ _ __ _____ _____ _ __
+| __| | '_ ` _ \ / _ \/ __| | '_ \| | | | __| | '_ \ / _ \ \ / / _ \ '__|
+| |_| | | | | | | __/\__ \ | |_) | |_| | |_ | | | | __/\ V / __/ |
+ \__|_|_| |_| |_|\___||___/ |_.__/ \__,_|\__| |_| |_|\___| \_/ \___|_|
+
+ _ _ _ _ _
+ ___ __ _| | |___ __ _| |_ ___ _ __ | |_| |__ ___
+ / __/ _` | | / __| / _` | __| / _ \| '_ \ | __| '_ \ / _ \
+| (_| (_| | | \__ \ | (_| | |_ | (_) | | | | | |_| | | | __/
+ \___\__,_|_|_|___/ \__,_|\__| \___/|_| |_| \__|_| |_|\___|
+
+ _
+ _ __ ___ __ _ _ _| | __ _ _ __ _ __ _ _ _ __
+| '__/ _ \/ _` | | | | |/ _` | '__| | '__| | | | '_ \
+| | | __/ (_| | |_| | | (_| | | | | | |_| | | | |_
+|_| \___|\__, |\__,_|_|\__,_|_| |_| \__,_|_| |_(_)
+ |___/
+ ____ _
+ / ___|___ _ ____ _____ _ __ ___ ___| |_ _
+| | / _ \| '_ \ \ / / _ \ '__/ __|/ _ \ | | | |
+| |__| (_) | | | \ V / __/ | \__ \ __/ | |_| |_
+ \____\___/|_| |_|\_/ \___|_| |___/\___|_|\__, ( )
+ |___/|/
+ _ _ _ _ _ _
+ __ _| | | ___ ___ _ __ ___(_) __| | ___ _ __ __ _| |_(_) ___ _ __ ___
+ / _` | | | / __/ _ \| '_ \/ __| |/ _` |/ _ \ '__/ _` | __| |/ _ \| '_ \/ __|
+| (_| | | | | (_| (_) | | | \__ \ | (_| | __/ | | (_| | |_| | (_) | | | \__ \
+ \__,_|_|_| \___\___/|_| |_|___/_|\__,_|\___|_| \__,_|\__|_|\___/|_| |_|___/
+
+ __ _ _
+ ___ / _| ___ _____ __ __ _ ___(_) __| | ___ _ _ ___ _ _
+ / _ \| |_ / __|/ _ \ \/ / / _` / __| |/ _` |/ _ \ | | | |/ _ \| | | |
+| (_) | _| \__ \ __/> < | (_| \__ \ | (_| | __/_ | |_| | (_) | |_| |
+ \___/|_| |___/\___/_/\_\ \__,_|___/_|\__,_|\___( ) \__, |\___/ \__,_|
+ |/ |___/
+ _
+ ___ __ _ _ __ _ __ ___ ___ ___| |_ ___ ___ _ __ ___ ___
+ / __/ _` | '_ \ | '_ ` _ \ / _ \/ _ \ __| / __|/ _ \| '_ ` _ \ / _ \
+| (_| (_| | | | | | | | | | | __/ __/ |_ \__ \ (_) | | | | | | __/
+ \___\__,_|_| |_| |_| |_| |_|\___|\___|\__| |___/\___/|_| |_| |_|\___|
+
+ _ _ _
+ ___ | |_| |__ ___ _ __ _ __ ___ ___ _ __ | | ___
+ / _ \| __| '_ \ / _ \ '__| | '_ \ / _ \/ _ \| '_ \| |/ _ \
+| (_) | |_| | | | __/ | | |_) | __/ (_) | |_) | | __/
+ \___/ \__|_| |_|\___|_| | .__/ \___|\___/| .__/|_|\___|
+ |_| |_|
+ _ _
+ ___ _ __ ___ ___ ___ _ __ | |___ _(_) ___ ___
+ / _ \| '_ \ / __/ _ \ / _ \| '__| | __\ \ /\ / / |/ __/ _ \
+| (_) | | | | (_| __/ | (_) | | | |_ \ V V /| | (_| __/
+ \___/|_| |_|\___\___| \___/|_| \__| \_/\_/ |_|\___\___|
+
+ _ _ _ _
+ __ _ _ __ __| | | |_| |__ ___ _ _ _ __ ___ _ __ ___ __ _(_)_ __
+ / _` | '_ \ / _` | | __| '_ \ / _ \ | | | | '__/ _ \ '_ ` _ \ / _` | | '_ \
+| (_| | | | | (_| | | |_| | | | __/ |_| | | | | __/ | | | | | (_| | | | | |
+ \__,_|_| |_|\__,_| \__|_| |_|\___|\__, | |_| \___|_| |_| |_|\__,_|_|_| |_|
+ |___/
+ _
+ _ __ ___ _ __ _ __ ___ __ _ _ __ ___ _ __ | |_
+| '_ \ / _ \ '__| '_ ` _ \ / _` | '_ \ / _ \ '_ \| __|
+| |_) | __/ | | | | | | | (_| | | | | __/ | | | |_
+| .__/ \___|_| |_| |_| |_|\__,_|_| |_|\___|_| |_|\__|
+|_|
+ _ __ _
+(_)_ __ / _| |_ _ ___ _ __ ___ ___ ___ ___ _ __
+| | '_ \| |_| | | | |/ _ \ '_ \ / __/ _ \/ __| / _ \| '_ \
+| | | | | _| | |_| | __/ | | | (_| __/\__ \ | (_) | | | |
+|_|_| |_|_| |_|\__,_|\___|_| |_|\___\___||___/ \___/|_| |_|
+
+ _ _ __
+ _ _ ___ _ _ _ __ | (_)/ _| ___
+| | | |/ _ \| | | | '__| | | | |_ / _ \
+| |_| | (_) | |_| | | | | | _| __/_
+ \__, |\___/ \__,_|_| |_|_|_| \___(_)
+ |___/
+ _____ _
+ | ____|_ _____ _ __ _ _ ___ _ __ ___ (_)___
+ | _| \ \ / / _ \ '__| | | |/ _ \| '_ \ / _ \ | / __|
+ | |___ \ V / __/ | | |_| | (_) | | | | __/ | \__ \
+ |_____| \_/ \___|_| \__, |\___/|_| |_|\___| |_|___/
+ |___/
+ __ _ _ _
+ __ ___ ____ _ _ __ ___ ___ / _| | |_| |__ (_)___
+ / _` \ \ /\ / / _` | '__/ _ \ / _ \| |_ | __| '_ \| / __|
+| (_| |\ V V / (_| | | | __/ | (_) | _| | |_| | | | \__ \
+ \__,_| \_/\_/ \__,_|_| \___| \___/|_| \__|_| |_|_|___/
+
+ _ _
+ __| (_)___ ___ _ __ ___ _ __ __ _ _ __ ___ _ _
+ / _` | / __|/ __| '__/ _ \ '_ \ / _` | '_ \ / __| | | |
+| (_| | \__ \ (__| | | __/ |_) | (_| | | | | (__| |_| |
+ \__,_|_|___/\___|_| \___| .__/ \__,_|_| |_|\___|\__, |
+ |_| |___/
+ _ _ _ _
+| |__ ___| |___ _____ ___ _ __ | |_| |__ ___
+| '_ \ / _ \ __\ \ /\ / / _ \/ _ \ '_ \ | __| '_ \ / _ \
+| |_) | __/ |_ \ V V / __/ __/ | | | | |_| | | | __/
+|_.__/ \___|\__| \_/\_/ \___|\___|_| |_| \__|_| |_|\___|
+
+ _ _
+ __ _ ___ __ _ _ _ __ _(_)_ __ | |_ __ _ _ __ ___ ___
+ / _` |/ __/ _` | | | |/ _` | | '_ \| __/ _` | '_ \ / __/ _ \
+| (_| | (_| (_| | |_| | (_| | | | | | || (_| | | | | (_| __/
+ \__,_|\___\__, |\__,_|\__,_|_|_| |_|\__\__,_|_| |_|\___\___|
+ |_|
+
+ ___ ___ ___ _ __
+/ __|/ _ \/ _ \ '_ \
+\__ \ __/ __/ | | |
+|___/\___|\___|_| |_|
+
+ __ _ _ _
+ __ _ ___ / _| __ _ _ __ ___ (_) (_) __ _ _ __
+ / _` / __| | |_ / _` | '_ ` _ \| | | |/ _` | '__|
+| (_| \__ \ | _| (_| | | | | | | | | | (_| | |
+ \__,_|___/ |_| \__,_|_| |_| |_|_|_|_|\__,_|_|
+
+ _ _
+__ ____ _| | |_ __ __ _ _ __ ___ _ __ ___ _ __
+\ \ /\ / / _` | | | '_ \ / _` | '_ \ / _ \ '__| / _ \| '__|
+ \ V V / (_| | | | |_) | (_| | |_) | __/ | | (_) | |
+ \_/\_/ \__,_|_|_| .__/ \__,_| .__/ \___|_| \___/|_|
+ |_| |_|
+ _ _ _ __ _ _
+(_)_ __ ___| |_ __ _ _ __ | |_ / _|_ __(_) ___ _ __ __| |
+| | '_ \/ __| __/ _` | '_ \| __| | |_| '__| |/ _ \ '_ \ / _` |
+| | | | \__ \ || (_| | | | | |_ | _| | | | __/ | | | (_| |_
+|_|_| |_|___/\__\__,_|_| |_|\__| |_| |_| |_|\___|_| |_|\__,_(_)
+
+ _____ _ _ _ _
+|_ _| |__ ___ ___| |__ ___ _ __ ___ (_) ___ __ _| |
+ | | | '_ \ / _ \ / __| '_ \ / _ \ '_ ` _ \| |/ __/ _` | |
+ | | | | | | __/ | (__| | | | __/ | | | | | | (_| (_| | |
+ |_| |_| |_|\___| \___|_| |_|\___|_| |_| |_|_|\___\__,_|_|
+
+ _ _ _ _ _ _ _ _
+ __ _ ___| |_(_) ___ _ __ (_) |_ ___ _ __ | |_ __ _(_) |___ (_)___
+ / _` |/ __| __| |/ _ \| '_ \ | | __| / _ \ '_ \| __/ _` | | / __| | / __|
+| (_| | (__| |_| | (_) | | | | | | |_ | __/ | | | || (_| | | \__ \ | \__ \
+ \__,_|\___|\__|_|\___/|_| |_| |_|\__| \___|_| |_|\__\__,_|_|_|___/ |_|___/
+
+ _ _ _
+| | ___ ___ ___ __ _____ _ __| |_| |__
+| |/ _ \/ __/ __| \ \ /\ / / _ \| '__| __| '_ \
+| | __/\__ \__ \ \ V V / (_) | | | |_| | | |
+|_|\___||___/___/ \_/\_/ \___/|_| \__|_| |_|
+
+ _ _ _ _
+ __ _ _ __ __ _| |_ _ ___(_)_ __ __ _ | |_| |__ __ _ _ __
+ / _` | '_ \ / _` | | | | |_ / | '_ \ / _` | | __| '_ \ / _` | '_ \
+| (_| | | | | (_| | | |_| |/ /| | | | | (_| | | |_| | | | (_| | | | |
+ \__,_|_| |_|\__,_|_|\__, /___|_|_| |_|\__, | \__|_| |_|\__,_|_| |_|
+ |___/ |___/
+ _ _ _ _
+ ___ _ __ (_) ___ _ _(_)_ __ __ _ / \ | |_ __ _ _ __ _ _
+ / _ \ '_ \ | |/ _ \| | | | | '_ \ / _` | / _ \| __| / _` | '_ \| | | |
+| __/ | | || | (_) | |_| | | | | | (_| |_ / ___ \ |_ | (_| | | | | |_| |
+ \___|_| |_|/ |\___/ \__, |_|_| |_|\__, (_) /_/ \_\__| \__,_|_| |_|\__, |
+ |__/ |___/ |___/ |___/
+ _ _ _ _
+ _ __ __ _| |_ ___ | |_| |__ ___ ___ ___ ___(_)_ __
+| '__/ _` | __/ _ \ | __| '_ \ / _ \/ __|/ _ \ / __| \ \/ /
+| | | (_| | || __/_ | |_| | | | __/\__ \ __/ \__ \ |> <
+|_| \__,_|\__\___( ) \__|_| |_|\___||___/\___| |___/_/_/\_\
+ |/
+ _ _ _
+ _ __ (_) ___ ___ ___ ___ __ _ _ __ ___ __ _| |__ ___ _ _| |_
+| '_ \| |/ _ \/ __/ _ \/ __| / _` | '__/ _ \ / _` | '_ \ / _ \| | | | __|
+| |_) | | __/ (_| __/\__ \ | (_| | | | __/ | (_| | |_) | (_) | |_| | |_
+| .__/|_|\___|\___\___||___/ \__,_|_| \___| \__,_|_.__/ \___/ \__,_|\__|
+|_|
+ _ _ _ _
+ _ __ ___ ___ _ __ __ _(_) |_| |__ __ _| |__ ___ _ __ ___
+| '_ ` _ \ / _ \ '_ \ \ \ /\ / / | __| '_ \ \ \ /\ / / '_ \ / _ \| '_ ` _ \
+| | | | | | __/ | | | \ V V /| | |_| | | | \ V V /| | | | (_) | | | | | |
+|_| |_| |_|\___|_| |_| \_/\_/ |_|\__|_| |_| \_/\_/ |_| |_|\___/|_| |_| |_|
+
+ ___ __ _ _
+|_ _| / _| ___| | |_ __ _ _ __
+ | | | |_ / _ \ | __| / _` | '_ \
+ | | | _| __/ | |_ | (_| | | | |
+|___| |_| \___|_|\__| \__,_|_| |_|
+
+ _ _ _ _
+(_)_ __ ___ _ __ ___ ___ __| (_) __ _| |_ ___
+| | '_ ` _ \| '_ ` _ \ / _ \/ _` | |/ _` | __/ _ \
+| | | | | | | | | | | | __/ (_| | | (_| | || __/
+|_|_| |_| |_|_| |_| |_|\___|\__,_|_|\__,_|\__\___|
+
+ _ _
+ ___ _ _ _ __ ___ _ __ __ _| |_ | |_ ___ _ _ ___ ___
+/ __| | | | '_ ` _ \| '_ \ / _` | __| _____ | __/ _ \ | | | / __|/ _ \
+\__ \ |_| | | | | | | |_) | (_| | |_ |_____| | || (_) | | |_| \__ \ __/
+|___/\__, |_| |_| |_| .__/ \__,_|\__| \__\___/ \__,_|___/\___|
+ |___/ |_|
+ _ _ __ __ __
+ __ _ ___ ___ (_)_ __ (_)_ __ __ _ ___ / _| | \/ | __ ___ __
+ / _` | / __/ _ \| | '_ \| | '_ \ / _` | / _ \| |_ | |\/| |/ _` \ \/ /
+| (_| | | (_| (_) | | | | | | | | | (_| | | (_) | _| | | | | (_| |> <
+ \__,_| \___\___/|_|_| |_|_|_| |_|\__, | \___/|_| |_| |_|\__,_/_/\_\
+ |___/
+ ____ _ _ _
+| __ ) ___ ___ _ __| |__ ___ | |__ _ __ ___ ( )___
+| _ \ / _ \/ _ \ '__| '_ \ / _ \| '_ \| '_ ` _ \|// __|
+| |_) | __/ __/ | | |_) | (_) | | | | | | | | | \__ \
+|____/ \___|\___|_| |_.__/ \___/|_| |_|_| |_| |_| |___/
+
+
+ _ __ ___ ___ _ __ ___
+| '_ ` _ \ / _ \| '__/ _ \
+| | | | | | (_) | | | __/
+|_| |_| |_|\___/|_| \___|
+
+ _ _ __ _ _
+ ___ __ _| |_(_)___ / _| __ _ ___| |_ ___ _ __ _ _ | |_ ___
+/ __|/ _` | __| / __| |_ / _` |/ __| __/ _ \| '__| | | | | __/ _ \
+\__ \ (_| | |_| \__ \ _| (_| | (__| || (_) | | | |_| | | || (_) |
+|___/\__,_|\__|_|___/_| \__,_|\___|\__\___/|_| \__, | \__\___/
+ |___/
+ _ _ _ _
+ _ __ ___ ___ | |_| |__ __ _ _ __ | |_| |__ ___
+| '_ ` _ \ / _ \ | __| '_ \ / _` | '_ \ | __| '_ \ / _ \
+| | | | | | __/ | |_| | | | (_| | | | | | |_| | | | __/
+|_| |_| |_|\___| \__|_| |_|\__,_|_| |_| \__|_| |_|\___|
+
+
+ ___ _ __ __ _ __ _ _ _ ___ __ _____ __ _ _ _ ___
+ / _ \| '_ \ / _` |/ _` | | | |/ _ \ \ \ / / _ \ / _` | | | |/ _ \
+| (_) | |_) | (_| | (_| | |_| | __/ \ V / (_) | (_| | |_| | __/
+ \___/| .__/ \__,_|\__, |\__,_|\___| \_/ \___/ \__, |\__,_|\___|
+ |_| |_| |___/
+ _ _ _ _ _ _ _
+__ _____ _ __ __| | ( | )___ _ __ ___ _ __ __ _| |_| |__ _ _( | )
+\ \ /\ / / _ \| '__/ _` | V V/ _ \ '_ ` _ \| '_ \ / _` | __| '_ \| | | |V V
+ \ V V / (_) | | | (_| | | __/ | | | | | |_) | (_| | |_| | | | |_| | _
+ \_/\_/ \___/|_| \__,_| \___|_| |_| |_| .__/ \__,_|\__|_| |_|\__, | (_)
+ |_| |___/
+ _ _ _ _ _
+ / \ | (_)___| |_ __ _(_)_ __
+ _____ _____ / _ \ | | / __| __/ _` | | '__|
+ |_____|_____| / ___ \| | \__ \ || (_| | | |
+ /_/ \_\_|_|___/\__\__,_|_|_|
+
+ ____ _ _ _ ____ _ __ __ _ _
+ / ___|___ ___ | | _____ ( | ) ___|(_)_ __ | \/ | ___ _ __( | )
+| | / _ \ / _ \| |/ / _ \ V V\___ \| \ \/ / | |\/| |/ _ \ '_ \V V
+| |__| (_) | (_) | < __/_ ___) | |> < | | | | __/ | | |
+ \____\___/ \___/|_|\_\___( ) |____/|_/_/\_\ |_| |_|\___|_| |_|
+ |/
diff --git a/externals/figlet/tests/res004.txt b/externals/figlet/tests/res004.txt
new file mode 100644
index 0000000000..8ece9309ac
--- /dev/null
+++ b/externals/figlet/tests/res004.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+|_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+| __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+| (_)_ __ ___ / | || | _ ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_) \|| ||/
+| | | | | | __/ | |__ _| > >
+|_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_| |__ (_) ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| | | | |_) | |_\__ \
+|___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+| (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res005.txt b/externals/figlet/tests/res005.txt
new file mode 100644
index 0000000000..0e0921ef31
--- /dev/null
+++ b/externals/figlet/tests/res005.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ \ \| | _| |__ ___ ___ (_)/ /
+ \ \ |/ / '_ \/ __|/ _ \| / /
+ / / <| | | \__ \ (_) | \ \
+ /_/|_|\_\_| |_|___/\___// |\_\
+ |__/
+ _ __ _ __ _ ____ _ _ _
+ ___| |_ ___ / /__ ___ _| |/ _|_ __ (_) / __ \| | _| |__ ___ ___ (_)
+ / __| __/ _ \ / (_) \/ / | | | | |_| '_ \| |/ / _` | |/ / '_ \/ __|/ _ \| |
+ | (__| || __// / _ > <| |_| | | _| | | | | | (_| | <| | | \__ \ (_) | |
+ \___|\__\___/_/ (_)_/\_\\__,_|_|_| |_| |_|_|\ \__,_|_|\_\_| |_|___/\___// |
+ \____/ |__/
+ _ __ _ _ _ _ __
+ | |__ ___ \ \ __| | ___| |_ __ _| |_ ___ _ __ __ _ ___ | | / /
+ | '_ \/ __| \ \/ _` | / _ \ __/ _` | __/ _ \| '__/ _` |/ _ \| | / /
+ | | | \__ \ / / (_| || __/ || (_| | || (_) | | | (_| | (_) | |/ /
+ |_| |_|___/ /_/ \__,_(_)___|\__\__,_|\__\___/|_| \__, |\___/|_/_/
+ |___/
+
+ __/\__ _ __
+ \ / | '_ \ _____
+ /_ _\ | | | |_____|
+ \/ |_| |_|
+
+ _ __ _ _ _ __
+ _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ /
+ (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / /
+ | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \
+ (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ _ _ _ _ _ _
+ __ ____ _| |_ _ __ _ _ ___ _| || | / | ___ _ __ (_) |
+ \ \/ / _` | __| '_ \| | | / __| (_) || |_| | / _ \ '_ \| | |
+ > < (_| | |_| | | | |_| \__ \ _|__ _| | | __/ | | | | |
+ /_/\_\__,_|\__|_| |_|\__, |___/ (_) |_| |_| \___|_| |_|_|_|
+ |___/
+
+ _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___
+ | '__/ _` |/ _ \ '_ \ | '__/ _ \| '__| '__/ _ \
+ | | | (_| | __/ | | | | | | (_) | | | | | __/
+ |_| \__,_|\___|_| |_| |_| \___/|_| |_| \___|
+
+ _ _ _ _
+ _ __ ___| | _____ | |_ __| | ___| |_ ___ ___ _ ____ _____ _ __ _ _
+ | '_ \ / _ \ |/ / _ \| __| / _` |/ _ \ __/ __/ _ \ '_ \ \/ / _ \ '_ \| | | |
+ | | | | __/ < (_) | |_ | (_| | __/ || (_| __/ |_) > < __/ | | | |_| |
+ |_| |_|\___|_|\_\___/ \__| \__,_|\___|\__\___\___| .__/_/\_\___|_| |_|\__,_|
+ |_|
+ ___ _
+ ( ) \ ( )
+ |/ | | \|
+ > >
+ | |
+ /_/
+ _ __ _ _ _ __
+ _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ /
+ (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / /
+ | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \
+ (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ ___ _ _ _ _ _ _
+ ( ) \ ( ) _| || | / | ___ _ __ (_) |
+ |/ | | \| (_) || |_| | / _ \ '_ \| | |
+ > > _|__ _| | | __/ | | | | |
+ | | (_) |_| |_| \___|_| |_|_|_|
+ /_/
+ _ _ _ _ __ _ _ _ __
+ | |_ ___ | |_ __ ___| |__ | |_ \ \| | _| |__ ___ ___ (_)/ /
+ | __/ _ \| | '_ \ / _ \ '_ \| __| \ \ |/ / '_ \/ __|/ _ \| / /
+ | || (_) | | |_) | | __/ | | | |_ / / <| | | \__ \ (_) | \ \
+ \__\___/|_| .__/ \___|_| |_|\__| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ _ _ _ _
+ ___ _ __ ___| | _____(_) |__ | |_
+ / __| '_ \ / _ \ |/ / __| | '_ \| __|
+ \__ \ | | | __/ < (__| | | | | |_
+ |___/_| |_|\___|_|\_\___|_|_| |_|\__|
+
+ _ _ __ _ _ _ __ __ __
+ ___ ___ ___ | |__ | |_ \ \ __| | | ___(_)/ _|/ _|_ _ ___ __ _ / /
+ / _ \/ __|/ _ \| '_ \| __| \ \/ _` | |/ _ \ | |_| |_| | | / __|/ _` / /
+ | __/\__ \ (_) | | | | |_ / / (_| | | __/ | _| _| |_| \__ \ (_| \ \
+ \___||___/\___/|_| |_|\__| /_/ \__,_|_|\___|_|_| |_| \__,_|___/\__,_|\_\
+
+ _ _ _ _ _
+ | | | ___| |__ ___ | |_( )_ __ ___ _ __ __ _
+ | | |/ _ \ '_ \/ __| | __|/| '_ \ / _ \ '__/ _` |
+ | | | __/ | | \__ \ | |_ | | | | __/ | | (_| |
+ |_|_|\___|_| |_|___/ \__| |_| |_|\___|_| \__,_|
+
+ _ _
+ ___| |_ _ __ (_)_ __ ___ ___
+ / __| __| '_ \| | '__/ __/ __|
+ \__ \ |_| |_) | | | | (__\__ \
+ |___/\__| .__/|_|_| \___|___/
+ |_|
+ _ _ _ __ _ _ __
+ ___(_) |__ | |_ \ \| |__ ___(_)_ __ ___ / /
+ / __| | '_ \| __| \ \ '_ \ / __| | '__/ _ \/ /
+ \__ \ | | | | |_ / / | | | (__| | | | __/\ \
+ |___/_|_| |_|\__| /_/|_| |_|\___|_|_| \___| \_\
+
+ _ _ _ _ _
+ _ __ ___| | _____(_) |__ ___ | |_( )_ __ ___ __ ___ __
+ | '_ \ / _ \ |/ / __| | '_ \ / __| | __|/| '_ \/ __|/ _` \ \ /\ / /
+ _| | | | __/ < (__| | | | | (__ | |_ | | | \__ \ (_| |\ V V /
+ (_)_| |_|\___|_|\_\___|_|_| |_|\___| \__| |_| |_|___/\__,_| \_/\_/
+
+ _
+ _ __ (_)
+ | '_ \| | _____ _____
+ | | | | | |_____|_____|
+ |_| |_|_|
+
+ _ _ _ _ _ _ _
+ | | _____ _____ __| | _ __ __ _(_) |__ ___ __| |_| || |_
+ | |/ _ \ \ / / _ \/ _` |_____| '_ \ / _` | | '_ \ / _ \/ _` |_ .. _|
+ | | __/\ V / __/ (_| |_____| | | | (_| | | |_) | __/ (_| |_ _|
+ |_|\___| \_/ \___|\__,_| |_| |_|\__,_|_|_.__/ \___|\__,_| |_||_|
+
diff --git a/externals/figlet/tests/res006.txt b/externals/figlet/tests/res006.txt
new file mode 100644
index 0000000000..8ece9309ac
--- /dev/null
+++ b/externals/figlet/tests/res006.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+|_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+| __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+| (_)_ __ ___ / | || | _ ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_) \|| ||/
+| | | | | | __/ | |__ _| > >
+|_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_| |__ (_) ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| | | | |_) | |_\__ \
+|___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+| (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res007.txt b/externals/figlet/tests/res007.txt
new file mode 100644
index 0000000000..3f467dc2fd
--- /dev/null
+++ b/externals/figlet/tests/res007.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+ / / | |/ _ \/ __| '_ \| |/ / \ \
+ \ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+ |__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+ /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+ |_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+ / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+ \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+ | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+ | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+ | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+ |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+ | __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+ ( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+ / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+ \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+ | (_)_ __ ___ / | || | _ ( ) \ ( )
+ | | | '_ \ / _ \ | | || |(_) \|| ||/
+ | | | | | | __/ | |__ _| > >
+ |_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+ / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+ \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+ | |_| |__ (_) ___| | _____ _ __ ___
+ | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+ | |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+ / // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+ \ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+ | (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+ / __|/ __| '__| | '_ \| __/ __|
+ \__ \ (__| | | | |_) | |_\__ \
+ |___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+ | (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+ |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+ |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res008.txt b/externals/figlet/tests/res008.txt
new file mode 100644
index 0000000000..3048a10cfa
--- /dev/null
+++ b/externals/figlet/tests/res008.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+ / / | |/ _ \/ __| '_ \| |/ / \ \
+ \ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+ |__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+ /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+ |_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+ / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+ \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+ | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+ | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+ | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+ |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+ | __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+ ( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+ / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+ \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+ | (_)_ __ ___ / | || | _ ( ) \ ( )
+ | | | '_ \ / _ \ | | || |(_) \|| ||/
+ | | | | | | __/ | |__ _| > >
+ |_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+ / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+ \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+ | |_| |__ (_) ___| | _____ _ __ ___
+ | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+ | |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+ / // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+ \ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+ | (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+ / __|/ __| '__| | '_ \| __/ __|
+ \__ \ (__| | | | |_) | |_\__ \
+ |___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+ | (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+ |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+ |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res009.txt b/externals/figlet/tests/res009.txt
new file mode 100644
index 0000000000..57f8690c8c
--- /dev/null
+++ b/externals/figlet/tests/res009.txt
@@ -0,0 +1,138 @@
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __\ \
+/ / | | / _ \ / __|| '_ \ | |/ / \ \
+\ \ | || (_) |\__ \| | | || < / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __
+ (_) ___ ___ | |__ | | __ / __ \ (_) _ __ / _|| | _ _ __ __ _ / /
+ | | / _ \ / __|| '_ \ | |/ // / _` || || '_ \ | |_ | || | | |\ \/ /(_) / /
+ | || (_) |\__ \| | | || <| | (_| || || | | || _|| || |_| | > < _ / /
+ _/ | \___/ |___/|_| |_||_|\_\\ \__,_||_||_| |_||_| |_| \__,_|/_/\_\(_)/_/
+|__/ \____/
+ _ __ _ _ _
+ ___ | |_ ___ / /| | ___ __ _ _ __ ___ | |_ __ _ | |_ ___
+ / _ \| __|/ __| / / | | / _ \ / _` || '__|/ _ \ | __|/ _` || __|/ _ \
+| __/| |_| (__ / / | || (_) || (_| || | | (_) || |_| (_| || |_| __/ _
+ \___| \__|\___|/_/ |_| \___/ \__, ||_| \___/ \__|\__,_| \__|\___|(_)
+ |___/
+ _ __ _
+ __| |\ \ ___ | |__ _ __ __/\__
+ / _` | \ \ / __|| '_ \ _____ | '_ \ \ /
+| (_| | / / \__ \| | | | |_____|| | | | /_ _\
+ \__,_|/_/ |___/|_| |_| |_| |_| \/
+
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __\ \
+/ / | | / _ \ / __|| '_ \ | |/ / \ \
+\ \ | || (_) |\__ \| | | || < / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/
+ |__/
+ _ _ _ _ _ _
+ __ _ _ __ __ _ ___ | |__ ___ _ | |(_) _ __ ___ / || || | _
+ / _` || '_ \ / _` | / __|| '_ \ / _ \(_) | || || '_ \ / _ \ | || || |_(_)
+| (_| || |_) || (_| || (__ | | | || __/ _ | || || | | || __/ | ||__ _|_
+ \__,_|| .__/ \__,_| \___||_| |_| \___|(_) |_||_||_| |_| \___| |_| |_| (_)
+ |_|
+ _
+ ___ _ _ _ __ | |_ __ _ __ __ ___ _ __ _ __ ___ _ __
+/ __|| | | || '_ \ | __|/ _` |\ \/ / / _ \| '__|| '__|/ _ \ | '__|
+\__ \| |_| || | | || |_| (_| | > < | __/| | | | | (_) || |
+|___/ \__, ||_| |_| \__|\__,_|/_/\_\ \___||_| |_| \___/ |_|
+ |___/
+
+ _ __ ___ __ _ _ __
+| '_ \ / _ \ / _` || '__|
+| | | || __/| (_| || |
+|_| |_| \___| \__,_||_|
+
+ _ _
+ _ _ _ __ ___ __ __ _ __ ___ ___ | |_ ___ __| |
+| | | || '_ \ / _ \\ \/ /| '_ \ / _ \ / __|| __|/ _ \ / _` |
+| |_| || | | || __/ > < | |_) || __/| (__ | |_| __/| (_| |
+ \__,_||_| |_| \___|/_/\_\| .__/ \___| \___| \__|\___| \__,_|
+ |_|
+ _ _ _ __ _
+| |_ ___ | | __ ___ _ __ ( )\ \ ( )
+| __|/ _ \ | |/ // _ \| '_ \ \| | ||/
+| |_| (_) || <| __/| | | | > >
+ \__|\___/ |_|\_\\___||_| |_| | |
+ /_/
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __\ \
+/ / | | / _ \ / __|| '_ \ | |/ / \ \
+\ \ | || (_) |\__ \| | | || < / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/
+ |__/
+ _ _ _ _ _ _
+ __ _ _ __ __ _ ___ | |__ ___ _ | |(_) _ __ ___ / || || | _
+ / _` || '_ \ / _` | / __|| '_ \ / _ \(_) | || || '_ \ / _ \ | || || |_(_)
+| (_| || |_) || (_| || (__ | | | || __/ _ | || || | | || __/ | ||__ _|_
+ \__,_|| .__/ \__,_| \___||_| |_| \___|(_) |_||_||_| |_| \___| |_| |_| (_)
+ |_|
+ _ __ _
+( )\ \ ( )
+ \| | ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / / (_) ___ ___ | |__ | | __\ \ | |_ | |__ ___ _ __ | | ___ | |_
+/ / | | / _ \ / __|| '_ \ | |/ / \ \ | __|| '_ \ / _ \ | '_ \ | | / _ \ | __|
+\ \ | || (_) |\__ \| | | || < / / | |_ | | | || __/ | |_) || || (_) || |_
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/ \__||_| |_| \___| | .__/ |_| \___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_ | |__ (_) ___ | | __ ___ _ __ ___
+| __|| '_ \ | | / __|| |/ // _ \| '_ \ / __|
+| |_ | | | || || (__ | <| __/| | | |\__ \
+ \__||_| |_||_| \___||_|\_\\___||_| |_||___/
+
+ __ __ __ _ _ _ __
+ / / __ _ ___ _ _ / _| / _|(_) ___ | | __| |\ \
+/ / / _` |/ __|| | | || |_ | |_ | | / _ \| | / _` | \ \
+\ \| (_| |\__ \| |_| || _|| _|| || __/| || (_| | / /
+ \_\\__,_||___/ \__,_||_| |_| |_| \___||_| \__,_|/_/
+
+ _ _ _ _
+| |_ | |__ ___ ___ ___ __ _ _ __ ___ _ __ ( )| |_
+| __|| '_ \ / _ \ / __| / _ \ / _` || '__|/ _ \| '_ \|/ | __|
+| |_ | | | || (_) |\__ \| __/ | (_| || | | __/| | | | | |_
+ \__||_| |_| \___/ |___/ \___| \__,_||_| \___||_| |_| \__|
+
+ _ _ _ _ _
+ ___ | |__ ___ | || | ___ ___ _ __ (_) _ __ | |_ ___
+/ __|| '_ \ / _ \| || | / __| / __|| '__|| || '_ \ | __|/ __|
+\__ \| | | || __/| || | \__ \| (__ | | | || |_) || |_ \__ \
+|___/|_| |_| \___||_||_| |___/ \___||_| |_|| .__/ \__||___/
+ |_|
+ __ _ _ __ _ _ _
+ / / ___ _ __ (_) ___ | |__ \ \ | |_ | |__ (_) ___
+/ / / _ \| '__|| | / __|| '_ \ \ \ | __|| '_ \ | |/ __|
+\ \| __/| | | || (__ | | | | / / | |_ | | | || |\__ \
+ \_\\___||_| |_| \___||_| |_|/_/ \__||_| |_||_||___/
+
+ _ _ _ _ _
+__ __ __ _ ___ _ __ ( )| |_ ___ | |__ (_) ___ | | __ ___ _ __
+\ \ /\ / // _` |/ __|| '_ \|/ | __| / __|| '_ \ | | / __|| |/ // _ \| '_ \
+ \ V V /| (_| |\__ \| | | | | |_ | (__ | | | || || (__ | <| __/| | | | _
+ \_/\_/ \__,_||___/|_| |_| \__| \___||_| |_||_| \___||_|\_\\___||_| |_|(_)
+
+ _
+ (_) _ __
+ _____ _____ | || '_ \
+ |_____||_____| | || | | |
+ |_||_| |_|
+
+ _ _ _ _ _ _
+ _| || |_ __| | ___ | |__ (_) __ _ _ __ __| | ___ __ __ ___
+|_ .. _| / _` | / _ \| '_ \ | | / _` || '_ \ _____ / _` | / _ \\ \ / // _ \
+|_ _|| (_| || __/| |_) || || (_| || | | ||_____|| (_| || __/ \ V /| __/
+ |_||_| \__,_| \___||_.__/ |_| \__,_||_| |_| \__,_| \___| \_/ \___|
+
+ _
+| |
+| |
+| |
+|_|
+
diff --git a/externals/figlet/tests/res010.txt b/externals/figlet/tests/res010.txt
new file mode 100644
index 0000000000..43a2523636
--- /dev/null
+++ b/externals/figlet/tests/res010.txt
@@ -0,0 +1,156 @@
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __ \ \
+ / / | | / _ \ / __| | '_ \ | |/ / \ \
+ \ \ | | | (_) | \__ \ | | | | | < / /
+ \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/
+ |__/
+ _ _ _ ____ _ __ _
+ (_) ___ ___ | |__ | | __ / __ \ (_) _ __ / _| | | _ _
+ | | / _ \ / __| | '_ \ | |/ / / / _` | | | | '_ \ | |_ | | | | | |
+ | | | (_) | \__ \ | | | | | < | | (_| | | | | | | | | _| | | | |_| |
+ _/ | \___/ |___/ |_| |_| |_|\_\ \ \__,_| |_| |_| |_| |_| |_| \__,_|
+ |__/ \____/
+ __ _ __ _
+ __ __ _ / / ___ | |_ ___ / / | | ___ __ _ _ __
+ \ \/ / (_) / / / _ \ | __| / __| / / | | / _ \ / _` | | '__|
+ > < _ / / | __/ | |_ | (__ / / | | | (_) | | (_| | | |
+ /_/\_\ (_) /_/ \___| \__| \___| /_/ |_| \___/ \__, | |_|
+ |___/
+ _ _ _ __ _
+ ___ | |_ __ _ | |_ ___ __| | \ \ ___ | |__
+ / _ \ | __| / _` | | __| / _ \ / _` | \ \ / __| | '_ \
+ | (_) | | |_ | (_| | | |_ | __/ _ | (_| | / / \__ \ | | | |
+ \___/ \__| \__,_| \__| \___| (_) \__,_| /_/ |___/ |_| |_|
+
+
+ _ __ __/\__
+ _____ | '_ \ \ /
+ |_____| | | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __ \ \
+ / / | | / _ \ / __| | '_ \ | |/ / \ \
+ \ \ | | | (_) | \__ \ | | | | | < / /
+ \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/
+ |__/
+ _ _ _
+ __ _ _ __ __ _ ___ | |__ ___ _ | | (_) _ __ ___
+ / _` | | '_ \ / _` | / __| | '_ \ / _ \ (_) | | | | | '_ \ / _ \
+ | (_| | | |_) | | (_| | | (__ | | | | | __/ _ | | | | | | | | | __/
+ \__,_| | .__/ \__,_| \___| |_| |_| \___| (_) |_| |_| |_| |_| \___|
+ |_|
+ _ _ _ _
+ / | | || | _ ___ _ _ _ __ | |_ __ _ __ __
+ | | | || |_ (_) / __| | | | | | '_ \ | __| / _` | \ \/ /
+ | | |__ _| _ \__ \ | |_| | | | | | | |_ | (_| | > <
+ |_| |_| (_) |___/ \__, | |_| |_| \__| \__,_| /_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ | '__| | '__| / _ \ | '__| | '_ \ / _ \ / _` | | '__|
+ | __/ | | | | | (_) | | | | | | | | __/ | (_| | | |
+ \___| |_| |_| \___/ |_| |_| |_| \___| \__,_| |_|
+
+ _ _
+ _ _ _ __ ___ __ __ _ __ ___ ___ | |_ ___ __| |
+ | | | | | '_ \ / _ \ \ \/ / | '_ \ / _ \ / __| | __| / _ \ / _` |
+ | |_| | | | | | | __/ > < | |_) | | __/ | (__ | |_ | __/ | (_| |
+ \__,_| |_| |_| \___| /_/\_\ | .__/ \___| \___| \__| \___| \__,_|
+ |_|
+ _ _ _ __ _
+ | |_ ___ | | __ ___ _ __ ( ) \ \ ( )
+ | __| / _ \ | |/ / / _ \ | '_ \ \| | | |/
+ | |_ | (_) | | < | __/ | | | | > >
+ \__| \___/ |_|\_\ \___| |_| |_| | |
+ /_/
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __ \ \
+ / / | | / _ \ / __| | '_ \ | |/ / \ \
+ \ \ | | | (_) | \__ \ | | | | | < / /
+ \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/
+ |__/
+ _ _ _
+ __ _ _ __ __ _ ___ | |__ ___ _ | | (_) _ __ ___
+ / _` | | '_ \ / _` | / __| | '_ \ / _ \ (_) | | | | | '_ \ / _ \
+ | (_| | | |_) | | (_| | | (__ | | | | | __/ _ | | | | | | | | | __/
+ \__,_| | .__/ \__,_| \___| |_| |_| \___| (_) |_| |_| |_| |_| \___|
+ |_|
+ _ _ _ _ __ _
+ / | | || | _ ( ) \ \ ( )
+ | | | || |_ (_) \| | | |/
+ | | |__ _| _ > >
+ |_| |_| (_) | |
+ /_/
+ __ _ _ _ __ _ _
+ / / (_) ___ ___ | |__ | | __ \ \ | |_ | |__ ___
+ / / | | / _ \ / __| | '_ \ | |/ / \ \ | __| | '_ \ / _ \
+ \ \ | | | (_) | \__ \ | | | | | < / / | |_ | | | | | __/
+ \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/ \__| |_| |_| \___|
+ |__/
+ _ _
+ _ __ | | ___ | |_
+ | '_ \ | | / _ \ | __|
+ | |_) | | | | (_) | | |_
+ | .__/ |_| \___/ \__|
+ |_|
+ _ _ _ _
+ | |_ | |__ (_) ___ | | __ ___ _ __ ___
+ | __| | '_ \ | | / __| | |/ / / _ \ | '_ \ / __|
+ | |_ | | | | | | | (__ | < | __/ | | | | \__ \
+ \__| |_| |_| |_| \___| |_|\_\ \___| |_| |_| |___/
+
+ __ __ __ _ _ _ __
+ / / __ _ ___ _ _ / _| / _| (_) ___ | | __| | \ \
+ / / / _` | / __| | | | | | |_ | |_ | | / _ \ | | / _` | \ \
+ \ \ | (_| | \__ \ | |_| | | _| | _| | | | __/ | | | (_| | / /
+ \_\ \__,_| |___/ \__,_| |_| |_| |_| \___| |_| \__,_| /_/
+
+ _ _ _ _
+ | |_ | |__ ___ ___ ___ __ _ _ __ ___ _ __ ( ) | |_
+ | __| | '_ \ / _ \ / __| / _ \ / _` | | '__| / _ \ | '_ \ |/ | __|
+ | |_ | | | | | (_) | \__ \ | __/ | (_| | | | | __/ | | | | | |_
+ \__| |_| |_| \___/ |___/ \___| \__,_| |_| \___| |_| |_| \__|
+
+ _ _ _ _ _
+ ___ | |__ ___ | | | | ___ ___ _ __ (_) _ __ | |_ ___
+ / __| | '_ \ / _ \ | | | | / __| / __| | '__| | | | '_ \ | __| / __|
+ \__ \ | | | | | __/ | | | | \__ \ | (__ | | | | | |_) | | |_ \__ \
+ |___/ |_| |_| \___| |_| |_| |___/ \___| |_| |_| | .__/ \__| |___/
+ |_|
+ __ _ _ __ _ _ _
+ / / ___ _ __ (_) ___ | |__ \ \ | |_ | |__ (_) ___
+ / / / _ \ | '__| | | / __| | '_ \ \ \ | __| | '_ \ | | / __|
+ \ \ | __/ | | | | | (__ | | | | / / | |_ | | | | | | \__ \
+ \_\ \___| |_| |_| \___| |_| |_| /_/ \__| |_| |_| |_| |___/
+
+ _ _
+ __ __ __ _ ___ _ __ ( ) | |_
+ \ \ /\ / / / _` | / __| | '_ \ |/ | __|
+ \ V V / | (_| | \__ \ | | | | | |_
+ \_/\_/ \__,_| |___/ |_| |_| \__|
+
+ _ _ _
+ ___ | |__ (_) ___ | | __ ___ _ __
+ / __| | '_ \ | | / __| | |/ / / _ \ | '_ \
+ | (__ | | | | | | | (__ | < | __/ | | | | _
+ \___| |_| |_| |_| \___| |_|\_\ \___| |_| |_| (_)
+
+ _
+ (_) _ __
+ _____ _____ | | | '_ \
+ |_____| |_____| | | | | | |
+ |_| |_| |_|
+
+ _ _ _ _ _ _
+ _| || |_ __| | ___ | |__ (_) __ _ _ __ __| | ___
+ |_ .. _| / _` | / _ \ | '_ \ | | / _` | | '_ \ _____ / _` | / _ \
+ |_ _| | (_| | | __/ | |_) | | | | (_| | | | | | |_____| | (_| | | __/
+ |_||_| \__,_| \___| |_.__/ |_| \__,_| |_| |_| \__,_| \___|
+
+ _
+ __ __ ___ | |
+ \ \ / / / _ \ | |
+ \ V / | __/ | |
+ \_/ \___| |_|
+
diff --git a/externals/figlet/tests/res011.txt b/externals/figlet/tests/res011.txt
new file mode 100644
index 0000000000..3b669a139d
--- /dev/null
+++ b/externals/figlet/tests/res011.txt
@@ -0,0 +1,114 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | _\ \
+/ / | |/ _ \/ __| '_ \| |/ /\ \
+\ \ | | (_) \__ | | | | < / /
+ \__/ |\___/|___|_| |_|_|\_/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / ___| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ | __/ __|
+ | | (_) \__ | | | | | | (_| | | | | | _| | |_| |> < _ / | __| || (__
+ _/ |\___/|___|_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_/_/ \___|\__\___|
+|__/ \____/
+ ___ _ _ ___ _
+ / | | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ _ __
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ / __| '_ \ _____| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ \__ | | | |_____| | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_\__,_/_/|___|_| |_| |_| |_|
+ |___/
+
+__/\__
+\ /
+/_ _\
+ \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | _\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ /\ \/ _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ | | | | < / | (_| | |_) | (_| | (__| | | | __/_
+ \__/ |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+| (_)_ __ ___/ | || | _ ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ | | || |(_/ __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __| |__ __\__ | |_| | | | | || (_| |> <
+|_|_|_| |_|\___|_| |_|(_|___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ | '__| '__/ _ \| '__| '_ \ / _ \/ _` | '__|
+| __| | | | | (_) | | | | | | __| (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ | '_ \ / _ \/ __| __/ _ \/ _` | __/ _ \| |/ / _ | '_ \
+| |_| | | | | __/> <| |_) | __| (__| || __| (_| | || (_) | | __| | | |
+ \__,_|_| |_|\___/_/\_| .__/ \___|\___|\__\___|\__,_|\__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+( \ \( )
+ \|| |/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | _\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ /\ \/ _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ | | | | < / | (_| | |_) | (_| | (__| | | | __/_
+ \__/ |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+| (_)_ __ ___/ | || | _( \ \( )
+| | | '_ \ / _ | | || |(_)\|| |/
+| | | | | | __| |__ __ > >
+|_|_|_| |_|\___|_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | _\ \| |_| |__ ___ _ __ | | ___ | |_
+/ / | |/ _ \/ __| '_ \| |/ /\ | __| '_ \ / _ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ | | | | < / | |_| | | | __| |_) | | (_) | |_
+ \__/ |\___/|___|_| |_|_|\_/_/ \__|_| |_|\___| .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_| |__ (_) ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ | '_ \/ __|
+| |_| | | | | (__| | __| | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \| |_| |__ ___ ___ ___
+/ // _` / __| | | | |_| |_| |/ _ | |/ _` |\ | __| '_ \ / _ \/ __|/ _ \
+\ | (_| \__ | |_| | _| _| | __| | (_| |/ | |_| | | | (_) \__ | __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _ _ _
+ __ _ _ __ ___ _ __( | |_ ___| |__ ___| | |___ ___ _ __(_)_ __ | |_ ___
+ / _` | '__/ _ | '_ |/| __/ __| '_ \ / _ | | / __|/ __| '__| | '_ \| __/ __|
+| (_| | | | __| | | || |_\__ | | | | __| | \__ | (__| | | | |_) | |_\__ \
+ \__,_|_| \___|_| |_| \__|___|_| |_|\___|_|_|___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \| |_| |__ (_)_____ ____ _ ___ _ __( | |_
+/ // _ | '__| |/ __| '_ \ \ | __| '_ \| / __\ \ /\ / / _` / __| '_ |/| __|
+\ | __| | | | (__| | | |/ | |_| | | | \__ \\ V V | (_| \__ | | | || |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___|_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ | '_ \
+| (__| | | | | (__| | __| | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____| | '_ \
+|_____|_____| | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+|_ .. _|/ _` |/ _ | '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ | |
+|_ _| (_| | __| |_) | | (_| | | | |_____| (_| | __/\ V | __| |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res012.txt b/externals/figlet/tests/res012.txt
new file mode 100644
index 0000000000..3a25e26453
--- /dev/null
+++ b/externals/figlet/tests/res012.txt
@@ -0,0 +1,36 @@
+ ┛┏━┃┏━┛┃ ┃┃ ┃
+ ┃┃ ┃━━┃┏━┃┏┛
+<━┛━━┛━━┛┛ ┛┛ ┛>
+ ┛┏━┃┏━┛┃ ┃┃ ┃┏━┃┛┏━ ┏━┛┃ ┃ ┃┃ ┃ ┛┏━┛━┏┛┏━┛ ┛┃ ┏━┃┏━┛┏━┃┏━┃━┏┛┏━┃━┏┛┏━┛
+ ┃┃ ┃━━┃┏━┃┏┛ ┃┛┛┃┃ ┃┏━┛┃ ┃ ┃ ┛ ┛ ┛ ┏━┛ ┃ ┃ ┛ ┃ ┃ ┃┃ ┃┏┏┛┃ ┃ ┃ ┏━┃ ┃ ┏━┛
+━┛━━┛━━┛┛ ┛┛ ┛━━┛┛┛ ┛┛ ━━┛━━┛┛ ┛┛┛ ━━┛ ┛ ━━┛┛ ━━┛━━┛━━┛┛ ┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛
+┏━ ┏━┛┃ ┃ ┏━ ┛ ┛
+┃ ┃ ━━┃┏━┃ ━┛┃ ┃ ━┏┛
+━━ > ━━┛┛ ┛ ┛ ┛ ┛ ┛
+ ┛┏━┃┏━┛┃ ┃┃ ┃ ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛ ┃ ┛┏━ ┏━┛ ━┃ ┃ ┃ ┏━┛┃ ┃┏━ ━┏┛┏━┃┃ ┃
+ ┃┃ ┃━━┃┏━┃┏┛ ┏━┃┏━┛┏━┃┃ ┏━┃┏━┛┛ ┃ ┃┃ ┃┏━┛ ┃ ━━┃┛ ━━┃━┏┛┃ ┃ ┃ ┏━┃ ┛
+<━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛ ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━━┛ ┛ ┛ ┛ ┛ ┛ ┛┛ ┛
+┏━┛┏━┃┏━┃┏━┃┏━┃ ┏━ ┏━┛┏━┃┏━┃ ┃ ┃┏━ ┏━┛┃ ┃┏━┃┏━┛┏━┛━┏┛┏━┛┏━ ━┏┛┏━┃┃ ┃┏━┛┏━
+┏━┛┏┏┛┏┏┛┃ ┃┏┏┛ ┃ ┃┏━┛┏━┃┏┏┛ ┃ ┃┃ ┃┏━┛ ┛ ┏━┛┏━┛┃ ┃ ┏━┛┃ ┃ ┃ ┃ ┃┏┛ ┏━┛┃ ┃
+━━┛┛ ┛┛ ┛━━┛┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛ ━━┛┛ ┛━━┛┛ ┛┛ ━━┛━━┛ ┛ ━━┛━━ ┛ ━━┛┛ ┛━━┛┛ ┛
+┛ ━┃ ┛
+ ┛ ┏┛
+ ━┛
+ ┛┏━┃┏━┛┃ ┃┃ ┃ ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛ ┃ ┛┏━ ┏━┛ ━┃ ┃ ┃ ┛ ━┃ ┛
+ ┃┃ ┃━━┃┏━┃┏┛ ┏━┃┏━┛┏━┃┃ ┏━┃┏━┛┛ ┃ ┃┃ ┃┏━┛ ┃ ━━┃┛ ┛ ┏┛
+<━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛ ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━┛
+ ┛┏━┃┏━┛┃ ┃┃ ┃ ━┏┛┃ ┃┏━┛ ┏━┃┃ ┏━┃━┏┛ ━┏┛┃ ┃┛┏━┛┃ ┃┏━┛┏━ ┏━┛
+ ┃┃ ┃━━┃┏━┃┏┛ ┃ ┏━┃┏━┛ ┏━┛┃ ┃ ┃ ┃ ┃ ┏━┃┃┃ ┏┛ ┏━┛┃ ┃━━┃
+<━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛ ┛━━┛ ┛ ━━┛━━┛ ┛ ┛ ┛ ┛┛━━┛┛ ┛━━┛┛ ┛━━┛
+ ┏━┃┏━┛┃ ┃┏━┛┏━┛┛┏━┛┃ ┏━ ━┏┛┃ ┃┏━┃┏━┛┏━┛ ┏━┃┏━┃┏━┛┏━ ┛━┏┛ ┏━┛┃ ┃┏━┛┃ ┃
+ ┏━┃━━┃┃ ┃┏━┛┏━┛┃┏━┛┃ ┃ ┃ ┃ ┏━┃┃ ┃━━┃┏━┛ ┏━┃┏┏┛┏━┛┃ ┃ ┃ ━━┃┏━┃┏━┛┃ ┃
+<┛ ┛━━┛━━┛┛ ┛ ┛━━┛━━┛━━ > ┛ ┛ ┛━━┛━━┛━━┛ ┛ ┛┛ ┛━━┛┛ ┛ ┛ ━━┛┛ ┛━━┛━━┛━━┛
+┏━┛┏━┛┏━┃┛┏━┃━┏┛┏━┛
+━━┃┃ ┏┏┛┃┏━┛ ┃ ━━┃
+━━┛━━┛┛ ┛┛┛ ┛ ━━┛
+ ┏━┛┏━┃┛┏━┛┃ ┃ ━┏┛┃ ┃┛┏━┛ ┃┃┃┏━┃┏━┛┏━ ┛━┏┛ ┏━┛┃ ┃┛┏━┛┃ ┃┏━┛┏━
+ ┏━┛┏┏┛┃┃ ┏━┃ ┃ ┏━┃┃━━┃ ┃┃┃┏━┃━━┃┃ ┃ ┃ ┃ ┏━┃┃┃ ┏┛ ┏━┛┃ ┃
+<━━┛┛ ┛┛━━┛┛ ┛> ┛ ┛ ┛┛━━┛ ━━┛┛ ┛━━┛┛ ┛ ┛ ━━┛┛ ┛┛━━┛┛ ┛━━┛┛ ┛┛
+ ┛┏━ ┏━ ┏━┛┏━ ┛┏━┃┏━ ┏━ ┏━┛┃ ┃┏━┛┃
+ ━┛━┛ ┃┃ ┃ ┃ ┃┏━┛┏━┃┃┏━┃┃ ┃━┛┃ ┃┏━┛┃ ┃┏━┛┃
+ ┛┛ ┛ #━━ ━━┛━━ ┛┛ ┛┛ ┛ ━━ ━━┛ ┛ ━━┛━━┛
diff --git a/externals/figlet/tests/res013.txt b/externals/figlet/tests/res013.txt
new file mode 100644
index 0000000000..6983f2faa4
--- /dev/null
+++ b/externals/figlet/tests/res013.txt
@@ -0,0 +1,132 @@
+ __ _ _ _ __
+ \ \ | | __| |__ ___ ___ (_) / /
+ \ \| |/ /| '_ \ / __| / _ \ | |/ /
+ / /| < | | | |\__ \| (_) || |\ \
+ /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+ |__/
+ __ _ __ _ ____ _ _ _
+ / /_ __ __ _ _ | | / _| _ __ (_) / __ \ | | __| |__ ___ ___ (_)
+ / /(_)\ \/ /| | | || || |_ | '_ \ | | / / _` || |/ /| '_ \ / __| / _ \ | |
+ / / _ > < | |_| || || _|| | | || || | (_| || < | | | |\__ \| (_) || |
+ /_/ (_)/_/\_\ \__,_||_||_| |_| |_||_| \ \__,_||_|\_\|_| |_||___/ \___/_/ |
+ \____/ |__/
+ _ _ _ __ _
+ ___ | |_ __ _ | |_ ___ _ __ __ _ ___ | | / /___ | |_ ___
+ / _ \| __|/ _` || __|/ _ \ | '__|/ _` | / _ \ | | / // __|| __|/ _ \
+ _| __/| |_| (_| || |_| (_) || | | (_| || (_) || | / /| (__ | |_| __/
+ (_)\___| \__|\__,_| \__|\___/ |_| \__, | \___/ |_|/_/ \___| \__|\___|
+ |___/
+ _ __ _
+ __/\__ _ __ | |__ ___ \ \ __| |
+ \ / | '_ \ _____ | '_ \ / __| \ \ / _` |
+ /_ _\ | | | ||_____| | | | |\__ \ / /| (_| |
+ \/ |_| |_| |_| |_||___/ /_/ \__,_|
+
+ _ __ _ _ _ __
+ _ ___ | |__ ___ __ _ _ __ __ _ \ \ | | __| |__ ___ ___ (_) / /
+ (_)/ _ \| '_ \ / __|/ _` || '_ \ / _` | \ \| |/ /| '_ \ / __| / _ \ | |/ /
+ _| __/| | | || (__| (_| || |_) || (_| | / /| < | | | |\__ \| (_) || |\ \
+ (_)\___||_| |_| \___|\__,_|| .__/ \__,_| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+ |_| |__/
+ _ _ _ _ _ _
+ __ __ __ _ | |_ _ __ _ _ ___ _ | || | / | ___ _ __ (_)| |
+ \ \/ // _` || __|| '_ \ | | | |/ __| (_)| || |_ | | / _ \| '_ \ | || |
+ > <| (_| || |_ | | | || |_| |\__ \ _ |__ _|| | | __/| | | || || |
+ /_/\_\\__,_| \__||_| |_| \__, ||___/ (_) |_| |_| \___||_| |_||_||_|
+ |___/
+
+ _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___
+ | '__|/ _` | / _ \| '_ \ | '__|/ _ \ | '__|| '__|/ _ \
+ | | | (_| || __/| | | | | | | (_) || | | | | __/
+ |_| \__,_| \___||_| |_| |_| \___/ |_| |_| \___|
+
+ _ _
+ __| | ___ | |_ ___ ___ _ __ __ __ ___ _ __ _ _
+ / _` | / _ \| __|/ __|/ _ \| '_ \\ \/ // _ \| '_ \ | | | |
+ | (_| || __/| |_| (__| __/| |_) |> <| __/| | | || |_| |
+ \__,_| \___| \__|\___|\___|| .__//_/\_\\___||_| |_| \__,_|
+ |_|
+ _ __ _ _ _
+ ( )\ \ ( ) _ __ ___ | | __ ___ | |_
+ |/ | | \| | '_ \ / _ \| |/ // _ \ | __|
+ > > | | | || __/| <| (_) || |_
+ | | |_| |_| \___||_|\_\\___/ \__|
+ /_/
+ _ __ _ _ _ __
+ _ ___ | |__ ___ __ _ _ __ __ _ \ \ | | __| |__ ___ ___ (_) / /
+ (_)/ _ \| '_ \ / __|/ _` || '_ \ / _` | \ \| |/ /| '_ \ / __| / _ \ | |/ /
+ _| __/| | | || (__| (_| || |_) || (_| | / /| < | | | |\__ \| (_) || |\ \
+ (_)\___||_| |_| \___|\__,_|| .__/ \__,_| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+ |_| |__/
+ _ __ _ _ _ _ _ _
+ ( )\ \ ( ) _ | || | / | ___ _ __ (_)| |
+ |/ | | \| (_)| || |_ | | / _ \| '_ \ | || |
+ > > _ |__ _|| | | __/| | | || || |
+ | | (_) |_| |_| \___||_| |_||_||_|
+ /_/
+ _ _ _ _ __ _ _ _ __
+ | |_ ___ | | _ __ ___ | |__ | |_ \ \ | | __| |__ ___ ___ (_) / /
+ | __|/ _ \ | || '_ \ / _ \| '_ \ | __| \ \| |/ /| '_ \ / __| / _ \ | |/ /
+ | |_| (_) || || |_) | | __/| | | || |_ / /| < | | | |\__ \| (_) || |\ \
+ \__|\___/ |_|| .__/ \___||_| |_| \__| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+ |_| |__/
+ _ _ _ _
+ ___ _ __ ___ | | __ ___ (_)| |__ | |_
+ / __|| '_ \ / _ \| |/ // __|| || '_ \ | __|
+ \__ \| | | || __/| <| (__ | || | | || |_
+ |___/|_| |_| \___||_|\_\\___||_||_| |_| \__|
+
+ __ _ _ _ __ __ __
+ \ \ __| || | ___ (_) / _| / _| _ _ ___ __ _ / /
+ \ \ / _` || | / _ \| || |_ | |_ | | | |/ __| / _` |/ /
+ / /| (_| || || __/| || _|| _|| |_| |\__ \| (_| |\ \
+ /_/ \__,_||_| \___||_||_| |_| \__,_||___/ \__,_| \_\
+
+ _ _ _ _
+ | |_ ( )_ __ ___ _ __ __ _ ___ ___ ___ | |__ | |_
+ | __||/| '_ \ / _ \| '__|/ _` | / _ \/ __| / _ \ | '_ \ | __|
+ | |_ | | | || __/| | | (_| | | __/\__ \| (_) || | | || |_
+ \__| |_| |_| \___||_| \__,_| \___||___/ \___/ |_| |_| \__|
+
+ _ _ _ _ _
+ ___ | |_ _ __ (_) _ __ ___ ___ | || | ___ | |__ ___
+ / __|| __|| '_ \ | || '__|/ __|/ __| | || | / _ \| '_ \ / __|
+ \__ \| |_ | |_) || || | | (__ \__ \ | || || __/| | | |\__ \
+ |___/ \__|| .__/ |_||_| \___||___/ |_||_| \___||_| |_||___/
+ |_|
+ _ _ _ __ _ _ __
+ ___ (_)| |__ | |_ \ \ | |__ ___ (_) _ __ ___ / /
+ / __|| || '_ \ | __| \ \| '_ \ / __|| || '__|/ _ \/ /
+ \__ \| || | | || |_ / /| | | || (__ | || | | __/\ \
+ |___/|_||_| |_| \__| /_/ |_| |_| \___||_||_| \___| \_\
+
+ _ _
+ | |_ ( )_ __ ___ __ _ __ __
+ | __||/| '_ \ / __| / _` |\ \ /\ / /
+ | |_ | | | |\__ \| (_| | \ V V /
+ \__| |_| |_||___/ \__,_| \_/\_/
+
+ _ _ _
+ _ __ ___ | | __ ___ (_)| |__ ___
+ | '_ \ / _ \| |/ // __|| || '_ \ / __|
+ _ | | | || __/| <| (__ | || | | || (__
+ (_)|_| |_| \___||_|\_\\___||_||_| |_| \___|
+
+ _
+ _ __ (_)
+ | '_ \ | | _____ _____
+ | | | || | |_____||_____|
+ |_| |_||_|
+
+ _ _ _ _ _ _
+ __ __ ___ __| | _ __ __ _ (_)| |__ ___ __| | _| || |_
+ \ \ / // _ \ / _` | _____ | '_ \ / _` || || '_ \ / _ \ / _` ||_ .. _|
+ \ V /| __/| (_| ||_____|| | | || (_| || || |_) || __/| (_| ||_ _|
+ \_/ \___| \__,_| |_| |_| \__,_||_||_.__/ \___| \__,_| |_||_|
+
+ _
+ | | ___
+ | | / _ \
+ | || __/
+ |_| \___|
+
diff --git a/externals/figlet/tests/res014.txt b/externals/figlet/tests/res014.txt
new file mode 100644
index 0000000000..545bbce996
--- /dev/null
+++ b/externals/figlet/tests/res014.txt
@@ -0,0 +1,144 @@
+ __ __ __ _ __
+ \ \ / /__ / /_ _____ ____ (_)/ /
+ \ \ / //_// __ \ / ___// __ \ / // /
+ / // ,< / / / /(__ )/ /_/ / / / \ \
+ /_//_/|_|/_/ /_//____/ \____/__/ / \_\
+ /___/
+ __ ____ _ ______ __ __ _
+ _ _ __ __ __ / // __/____ (_)/ ____ \ / /__ / /_ _____ ____ (_)
+ (_)| |/_// / / // // /_ / __ \ / // / __ `// //_// __ \ / ___// __ \ / /
+ _ _> < / /_/ // // __// / / // // / /_/ // ,< / / / /(__ )/ /_/ / / /
+ (_)/_/|_| \__,_//_//_/ /_/ /_//_/ \ \__,_//_/|_|/_/ /_//____/ \____/__/ /
+ \____/ /___/
+ __ __ __ __ __ __
+ / /_ ____ _ / /_ ____ _____ ____ _ ____ / / _/_/_____ / /_ ___ _/_/
+ / __// __ `// __// __ \ / ___// __ `// __ \ / / _/_/ / ___// __// _ \ _/_/
+ / /_ / /_/ // /_ / /_/ // / / /_/ // /_/ // /_/_/ / /__ / /_ / __/_/_/
+ \__/ \__,_/ \__/ \____//_/ \__, / \____//_//_/ \___/ \__/ \___//_/
+ /____/
+ __ __ __
+ __/|_ ____ / /_ _____ \ \ ____/ / ___
+ | / / __ \ ______ / __ \ / ___/ \ \ / __ / / _ \
+ /_ __| / / / //_____/ / / / /(__ ) / // /_/ /_ / __/
+ |/ /_/ /_/ /_/ /_//____/ /_/ \__,_/(_)\___/
+
+ __ __ __ _ __
+ \ \ / /__ / /_ _____ ____ (_)/ /
+ \ \ / //_// __ \ / ___// __ \ / // /
+ / // ,< / / / /(__ )/ /_/ / / / \ \
+ /_//_/|_|/_/ /_//____/ \____/__/ / \_\
+ /___/
+ _ __ __
+ ___ ____ (_)/ / _ ___ / /_ _____ ____ _ ____ ____ _
+ / _ \ / __ \ / // / (_)/ _ \ / __ \ / ___// __ `// __ \ / __ `/
+ / __// / / // // / _ / __// / / // /__ / /_/ // /_/ // /_/ /
+ \___//_/ /_//_//_/ (_) \___//_/ /_/ \___/ \__,_// .___/ \__,_/
+ /_/
+ __ __ __ ___
+ _ __ ____ _ / /_ ____ __ __ _____ _ / // / < /
+ | |/_// __ `// __// __ \ / / / // ___/ (_)/ // /_ / /
+ _> < / /_/ // /_ / / / // /_/ /(__ ) _ /__ __// /
+ /_/|_| \__,_/ \__//_/ /_/ \__, //____/ (_) /_/ /_/
+ /____/
+
+ _____ ____ _ ___ ____ _____ ____ _____ _____ ___
+ / ___// __ `// _ \ / __ \ / ___// __ \ / ___// ___// _ \
+ / / / /_/ // __// / / / / / / /_/ // / / / / __/
+ /_/ \__,_/ \___//_/ /_/ /_/ \____//_/ /_/ \___/
+
+ __ __
+ ____/ /___ / /_ _____ ___ ____ _ __ ___ ____ __ __
+ / __ // _ \ / __// ___// _ \ / __ \ | |/_// _ \ / __ \ / / / /
+ / /_/ // __// /_ / /__ / __// /_/ /_> < / __// / / // /_/ /
+ \__,_/ \___/ \__/ \___/ \___// .___//_/|_| \___//_/ /_/ \__,_/
+ /_/
+ _ _ _ __ __
+ ( )| |( ) ____ ___ / /__ ____ / /_
+ |/ / / V / __ \ / _ \ / //_// __ \ / __/
+ _>_> / / / // __// ,< / /_/ // /_
+ _/_/ /_/ /_/ \___//_/|_| \____/ \__/
+ /_/
+ __ __ __ _ __
+ \ \ / /__ / /_ _____ ____ (_)/ /
+ \ \ / //_// __ \ / ___// __ \ / // /
+ / // ,< / / / /(__ )/ /_/ / / / \ \
+ /_//_/|_|/_/ /_//____/ \____/__/ / \_\
+ /___/
+ _ __ __
+ ___ ____ (_)/ / _ ___ / /_ _____ ____ _ ____ ____ _
+ / _ \ / __ \ / // / (_)/ _ \ / __ \ / ___// __ `// __ \ / __ `/
+ / __// / / // // / _ / __// / / // /__ / /_/ // /_/ // /_/ /
+ \___//_/ /_//_//_/ (_) \___//_/ /_/ \___/ \__,_// .___/ \__,_/
+ /_/
+ _ _ _ __ __ ___
+ ( )| |( ) _ / // / < /
+ |/ / / V (_)/ // /_ / /
+ _>_> _ /__ __// /
+ _/_/ (_) /_/ /_/
+ /_/
+ __ __ __ __ __ _ __
+ ___ / /_ / /_ \ \ / /__ / /_ _____ ____ (_)/ /
+ / _ \ / __ \ / __/ \ \ / //_// __ \ / ___// __ \ / // /
+ / __// / / // /_ / // ,< / / / /(__ )/ /_/ / / / \ \
+ \___//_/ /_/ \__/ /_//_/|_|/_/ /_//____/ \____/__/ / \_\
+ /___/
+ __ _ __ __ __ __
+ _____ ____ ___ / /__ _____ (_)/ /_ / /_ / /_ ____ / /____
+ / ___// __ \ / _ \ / //_// ___// // __ \ / __/ / __// __ \ / // __ \
+ (__ )/ / / // __// ,< / /__ / // / / // /_ / /_ / /_/ // // /_/ /
+ /____//_/ /_/ \___//_/|_| \___//_//_/ /_/ \__/ \__/ \____//_// .___/
+ /_/
+ __ __ __ _ ____ ____ __
+ \ \ ____/ // /___ (_)/ __// __/__ __ _____ ____ _ / /
+ \ \ / __ // // _ \ / // /_ / /_ / / / // ___// __ `// /
+ / // /_/ // // __// // __// __// /_/ /(__ )/ /_/ / \ \
+ /_/ \__,_//_/ \___//_//_/ /_/ \__,_//____/ \__,_/ \_\
+
+ __ _ __ __
+ / /_( )____ ___ _____ ____ _ ___ _____ ____ / /_ / /_
+ / __/|// __ \ / _ \ / ___// __ `/ / _ \ / ___// __ \ / __ \ / __/
+ / /_ / / / // __// / / /_/ / / __/(__ )/ /_/ // / / // /_
+ \__/ /_/ /_/ \___//_/ \__,_/ \___//____/ \____//_/ /_/ \__/
+
+ __ _ __ __ __
+ _____ / /_ ____ (_)_____ _____ _____ / // /___ / /_ _____
+ / ___// __// __ \ / // ___// ___// ___/ / // // _ \ / __ \ / ___/
+ (__ )/ /_ / /_/ // // / / /__ (__ ) / // // __// / / /(__ )
+ /____/ \__// .___//_//_/ \___//____/ /_//_/ \___//_/ /_//____/
+ /_/
+ _ __ __ __ __ _ __
+ _____ (_)/ /_ / /_ \ \ / /_ _____ (_)_____ ___ / /
+ / ___// // __ \ / __/ \ \ / __ \ / ___// // ___// _ \/ /
+ (__ )/ // / / // /_ / // / / // /__ / // / / __/\ \
+ /____//_//_/ /_/ \__/ /_//_/ /_/ \___//_//_/ \___/ \_\
+
+ __ _
+ / /_( )____ _____ ____ _ _ __
+ / __/|// __ \ / ___// __ `/| | /| / /
+ / /_ / / / /(__ )/ /_/ / | |/ |/ /
+ \__/ /_/ /_//____/ \__,_/ |__/|__/
+
+ __ _ __
+ ____ ___ / /__ _____ (_)/ /_ _____
+ / __ \ / _ \ / //_// ___// // __ \ / ___/
+ _ / / / // __// ,< / /__ / // / / // /__
+ (_)/_/ /_/ \___//_/|_| \___//_//_/ /_/ \___/
+
+ _
+ ____ (_)
+ / __ \ / / ______ ______
+ / / / // / /_____//_____/
+ /_/ /_//_/
+
+ __ _ __ __ __ __
+ _ __ ___ ____/ / ____ ____ _ (_)/ /_ ___ ____/ /__/ // /_
+ | | / // _ \ / __ /______ / __ \ / __ `// // __ \ / _ \ / __ //_ _ __/
+ | |/ // __// /_/ //_____// / / // /_/ // // /_/ // __// /_/ //_ _ __/
+ |___/ \___/ \__,_/ /_/ /_/ \__,_//_//_.___/ \___/ \__,_/ /_//_/
+
+ __
+ / /___
+ / // _ \
+ / // __/
+ /_/ \___/
+
diff --git a/externals/figlet/tests/res015.txt b/externals/figlet/tests/res015.txt
new file mode 100644
index 0000000000..de7bcd4570
--- /dev/null
+++ b/externals/figlet/tests/res015.txt
@@ -0,0 +1,156 @@
+ __ _ _ _ __
+ \ \ | | __ | |__ ___ ___ (_) / /
+ \ \ | |/ / | '_ \ / __| / _ \ | | / /
+ / / | < | | | | \__ \ | (_) | | | \ \
+ /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\
+ |__/
+ _ __ _ ____ _ _ _
+ _ _ | | / _| _ __ (_) / __ \ | | __ | |__ ___ ___ (_)
+ | | | | | | | |_ | '_ \ | | / / _` | | |/ / | '_ \ / __| / _ \ | |
+ | |_| | | | | _| | | | | | | | | (_| | | < | | | | \__ \ | (_) | | |
+ \__,_| |_| |_| |_| |_| |_| \ \__,_| |_|\_\ |_| |_| |___/ \___/ _/ |
+ \____/ |__/
+ _ __ _ __
+ _ __ __ _ ___ | | / / ___ | |_ ___ / / _ __ __
+ | '__| / _` | / _ \ | | / / / __| | __| / _ \ / / (_) \ \/ /
+ | | | (_| | | (_) | | | / / | (__ | |_ | __/ / / _ > <
+ |_| \__, | \___/ |_| /_/ \___| \__| \___| /_/ (_) /_/\_\
+ |___/
+ _ __ _ _ _
+ | |__ ___ \ \ __| | ___ | |_ __ _ | |_ ___
+ | '_ \ / __| \ \ / _` | / _ \ | __| / _` | | __| / _ \
+ | | | | \__ \ / / | (_| | _ | __/ | |_ | (_| | | |_ | (_) |
+ |_| |_| |___/ /_/ \__,_| (_) \___| \__| \__,_| \__| \___/
+
+
+ __/\__ _ __
+ \ / | '_ \ _____
+ /_ _\ | | | | |_____|
+ \/ |_| |_|
+
+ __ _ _ _ __
+ \ \ | | __ | |__ ___ ___ (_) / /
+ \ \ | |/ / | '_ \ / __| / _ \ | | / /
+ / / | < | | | | \__ \ | (_) | | | \ \
+ /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\
+ |__/
+ _ _ _
+ ___ _ __ (_) | | _ ___ | |__ ___ __ _ _ __ __ _
+ / _ \ | '_ \ | | | | (_) / _ \ | '_ \ / __| / _` | | '_ \ / _` |
+ | __/ | | | | | | | | _ | __/ | | | | | (__ | (_| | | |_) | | (_| |
+ \___| |_| |_| |_| |_| (_) \___| |_| |_| \___| \__,_| | .__/ \__,_|
+ |_|
+ _ _ _ _
+ __ __ __ _ | |_ _ __ _ _ ___ _ | || | / |
+ \ \/ / / _` | | __| | '_ \ | | | | / __| (_) | || |_ | |
+ > < | (_| | | |_ | | | | | |_| | \__ \ _ |__ _| | |
+ /_/\_\ \__,_| \__| |_| |_| \__, | |___/ (_) |_| |_|
+ |___/
+
+ _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___
+ | '__| / _` | / _ \ | '_ \ | '__| / _ \ | '__| | '__| / _ \
+ | | | (_| | | __/ | | | | | | | (_) | | | | | | __/
+ |_| \__,_| \___| |_| |_| |_| \___/ |_| |_| \___|
+
+ _ _
+ __| | ___ | |_ ___ ___ _ __ __ __ ___ _ __ _ _
+ / _` | / _ \ | __| / __| / _ \ | '_ \ \ \/ / / _ \ | '_ \ | | | |
+ | (_| | | __/ | |_ | (__ | __/ | |_) | > < | __/ | | | | | |_| |
+ \__,_| \___| \__| \___| \___| | .__/ /_/\_\ \___| |_| |_| \__,_|
+ |_|
+ _ __ _ _ _
+ ( ) \ \ ( ) _ __ ___ | | __ ___ | |_
+ |/ | | \| | '_ \ / _ \ | |/ / / _ \ | __|
+ > > | | | | | __/ | < | (_) | | |_
+ | | |_| |_| \___| |_|\_\ \___/ \__|
+ /_/
+ __ _ _ _ __
+ \ \ | | __ | |__ ___ ___ (_) / /
+ \ \ | |/ / | '_ \ / __| / _ \ | | / /
+ / / | < | | | | \__ \ | (_) | | | \ \
+ /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\
+ |__/
+ _ _ _
+ ___ _ __ (_) | | _ ___ | |__ ___ __ _ _ __ __ _
+ / _ \ | '_ \ | | | | (_) / _ \ | '_ \ / __| / _` | | '_ \ / _` |
+ | __/ | | | | | | | | _ | __/ | | | | | (__ | (_| | | |_) | | (_| |
+ \___| |_| |_| |_| |_| (_) \___| |_| |_| \___| \__,_| | .__/ \__,_|
+ |_|
+ _ __ _ _ _ _
+ ( ) \ \ ( ) _ | || | / |
+ |/ | | \| (_) | || |_ | |
+ > > _ |__ _| | |
+ | | (_) |_| |_|
+ /_/
+ _ _ __ _ _ _ __
+ ___ | |__ | |_ \ \ | | __ | |__ ___ ___ (_) / /
+ / _ \ | '_ \ | __| \ \ | |/ / | '_ \ / __| / _ \ | | / /
+ | __/ | | | | | |_ / / | < | | | | \__ \ | (_) | | | \ \
+ \___| |_| |_| \__| /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\
+ |__/
+ _ _
+ | |_ ___ | | _ __
+ | __| / _ \ | | | '_ \
+ | |_ | (_) | | | | |_) |
+ \__| \___/ |_| | .__/
+ |_|
+ _ _ _ _
+ ___ _ __ ___ | | __ ___ (_) | |__ | |_
+ / __| | '_ \ / _ \ | |/ / / __| | | | '_ \ | __|
+ \__ \ | | | | | __/ | < | (__ | | | | | | | |_
+ |___/ |_| |_| \___| |_|\_\ \___| |_| |_| |_| \__|
+
+ __ _ _ _ __ __ __
+ \ \ __| | | | ___ (_) / _| / _| _ _ ___ __ _ / /
+ \ \ / _` | | | / _ \ | | | |_ | |_ | | | | / __| / _` | / /
+ / / | (_| | | | | __/ | | | _| | _| | |_| | \__ \ | (_| | \ \
+ /_/ \__,_| |_| \___| |_| |_| |_| \__,_| |___/ \__,_| \_\
+
+ _ _ _ _
+ | |_ ( ) _ __ ___ _ __ __ _ ___ ___ ___ | |__ | |_
+ | __| |/ | '_ \ / _ \ | '__| / _` | / _ \ / __| / _ \ | '_ \ | __|
+ | |_ | | | | | __/ | | | (_| | | __/ \__ \ | (_) | | | | | | |_
+ \__| |_| |_| \___| |_| \__,_| \___| |___/ \___/ |_| |_| \__|
+
+ _ _ _ _ _
+ ___ | |_ _ __ (_) _ __ ___ ___ | | | | ___ | |__ ___
+ / __| | __| | '_ \ | | | '__| / __| / __| | | | | / _ \ | '_ \ / __|
+ \__ \ | |_ | |_) | | | | | | (__ \__ \ | | | | | __/ | | | | \__ \
+ |___/ \__| | .__/ |_| |_| \___| |___/ |_| |_| \___| |_| |_| |___/
+ |_|
+ _ _ _ __ _ _ __
+ ___ (_) | |__ | |_ \ \ | |__ ___ (_) _ __ ___ / /
+ / __| | | | '_ \ | __| \ \ | '_ \ / __| | | | '__| / _ \ / /
+ \__ \ | | | | | | | |_ / / | | | | | (__ | | | | | __/ \ \
+ |___/ |_| |_| |_| \__| /_/ |_| |_| \___| |_| |_| \___| \_\
+
+ _ _
+ | |_ ( ) _ __ ___ __ _ __ __
+ | __| |/ | '_ \ / __| / _` | \ \ /\ / /
+ | |_ | | | | \__ \ | (_| | \ V V /
+ \__| |_| |_| |___/ \__,_| \_/\_/
+
+ _ _ _
+ _ __ ___ | | __ ___ (_) | |__ ___
+ | '_ \ / _ \ | |/ / / __| | | | '_ \ / __|
+ _ | | | | | __/ | < | (__ | | | | | | | (__
+ (_) |_| |_| \___| |_|\_\ \___| |_| |_| |_| \___|
+
+ _
+ _ __ (_)
+ | '_ \ | | _____ _____
+ | | | | | | |_____| |_____|
+ |_| |_| |_|
+
+ _ _ _ _ _ _
+ ___ __| | _ __ __ _ (_) | |__ ___ __| | _| || |_
+ / _ \ / _` | _____ | '_ \ / _` | | | | '_ \ / _ \ / _` | |_ .. _|
+ | __/ | (_| | |_____| | | | | | (_| | | | | |_) | | __/ | (_| | |_ _|
+ \___| \__,_| |_| |_| \__,_| |_| |_.__/ \___| \__,_| |_||_|
+
+ _
+ | | ___ __ __
+ | | / _ \ \ \ / /
+ | | | __/ \ V /
+ |_| \___| \_/
+
diff --git a/externals/figlet/tests/res016.txt b/externals/figlet/tests/res016.txt
new file mode 100644
index 0000000000..cf70546d5f
--- /dev/null
+++ b/externals/figlet/tests/res016.txt
@@ -0,0 +1,152 @@
+ ___ _ _ __
+ / (_) | | | | \ \
+ / / _ ___ ___| |__ | | __\ \
+ < < | |/ _ \/ __| '_ \| |/ / > >
+ \ \| | (_) \__ | | | | < / /
+ \_| |\___/|___|_| |_|_|\_/_/
+ _/ |
+ |__/
+ _ _ _ _ __ _ __ _
+ (_) | | | | ____ (_) / _| | _ / / | |
+ _ ___ ___| |__ | | __/ __ \ _ _ __ | |_| |_ ___ _(_) / ___| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| _| | | | \ \/ / / / _ | __/ __|
+ | | (_) \__ | | | | | | (_| | | | | | | | | |_| |> < _ / | __| || (__
+ | |\___/|___|_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_/_/ \___|\__\___|
+ _/ | \____/
+ |__/
+ ___ _ _ ___ _
+ / | | | | | | | \ \ | |
+ / /| | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| |\ \ ___| |__
+ / / | |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` | > / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ /\__ | | | |
+ /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_\__,_/_/ |___|_| |_|
+ __/ |
+ |___/
+ _
+ /\| |/\
+ ______ _ __ \ ` ' /
+ |______| '_ \|_ _|
+ | | | |/ , . \
+ |_| |_|\/|_|\/
+
+
+ ___ _ _ __ _
+ / (_) | | | | \ \ | | _
+ / / _ ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___(_)
+ < < | |/ _ \/ __| '_ \| |/ / > >/ _` | '_ \ / _` |/ __| '_ \ / _ \
+ \ \| | (_) \__ | | | | < / /| (_| | |_) | (_| | (__| | | | __/_
+ \_| |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ _/ | | |
+ |__/ |_|
+ _ _ __ _ _ _
+ | (_) /_ | || | _ | |
+ | |_ _ __ ___ | | || |(_)___ _ _ _ __ | |_ __ ___ __
+ | | | '_ \ / _ \| |__ _|/ __| | | | '_ \| __/ _` \ \/ /
+ | | | | | | __/| | | | _\__ | |_| | | | | || (_| |> <
+ |_|_|_| |_|\___||_| |_|(_|___/\__, |_| |_|\__\__,_/_/\_\
+ __/ |
+ |___/
+
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ | '__| '__/ _ \| '__| '_ \ / _ \/ _` | '__|
+ | __| | | | | (_) | | | | | | __| (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+
+ _ _ _ _
+ | | | | | | |
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | |_ ___ | | _____ _ __
+ | | | | '_ \ / _ \ \/ | '_ \ / _ \/ __| __/ _ \/ _` | __/ _ \| |/ / _ | '_ \
+ | |_| | | | | __/> <| |_) | __| (__| || __| (_| | || (_) | | __| | | |
+ \__,_|_| |_|\___/_/\_| .__/ \___|\___|\__\___|\__,_|\__\___/|_|\_\___|_| |_|
+ | |
+ |_|
+ ___ _
+ ( \ \( )
+ \|| |/
+ \ \
+ / /
+ | |
+ /_/
+
+ ___ _ _ __ _
+ / (_) | | | | \ \ | | _
+ / / _ ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___(_)
+ < < | |/ _ \/ __| '_ \| |/ / > >/ _` | '_ \ / _` |/ __| '_ \ / _ \
+ \ \| | (_) \__ | | | | < / /| (_| | |_) | (_| | (__| | | | __/_
+ \_| |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ _/ | | |
+ |__/ |_|
+ _ _ __ _ _ ___ _
+ | (_) /_ | || | _( \ \( )
+ | |_ _ __ ___ | | || |(_)\|| |/
+ | | | '_ \ / _ \| |__ _| \ \
+ | | | | | | __/| | | | _ / /
+ |_|_|_| |_|\___||_| |_|(_) | |
+ /_/
+
+ ___ _ _ __ _ _ _ _
+ / (_) | | | | \ \ | | | | | | | |
+ / / _ ___ ___| |__ | | __\ \| |_| |__ ___ _ __ | | ___ | |_
+ < < | |/ _ \/ __| '_ \| |/ / > | __| '_ \ / _ | '_ \| |/ _ \| __|
+ \ \| | (_) \__ | | | | < / /| |_| | | | __| |_) | | (_) | |_
+ \_| |\___/|___|_| |_|_|\_/_/ \__|_| |_|\___| .__/|_|\___/ \__|
+ _/ | | |
+ |__/ |_|
+ _ _ _ _
+ | | | | (_) | |
+ | |_| |__ _ ___| | _____ _ __ ___
+ | __| '_ \| |/ __| |/ / _ | '_ \/ __|
+ | |_| | | | | (__| | __| | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+
+ __ __ __ _ _ ___ _ _
+ / / / _|/ _(_) | | | \ \ | | | |
+ / / __ _ ___ _ _| |_| |_ _ ___| | __| |\ \| |_| |__ ___ ___ ___
+ < < / _` / __| | | | _| _| |/ _ | |/ _` | > | __| '_ \ / _ \/ __|/ _ \
+ \ | (_| \__ | |_| | | | | | | __| | (_| |/ /| |_| | | | (_) \__ | __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+
+ _ _ _ _ _ _ _
+ ( | | | | | | | (_) | |
+ __ _ _ __ ___ _ __|/| |_ ___| |__ ___| | |___ ___ _ __ _ _ __ | |_ ___
+ / _` | '__/ _ | '_ \ | __/ __| '_ \ / _ | | / __|/ __| '__| | '_ \| __/ __|
+ | (_| | | | __| | | || |_\__ | | | | __| | \__ | (__| | | | |_) | |_\__ \
+ \__,_|_| \___|_| |_| \__|___|_| |_|\___|_|_|___/\___|_| |_| .__/ \__|___/
+ | |
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / / (_) | | \ \ | | | | (_) ( | |
+ / / ___ _ __ _ ___| |__ \ \| |_| |__ _ _____ ____ _ ___ _ __|/| |_
+ < < / _ | '__| |/ __| '_ \ > | __| '_ \| / __\ \ /\ / / _` / __| '_ \ | __|
+ \ | __| | | | (__| | | |/ /| |_| | | | \__ \\ V V | (_| \__ | | | || |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___|_| |_| \__|
+
+
+ _ _ _
+ | | (_) | |
+ ___| |__ _ ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ | '_ \
+ | (__| | | | | (__| | __| | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+
+ _
+ (_)
+ ______ ______ _ _ __
+ |______|______| | '_ \
+ | | | | |
+ |_|_| |_|
+
+
+ _ _ _ _ _ _ _
+ _| || |_ | | | | (_) | | | |
+ |_ __ _| __| | ___| |__ _ __ _ _ __ ______ __| | _____ _____| |
+ _| || |_ / _` |/ _ | '_ \| |/ _` | '_ |______/ _` |/ _ \ \ / / _ | |
+ |_ __ _| (_| | __| |_) | | (_| | | | | | (_| | __/\ V | __| |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
+
diff --git a/externals/figlet/tests/res017.txt b/externals/figlet/tests/res017.txt
new file mode 100644
index 0000000000..3296f8c60b
--- /dev/null
+++ b/externals/figlet/tests/res017.txt
@@ -0,0 +1,36 @@
+ ┛┏━┃┏━┛┃ ┃┃ ┃
+ ┃┃ ┃━━┃┏━┃┏┛
+ <━┛━━┛━━┛┛ ┛┛ ┛>
+ ┛┏━┃┏━┛┃ ┃┃ ┃┏━┃┛┏━ ┏━┛┃ ┃ ┃┃ ┃ ┛┏━┛━┏┛┏━┛ ┛┃ ┏━┃┏━┛┏━┃┏━┃━┏┛┏━┃━┏┛┏━┛
+ ┃┃ ┃━━┃┏━┃┏┛ ┃┛┛┃┃ ┃┏━┛┃ ┃ ┃ ┛ ┛ ┛ ┏━┛ ┃ ┃ ┛ ┃ ┃ ┃┃ ┃┏┏┛┃ ┃ ┃ ┏━┃ ┃ ┏━┛
+ ━┛━━┛━━┛┛ ┛┛ ┛━━┛┛┛ ┛┛ ━━┛━━┛┛ ┛┛┛ ━━┛ ┛ ━━┛┛ ━━┛━━┛━━┛┛ ┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛
+ ┏━ ┏━┛┃ ┃ ┏━ ┛ ┛
+ ┃ ┃ ━━┃┏━┃ ━┛┃ ┃ ━┏┛
+ ━━> ━━┛┛ ┛ ┛ ┛ ┛ ┛
+ ┛┏━┃┏━┛┃ ┃┃ ┃ ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛ ┃ ┛┏━ ┏━┛ ━┃┃ ┃ ┏━┛┃ ┃┏━━┏┛┏━┃┃ ┃
+ ┃┃ ┃━━┃┏━┃┏┛ ┏━┃┏━┛┏━┃┃ ┏━┃┏━┛┛ ┃ ┃┃ ┃┏━┛ ┃━━┃┛ ━━┃━┏┛┃ ┃┃ ┏━┃ ┛
+ <━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛ ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━━┛ ┛ ┛ ┛┛ ┛ ┛┛ ┛
+ ┏━┛┏━┃┏━┃┏━┃┏━┃ ┏━ ┏━┛┏━┃┏━┃ ┃ ┃┏━ ┏━┛┃ ┃┏━┃┏━┛┏━┛━┏┛┏━┛┏━ ━┏┛┏━┃┃ ┃┏━┛┏━
+ ┏━┛┏┏┛┏┏┛┃ ┃┏┏┛ ┃ ┃┏━┛┏━┃┏┏┛ ┃ ┃┃ ┃┏━┛ ┛ ┏━┛┏━┛┃ ┃ ┏━┛┃ ┃ ┃ ┃ ┃┏┛ ┏━┛┃ ┃
+ ━━┛┛ ┛┛ ┛━━┛┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛ ━━┛┛ ┛━━┛┛ ┛┛ ━━┛━━┛ ┛ ━━┛━━ ┛ ━━┛┛ ┛━━┛┛ ┛
+ ┛━┃┛
+ ┛┏┛
+ ━┛
+ ┛┏━┃┏━┛┃ ┃┃ ┃ ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛ ┃ ┛┏━ ┏━┛ ━┃┃ ┃ ┛━┃┛
+ ┃┃ ┃━━┃┏━┃┏┛ ┏━┃┏━┛┏━┃┃ ┏━┃┏━┛┛ ┃ ┃┃ ┃┏━┛ ┃━━┃┛ ┛┏┛
+ <━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛ ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━┛
+ ┛┏━┃┏━┛┃ ┃┃ ┃ ━┏┛┃ ┃┏━┛ ┏━┃┃ ┏━┃━┏┛ ━┏┛┃ ┃┛┏━┛┃ ┃┏━┛┏━ ┏━┛
+ ┃┃ ┃━━┃┏━┃┏┛ ┃ ┏━┃┏━┛ ┏━┛┃ ┃ ┃ ┃ ┃ ┏━┃┃┃ ┏┛ ┏━┛┃ ┃━━┃
+ <━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛ ┛━━┛ ┛ ━━┛━━┛ ┛ ┛ ┛ ┛┛━━┛┛ ┛━━┛┛ ┛━━┛
+ ┏━┃┏━┛┃ ┃┏━┛┏━┛┛┏━┛┃ ┏━ ━┏┛┃ ┃┏━┃┏━┛┏━┛ ┏━┃┏━┃┏━┛┏━┛━┏┛ ┏━┛┃ ┃┏━┛┃ ┃
+ ┏━┃━━┃┃ ┃┏━┛┏━┛┃┏━┛┃ ┃ ┃ ┃ ┏━┃┃ ┃━━┃┏━┛ ┏━┃┏┏┛┏━┛┃ ┃ ┃ ━━┃┏━┃┏━┛┃ ┃
+ <┛ ┛━━┛━━┛┛ ┛ ┛━━┛━━┛━━> ┛ ┛ ┛━━┛━━┛━━┛ ┛ ┛┛ ┛━━┛┛ ┛ ┛ ━━┛┛ ┛━━┛━━┛━━┛
+ ┏━┛┏━┛┏━┃┛┏━┃━┏┛┏━┛
+ ━━┃┃ ┏┏┛┃┏━┛ ┃ ━━┃
+ ━━┛━━┛┛ ┛┛┛ ┛ ━━┛
+ ┏━┛┏━┃┛┏━┛┃ ┃ ━┏┛┃ ┃┛┏━┛ ┃┃┃┏━┃┏━┛┏━┛━┏┛ ┏━┛┃ ┃┛┏━┛┃ ┃┏━┛┏━
+ ┏━┛┏┏┛┃┃ ┏━┃ ┃ ┏━┃┃━━┃ ┃┃┃┏━┃━━┃┃ ┃ ┃ ┃ ┏━┃┃┃ ┏┛ ┏━┛┃ ┃
+ <━━┛┛ ┛┛━━┛┛ ┛> ┛ ┛ ┛┛━━┛ ━━┛┛ ┛━━┛┛ ┛ ┛ ━━┛┛ ┛┛━━┛┛ ┛━━┛┛ ┛┛
+ ┛┏━ ┏━ ┏━┛┏━ ┛┏━┃┏━ ┏━ ┏━┛┃ ┃┏━┛┃
+ ━┛━┛ ┃┃ ┃ ┃ ┃┏━┛┏━┃┃┏━┃┃ ┃━┛┃ ┃┏━┛┃ ┃┏━┛┃
+ ┛┛ ┛ #━━ ━━┛━━ ┛┛ ┛┛ ┛ ━━ ━━┛ ┛ ━━┛━━┛
diff --git a/externals/figlet/tests/res018.txt b/externals/figlet/tests/res018.txt
new file mode 100644
index 0000000000..7551e081ed
--- /dev/null
+++ b/externals/figlet/tests/res018.txt
@@ -0,0 +1,27 @@
+ ┏━┏━┃ ┃ ┃ ┏━┏━┃ ┃ ┏━┃┛┏━┏━┃ ┃ ┃ ┃ ┏━━┏┏━┛ ┃ ┏━┏━┏━┏━━┏┏━━┏┏━┛ ┏━ ┏━┃ ┃┏━
+ ┃ ━━┏━┏┛ ┃ ━━┏━┏┛┃┛┛┃┃ ┏━┃ ┃ ┃┛ ┛ ┛┏━┛┃┃ ┛┃ ┃ ┃ ┏┏┃ ┃┃┏━┃┃┏━┛ ┃ ┃━━┏━━┃ ┃
+ <━━━━━┛ ┛ ┛>━━━━━┛ ┛ ━━┛┛┛ ┛ ━━━━┛ ┛┛┛ ━━┛┛━━┛ ━━━━━━┛ ━━┛┛┛ ┛┛━━┛┛━━>━━┛ ┛┛ ┛
+ ┛ ┛
+ ━┏┛
+ ┛ ┛
+ ┏━┏━┃ ┃ ┃ ┏━┏━┏━┏━┃ ┏━┛ ┃ ┛┏━┏━━┃ ┃ ┏━┃ ┏━┏┏━┃ ┏━┏━┏━┏━┏━┏━┏━┏━┏━┃
+ ┃ ━━┏━┏┛ ┏━┏━┏━┃ ┏━┏━┛┛┃ ┃┃ ┏━┛━━┃┛━━━┏┃ ┃┏━┃┛┏━┏┏┏┏┃ ┏┏┃ ┏━┏━┏┏┛
+ <━━━━━┛ ┛ ┛>┛ ┛ ┛ ━━┛ ━━┛┛━━┛┛┛ ━━━━┛┛┛━━┛┛┛ ┛┛ ┛ ━━┛ ┛ ━━┛ ┛ ━━┛ ┛ ┛
+ ┃ ┏━┏━┃ ┏━┏━┏━━┏┏━┏━━┏┏━┃ ┏━┏━━┃┛
+ ┃ ┃ ┏━┛┛┏━┏━┃ ┃┏━┃ ┃┃┃ ┏┛┏━┃ ┃┏┛
+ ━━┛ ━━┛ ┛ ━━━━┛┛━━━━ ┛━━┛ ━━┛ ━┛
+ ┏━┏━┃ ┃ ┃ ┏━┏━┏━┏━┃ ┏━┛ ┃ ┛┏━┏━━┃ ┃ ━┃┛
+ ┃ ━━┏━┏┛ ┏━┏━┏━┃ ┏━┏━┛┛┃ ┃┃ ┏━┛━━┃┛ ┏┛
+ <━━━━━┛ ┛ ┛>┛ ┛ ┛ ━━┛ ━━┛┛━━┛┛┛ ━━━━┛┛┛━┛
+ ┏━┏━┃ ┃ ┃ ━┏┃ ┏━┏━┃ ┏━━┏━┏┃ ┃┛┏━┃ ┏━┏━┏━┛
+ ┃ ━━┏━┏┛ ┃┏━┏━┏━┃ ┃ ┃┃ ┃┏━┃┃┃ ┏┛┏━┃ ━━┃
+ <━━━━━┛ ┛ ┛> ┛┛ ━━┛ ━━━━┛┛ ┛┛ ┛┛━━┛ ━━┛ ━━┛
+ ┏━┏━┃ ┏━┏━┛┛┏━┃ ┏━ ━┏┃ ┏━┏━┏━┏━┏━┏━┏━┛━┏┏━┃ ┏━┃ ┃ ┏━┏━┏━┃┛┏━━┏┏━┛
+ ┏━━━┃ ┏━┏━┛┃┏━┃ ┃ ┃ ┃┏━┃ ━━┏━┏━┏┏┏━┃ ┃ ┃━━┏━┏━┃ ┃ ━━┃ ┏┏┛┃┏━┛┃━━┃
+ <┛ ━━━━┛ ┛ ┛━━━━━━> ┛┛ ━━━━━━┛ ┛ ━━┛ ┛ ┛━━┛ ━━━━━━━━━━┛ ┛┛┛ ┛━━┛
+ ┏━┏━┃┛┏━┃ ┃ ━┏┃ ┃┛┏━┃┃┏━┏━┏━┛━┏┏━┃ ┃┛┏━┃ ┏━┏━
+ ┏━┏┏┛┃┃ ┏━┃ ┃┏━┃┃━━┃┃┏━━━┃ ┃ ┃┃ ┏━┃┃┃ ┏┛┏━┃ ┃
+ <━━┛ ┛┛━━┛ ┛> ┛┛ ┛┛━━━━┛ ━━┛ ┛ ┛━━┛ ┛┛━━┛ ━━┛ ┛┛
+ ┛┏━ ┏━┏━┏━ ┛┏━┏━ ┏━┏━┃ ┏━┃
+ ━━┛┃┃ ┃ ┃ ┏━┏━┃┃┏━┃ ━┃ ┏━┃ ┏━┃
+ ┛┛ ┛#━━━━━━ ┛┛ ┛ ┛━━━━┛┛━━━━┛
diff --git a/externals/figlet/tests/res019.txt b/externals/figlet/tests/res019.txt
new file mode 100644
index 0000000000..b1c4ee3688
--- /dev/null
+++ b/externals/figlet/tests/res019.txt
@@ -0,0 +1,36 @@
+ ┃ ┃┃ ┃┏━┛┏━┃ ┛
+ ┏┛ ┏━┃━━┃┃ ┃ ┃
+>┛ ┛┛ ┛━━┛━━┛━┛<
+ ┏━┛━┏┛┏━┃━┏┛┏━┃┏━┃┏━┛┏━┃┃ ┛┏━┛━┏┛┏━┛ ┛ ┃ ┃┃ ┃┃ ┏━┛┏━ ┛┏━┃┃ ┃┃ ┃┏━┛┏━┃ ┛
+ ┏━┛ ┃ ┏━┃ ┃ ┃ ┃┏┏┛┃ ┃┃ ┃┃ ┛ ┃ ┃ ┏━┛ ┛ ┛ ┛ ┃ ┃┃ ┏━┛┃ ┃┃┃┛┛┏┛ ┏━┃━━┃┃ ┃ ┃
+┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛ ┛━━┛━━┛━━┛┛ ━━┛ ┛ ━━┛┛ ┛┛ ┛━━┛━━┛┛ ┛ ┛┛━━┛┛ ┛┛ ┛━━┛━━┛━┛
+┛ ┛ ┏━ ┃ ┃┏━┛ ┏━
+━┏┛ ┃ ┃━┛ ┏━┃━━┃ ┃ ┃
+┛ ┛ ┛ ┛ ┛ ┛━━┛ >━━
+┃ ┃┏━┃━┏┛┏━ ┃ ┃┏━┛ ┃ ┃━┃ ┏━┛┏━ ┛┃ ┏━┛┃ ┃┏━┛┏━┃┏━┃┏━┃ ┃ ┃┃ ┃┏━┛┏━┃ ┛
+ ┛ ┏━┃ ┃ ┃ ┃━┏┛━━┃ ┛━━┃ ┃ ┏━┛┃ ┃┃┃ ┛┏━┛┏━┃┃ ┏━┃┏━┛┏━┃ ┏┛ ┏━┃━━┃┃ ┃ ┃
+┛ ┛┛ ┛ ┛ ┛ ┛ ┛ ━━┛ ┛ ┛━━┛ ━━┛┛ ┛┛━━┛ ┛━━┛┛ ┛━━┛┛ ┛┛ ┛ ┛ >┛ ┛┛ ┛━━┛━━┛━┛<
+┏━ ┏━┛┃ ┃┏━┃━┏┛ ┏━ ┏━┛━┏┛┏━┛┏━┛┏━┃┃ ┃┏━┛┏━ ┃ ┃ ┏━┃┏━┃┏━┛┏━ ┏━┃┏━┃┏━┃┏━┃┏━┛
+┃ ┃┏━┛┏┛ ┃ ┃ ┃ ┃ ┃┏━┛ ┃ ┃ ┏━┛┏━┛ ┛ ┏━┛┃ ┃┃ ┃ ┏┏┛┏━┃┏━┛┃ ┃ ┏┏┛┃ ┃┏┏┛┏┏┛┏━┛
+┛ ┛━━┛┛ ┛━━┛ ┛ ━━ ━━┛ ┛ ━━┛━━┛┛ ┛ ┛━━┛┛ ┛━━┛ ┛ ┛┛ ┛━━┛┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛━━┛
+┛━┃ ┛
+ ┏┛ ┛
+ ━┛
+┛━┃ ┛ ┃ ┃━┃ ┏━┛┏━ ┛┃ ┏━┛┃ ┃┏━┛┏━┃┏━┃┏━┃ ┃ ┃┃ ┃┏━┛┏━┃ ┛
+ ┏┛ ┛ ┛━━┃ ┃ ┏━┛┃ ┃┃┃ ┛┏━┛┏━┃┃ ┏━┃┏━┛┏━┃ ┏┛ ┏━┃━━┃┃ ┃ ┃
+ ━┛ ┛ ┛━━┛ ━━┛┛ ┛┛━━┛ ┛━━┛┛ ┛━━┛┛ ┛┛ ┛ ┛ >┛ ┛┛ ┛━━┛━━┛━┛<
+┏━┛┏━ ┏━┛┃ ┃┏━┛┛┃ ┃━┏┛ ━┏┛┏━┃┃ ┏━┃ ┏━┛┃ ┃━┏┛ ┃ ┃┃ ┃┏━┛┏━┃ ┛
+━━┃┃ ┃┏━┛┏┛ ┃ ┃┏━┃ ┃ ┃ ┃ ┃┃ ┏━┛ ┏━┛┏━┃ ┃ ┏┛ ┏━┃━━┃┃ ┃ ┃
+━━┛┛ ┛━━┛┛ ┛━━┛┛┛ ┛ ┛ ┛ ━━┛━━┛┛ ━━┛┛ ┛ ┛ >┛ ┛┛ ┛━━┛━━┛━┛<
+┃ ┃ ┏━┛┃ ┃┏━┛ ━┏┛┛┏━ ┏━┛┏━┃┏━┃ ┏━┛┏━┛┏━┃┃ ┃━┏┛ ┏━ ┃ ┏━┛┛┏━┛┏━┛┃ ┃┏━┛┏━┃
+┃ ┃ ┏━┛┏━┃━━┃ ┃ ┃ ┃┏━┛┏┏┛┏━┃ ┏━┛━━┃┃ ┃┏━┃ ┃ ┃ ┃┃ ┏━┛┃┏━┛┏━┛┃ ┃━━┃┏━┃
+━━┛━━┛━━┛┛ ┛━━┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛ ━━┛━━┛━━┛┛ ┛ ┛ >━━ ━━┛━━┛┛┛ ┛ ━━┛━━┛┛ ┛<
+┏━┛━┏┛┏━┃┛┏━┃┏━┛┏━┛
+━━┃ ┃ ┏━┛┃┏┏┛┃ ━━┃
+━━┛ ┛ ┛ ┛┛ ┛━━┛━━┛
+ ┏━ ┏━┛┃ ┃┏━┛┛┃ ┃┏━┛ ━┏┛┛┏━ ┏━┛┏━┃┃┃┃ ┏━┛┛┃ ┃━┏┛ ┃ ┃┏━┛┛┏━┃┏━┛
+ ┃ ┃┏━┛┏┛ ┃ ┃┏━┃┃ ┃ ┃ ┃━━┃┏━┃┃┃┃ ━━┃┃┏━┃ ┃ ┏━┃┃ ┃┏┏┛┏━┛
+┛┛ ┛━━┛┛ ┛━━┛┛┛ ┛━━┛ ┛ ┛ ┛━━┛┛ ┛━━┛ ━━┛┛┛ ┛ ┛ >┛ ┛━━┛┛┛ ┛━━┛<
+┃ ┏━┛┃ ┃┏━┛┏━ ┏━ ┏━┃┛┏━ ┏━┛┏━ ┏━ ┛
+┃ ┏━┛┃ ┃┏━┛┃ ┃━┛┃ ┃┏━┃┃┏━┃┏━┛┃ ┃ ┃ ┃┃ ━┛━┛
+━━┛━━┛ ┛ ━━┛━━ ┛ ┛┛ ┛┛━━ ━━┛━━ # ┛ ┛┛
diff --git a/externals/figlet/tests/res020.txt b/externals/figlet/tests/res020.txt
new file mode 100644
index 0000000000..4de016c0e1
--- /dev/null
+++ b/externals/figlet/tests/res020.txt
@@ -0,0 +1,140 @@
+ _ _
+ /o | | | | \
+/ __ , | | | | \
+\ | / \_/ \_|/ \ |/_) /
+ \|/\__/ \/ | |_/| \_//
+ /|
+ \|
+ _ _ _ _
+ o | | | | ____ o | | | | o /
+ __ , | | | | / __,\ _ _ | | | | /_ _|_ __
+ | / \_/ \_|/ \ |/_) | / | || / |/ | |/ |/ | | /\/ /|/ | /
+ |/\__/ \/ | |_/| \_/| \_/|/ |_/ | |_/|__/|__/ \_/|_/ /\_/o/ |__/|_/\___/
+/| \____/ |\
+\| |/
+ _ _
+ /| | | \ | |
+ / | | __ __, ,_ __ _|_ __, _|_ _ __| \ , | |
+ / |/ / \_/ | / | / \_| / | | |/ / | / / \_|/ \
+/ |__/\__/ \_/|/ |_/\__/ |_/\_/|_/|_/|__/o\_/|_// \/ | |_/
+ /|
+ \|
+
+
+ _ _ \|/
+-----/ |/ | --*--
+ | |_/ /|\
+
+
+ _ _ _
+ /o | | | | \ | | o
+/ __ , | | | | \ __, _ __, __ | | _
+\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/
+ \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o
+ /| /|
+ \| \|
+ _ ,
+| | o /|| | o
+| | _ _ _ ||__|_ , _ _ _|_ __,
+|/ | / |/ | |/ | | / \_| | / |/ | | / | /\/
+|__/|_/ | |_/|__/ | | o \/ \_/|/ | |_/|_/\_/|_/ /\_/
+ /|
+ \|
+
+
+ _ ,_ ,_ __ ,_ _ _ _ __, ,_
+|/ / | / | / \_/ | / |/ | |/ / | / |
+|__/ |_/ |_/\__/ |_/ | |_/|__/\_/|_/ |_/
+
+
+ _
+ | | |
+ _ _ _ _ _ __ _|_ _ __| _|_ __ | | _ _ _
+| | / |/ | |/ /\/ |/ \_|/ / | |/ / | | / \_|/_) |/ / |/ |
+ \_/|_/ | |_/|__/ /\_/|__/ |__/\___/|_/|__/\_/|_/ |_/\__/ | \_/|__/ | |_/
+ /|
+ \|
+o o
+\\ /
+ |
+ >
+ |
+ /
+
+ _ _ _
+ /o | | | | \ | | o
+/ __ , | | | | \ __, _ __, __ | | _
+\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/
+ \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o
+ /| /|
+ \| \|
+ _ , o o
+| | o /|| | o \\ /
+| | _ _ _ ||__|_ |
+|/ | / |/ | |/ | | >
+|__/|_/ | |_/|__/ | | o |
+ /
+
+ _ _ _ _
+ /o | | | | \ | | | |
+/ __ , | | | | \ _|_ | | _ _ | | __ _|_
+\ | / \_/ \_|/ \ |/_) / | |/ \ |/ |/ \_|/ / \_|
+ \|/\__/ \/ | |_/| \_// |_/| |_/|__/ |__/ |__/\__/ |_/
+ /| /|
+ \| \|
+ _ _
+ | | o | |
+_|_ | | __ | | _ _ _ ,
+ | |/ \ | / |/_) |/ / |/ | / \_
+ |_/| |_/|_/\___/| \_/|__/ | |_/ \/
+
+
+ _ _ _ _
+ / | | | | o | | | \ | |
+/ __, , | | | | _ | | __| \ _|_ | | __ , _
+\ / | / \_| | |/ |/ | |/ |/ / | / | |/ \ / \_/ \_|/
+ \\_/|_/ \/ \_/|_/|__/|__/|_/|__/|__/\_/|_// |_/| |_/\__/ \/ |__/
+ |\ |\
+ |/ |/
+ o _ _ _
+ / | | | | | |
+ __, ,_ _ _ _ _|_ , | | _ | | | |
+/ | / | |/ / |/ | | / \_|/ \ |/ |/ |/
+\_/|_/ |_/|__/ | |_/ |_/ \/ | |_/|__/|__/|__/
+
+
+
+ o
+ , __ ,_ _ _|_ ,
+/ \_/ / | | |/ \_| / \_
+ \/ \___/ |_/|_/|__/ |_/ \/
+ /|
+ \|
+ _ _
+ / o | | \ | | o
+/ _ ,_ __ | | \ _|_ | | ,
+\ |/ / | | / |/ \ / | |/ \ | / \_
+ \|__/ |_/|_/\___/| |_// |_/| |_/|_/ \/
+
+
+ o _ _
+ / | | o | |
+ __, , _ _ _|_ __ | | __ | | _ _ _
+| | |_/ | / \_/ |/ | | / |/ \ | / |/_) |/ / |/ |
+ \/ \/ \_/|_/ \/ | |_/ |_/ \___/| |_/|_/\___/| \_/|__/ | |_/o
+
+
+
+ o
+ _ _
+ ---------- | / |/ |
+ |_/ | |_/
+
+
+ _ _
+ | | | | | o | | |
+--+--+-- __| _ | | __, _ _ __| _ _ | |
+--+--+--/ | |/ |/ \_| / | / |/ |-----/ | |/ | |_|/ |/
+ | | \_/|_/|__/\_/ |_/\_/|_/ | |_/ \_/|_/|__/ \/ |__/|__/
+
+
diff --git a/externals/figlet/tests/res021.txt b/externals/figlet/tests/res021.txt
new file mode 100644
index 0000000000..b083225dbe
--- /dev/null
+++ b/externals/figlet/tests/res021.txt
@@ -0,0 +1,36 @@
+ __ _ _ _ __ _ _ _ ____ _ __ _ __ _ ___ _ _ ___ _ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ _ __ __/\__ / /(_) ___ ___| |__ | | __\ \
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __| / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ _____| '_ \ \ / / / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | | < / / | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | |_____| | | | /_ _\ \ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| |_| |_| \/ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/ |__/ \____/ |___/ |__/
+ _ _ _ _ _ _ _ _ _ _ _ ___ _
+ __ _ _ __ __ _ ___| |__ ___ _ | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ ( ) \ ( )
+ / _` | '_ \ / _` |/ __| '_ \ / _ (_) | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ / / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| | | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ \|| ||/
+| (_| | |_) | (_| | (__| | | | __/_ | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> < | __/ | | | | (_) | | | | | | __/ (_| | | | |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | > >
+ \__,_| .__/ \__,_|\___|_| |_|\___(_) |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| | |
+ |_| |___/ |_| /_/
+ __ _ _ _ __ _ _ _ _ _ _ ___ _ __ _ _ _ __ _ _ _ _ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ | (_)_ __ ___ / | || | _ ( ) \ ( ) / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_ | |_| |__ (_) ___| | _____ _ __ ___
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) | | | '_ \ / _ \ | | || |(_) \|| ||/ / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ | | | | | | __/ | |__ _| > > \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ | |_| | | | | (__| < __/ | | \__ \
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) |_|_|_| |_|\___| |_| |_|(_) | | \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| \__|_| |_|_|\___|_|\_\___|_| |_|___/
+ |__/ |_| /_/ |__/ |_|
+ __ __ __ _ _ ___ _ _ _ _ _ _ _ _ _ __ _ _ __ _ _ _ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | | ___ ___ _ __(_)_ __ | |_ ___ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | / __|/ __| '__| | '_ \| __/ __| / // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ | (_| | | | __/ | | | | |_ \__ \ | | | __/ | | \__ \ (__| | | | |_) | |_\__ \ \ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| |___/\___|_| |_| .__/ \__|___/ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+ |_|
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+| (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _ _ _ _ _ _ _ _
+ (_)_ __ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+ _____ _____ | | '_ \ |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+ |_____|_____| | | | | | |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_|_| |_| |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res022.txt b/externals/figlet/tests/res022.txt
new file mode 100644
index 0000000000..fb6147b2d9
--- /dev/null
+++ b/externals/figlet/tests/res022.txt
@@ -0,0 +1,1314 @@
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+
+ /
+ /
+ | |
+ \
+ \
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+ /
+ | |
+ |
+ |_|
+
+ _
+| |
+| |
+| |
+|_|
+
+
+ _
+ | |
+ | |
+ \_
+
+
+ __
+ \ \
+ >
+ /_/
+
+
+ _
+(_)
+ _
+(_)
+
+
+
+ /
+ /
+ /_/
+
+
+ _
+ /
+ |
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+
+
+ /
+ /
+ /_/
+
+ _
+| |
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ | (
+ \_
+ |_
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ |
+ \_
+
+
+
+
+ _
+(_)
+
+
+ _
+ /
+ | (
+ \_
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+
+ __
+ |__
+
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ __/
+ \
+ /_
+ \
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+(_)
+ _
+(_)
+
+ _
+| |
+| |
+| |
+|_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+ _
+/ |
+| |
+| |
+|_|
+
+ _
+ | |
+ | |
+ |__
+
+
+
+ _
+(_)
+ _
+(_)
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ | |
+ | |
+ \_
+ |_
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ \ \
+ >
+ /_/
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ | |
+ | |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ __
+ \ \
+ >
+ /_/
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+( )
+ \|
+
+
+
+ __
+ \ \
+ |
+ >
+ |
+ /_/
+ _
+( )
+|/
+
+
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+(_)
+ _
+(_)
+
+ _
+| |
+| |
+| |
+|_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+ _
+/ |
+| |
+| |
+|_|
+
+ _
+ | |
+ | |
+ |__
+
+
+
+ _
+(_)
+ _
+(_)
+
+ _
+( )
+ \|
+
+
+
+ __
+ \ \
+ |
+ >
+ |
+ /_/
+ _
+( )
+|/
+
+
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+ _
+| |
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ __
+ / _
+ \__
+ |__
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ | |
+ | |
+ \_
+
+ _
+ /
+ | |
+ |
+ |_|
+
+ _
+ /
+ | |
+ |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ |
+ \_
+
+ _
+| |
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+( )
+|/
+
+
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+ _
+| |
+| |
+| |
+|_|
+
+ _
+| |
+| |
+| |
+|_|
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ __
+ \ \
+ \
+ \
+
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+( )
+|/
+
+
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+
+
+ _
+(_)
+
+
+
+
+
+
+
+
+
+ __
+ |__
+
+
+
+
+ __
+ |__
+
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _|
+ |_
+ |_
+ |
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_.
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+
+ __
+ |__
+
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ |
+ \_
+
+
+ __
+ \ \
+ \
+ \
+
+
+ _
+ /
+ |
+ \_
+
+ _
+| |
+| |
+| |
+|_|
+
diff --git a/externals/figlet/tests/res023.txt b/externals/figlet/tests/res023.txt
new file mode 100644
index 0000000000..d4d7a719dd
--- /dev/null
+++ b/externals/figlet/tests/res023.txt
@@ -0,0 +1,90 @@
+ __ _ _ _ __
+ / / (_) ___ ___| |_ | |__\ \
+ < < | |/ _ \(_-<| ' \ | / / > >
+ \_\_/ |\___//__/|_||_||_\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ _ __ _
+ (_) ___ ___| |_ | |__ / __ \ (_) _ _ / _|| | _ _ __ __(_) / /___ | |_
+ | |/ _ \(_-<| ' \ | / // / _` || || ' \ | _|| || || |\ \ / _ / // -_)| _|
+ _/ |\___//__/|_||_||_\_\\ \__,_||_||_||_||_| |_| \_,_|/_\_\(_)/_/ \___| \__|
+ |__/ \____/
+ __ _ _ _ _ __ _
+ __ / /| | ___ __ _ _ _ ___ | |_ __ _ | |_ ___ __| |\ \ ___| |_
+ / _| / / | |/ _ \/ _` || '_|/ _ \| _|/ _` || _|/ -_) _ / _` | > > (_-<| ' \
+ \__|/_/ |_|\___/\__, ||_| \___/ \__|\__,_| \__|\___|(_)\__,_|/_/ /__/|_||_|
+ |___/
+ __ _ _ _ __
+ ___ _ _ _/\_ / / (_) ___ ___| |_ | |__\ \
+ |___|| ' \ > < < < | |/ _ \(_-<| ' \ | / / > >
+ |_||_| \/ \_\_/ |\___//__/|_||_||_\_\/_/
+ |__/
+ _ _ _ _ _ _ _ _
+ __ _ _ __ __ _ __ | |_ ___ (_) | |(_) _ _ ___ / || | |(_)
+ / _` || '_ \/ _` |/ _|| ' \ / -_) _ | || || ' \ / -_) | ||_ _|_
+ \__,_|| .__/\__,_|\__||_||_|\___|(_) |_||_||_||_|\___| |_| |_|(_)
+ |_|
+ _
+ ___ _ _ _ _ | |_ __ _ __ __ ___ _ _ _ _ ___ _ _
+ (_-<| || || ' \| _|/ _` |\ \ / / -_)| '_|| '_|/ _ \| '_|
+ /__/ \_, ||_||_|\__|\__,_|/_\_\ \___||_| |_| \___/|_|
+ |__/
+ _ _
+ _ _ ___ __ _ _ _ _ _ _ _ ___ __ __ _ __ ___ __ | |_ ___ __| |
+ | ' \ / -_)/ _` || '_| | || || ' \ / -_)\ \ /| '_ \/ -_)/ _|| _|/ -_)/ _` |
+ |_||_|\___|\__,_||_| \_,_||_||_|\___|/_\_\| .__/\___|\__| \__|\___|\__,_|
+ |_|
+ _ _ _ __ _ __ _ _ _ __
+ | |_ ___ | |__ ___ _ _ ( )\ \ ( ) / / (_) ___ ___| |_ | |__\ \
+ | _|/ _ \| / // -_)| ' \ \| | |_|/ < < | |/ _ \(_-<| ' \ | / / > >
+ \__|\___/|_\_\\___||_||_| | | \_\_/ |\___//__/|_||_||_\_\/_/
+ /_/ |__/
+ _ _ _ _ _ _ _ _ _ __ _
+ __ _ _ __ __ _ __ | |_ ___ (_) | |(_) _ _ ___ / || | |(_) ( )\ \ ( )
+ / _` || '_ \/ _` |/ _|| ' \ / -_) _ | || || ' \ / -_) | ||_ _|_ \| | |_|/
+ \__,_|| .__/\__,_|\__||_||_|\___|(_) |_||_||_||_|\___| |_| |_|(_) | |
+ |_| /_/
+ __ _ _ _ __ _ _ _ _
+ / / (_) ___ ___| |_ | |__\ \ | |_ | |_ ___ _ __ | | ___ | |_
+ < < | |/ _ \(_-<| ' \ | / / > > | _|| ' \ / -_) | '_ \| |/ _ \| _|
+ \_\_/ |\___//__/|_||_||_\_\/_/ \__||_||_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+ | |_ | |_ (_) __ | |__ ___ _ _ ___
+ | _|| ' \ | |/ _|| / // -_)| ' \ (_-<
+ \__||_||_||_|\__||_\_\\___||_||_|/__/
+
+ __ __ __ _ _ _ __ _ _
+ / / __ _ ___ _ _ / _| / _|(_) ___ | | __| |\ \ | |_ | |_ ___ ___ ___
+ < < / _` |(_-<| || || _|| _|| |/ -_)| |/ _` | > > | _|| ' \ / _ \(_-</ -_)
+ \_\\__,_|/__/ \_,_||_| |_| |_|\___||_|\__,_|/_/ \__||_||_|\___//__/\___|
+
+ _ _ _ _ _
+ __ _ _ _ ___ _ _ ( )| |_ ___| |_ ___ | || |
+ / _` || '_|/ -_)| ' \|/ | _| (_-<| ' \ / -_)| || |
+ \__,_||_| \___||_||_| \__| /__/|_||_|\___||_||_|
+
+ _ _ __ _ _ __
+ ___ __ _ _ (_) _ __ | |_ ___ / / ___ _ _ (_) __ | |_ \ \
+ (_-</ _|| '_|| || '_ \| _|(_-< < < / -_)| '_|| |/ _|| ' \ > >
+ /__/\__||_| |_|| .__/ \__|/__/ \_\\___||_| |_|\__||_||_|/_/
+ |_|
+ _ _ _ _ _
+ | |_ | |_ (_) ___ __ __ __ __ _ ___ _ _ ( )| |_
+ | _|| ' \ | |(_-< \ V V // _` |(_-<| ' \|/ | _|
+ \__||_||_||_|/__/ \_/\_/ \__,_|/__/|_||_| \__|
+
+ _ _ _
+ __ | |_ (_) __ | |__ ___ _ _
+ / _|| ' \ | |/ _|| / // -_)| ' \ _
+ \__||_||_||_|\__||_\_\\___||_||_|(_)
+
+ _
+ ___ ___ (_) _ _
+ |___||___| | || ' \
+ |_||_||_|
+
+ _ _ _ _ _ _ _
+ _| | |_ __| | ___ | |__ (_) __ _ _ _ ___ __| | ___ __ __ ___ | |
+ |_ . _|/ _` |/ -_)| '_ \| |/ _` || ' \|___|/ _` |/ -_)\ V // -_)| |
+ |_ _|\__,_|\___||_.__/|_|\__,_||_||_| \__,_|\___| \_/ \___||_|
+ |_|_|
diff --git a/externals/figlet/tests/res024.txt b/externals/figlet/tests/res024.txt
new file mode 100644
index 0000000000..8f1923cef1
--- /dev/null
+++ b/externals/figlet/tests/res024.txt
@@ -0,0 +1,39 @@
+fonts/646-ca.flc
+fonts/646-ca2.flc
+fonts/646-cn.flc
+fonts/646-cu.flc
+fonts/646-de.flc
+fonts/646-dk.flc
+fonts/646-es.flc
+fonts/646-es2.flc
+fonts/646-fr.flc
+fonts/646-gb.flc
+fonts/646-hu.flc
+fonts/646-irv.flc
+fonts/646-it.flc
+fonts/646-jp.flc
+fonts/646-kr.flc
+fonts/646-no.flc
+fonts/646-no2.flc
+fonts/646-pt.flc
+fonts/646-pt2.flc
+fonts/646-se.flc
+fonts/646-se2.flc
+fonts/646-yu.flc
+fonts/8859-2.flc
+fonts/8859-3.flc
+fonts/8859-4.flc
+fonts/8859-5.flc
+fonts/8859-7.flc
+fonts/8859-8.flc
+fonts/8859-9.flc
+fonts/frango.flc
+fonts/hz.flc
+fonts/ilhebrew.flc
+fonts/jis0201.flc
+fonts/koi8r.flc
+fonts/moscow.flc
+fonts/upper.flc
+fonts/ushebrew.flc
+fonts/uskata.flc
+fonts/utf8.flc
diff --git a/externals/figlet/tests/res025.txt b/externals/figlet/tests/res025.txt
new file mode 100644
index 0000000000..12b3f95496
--- /dev/null
+++ b/externals/figlet/tests/res025.txt
@@ -0,0 +1,8 @@
+########## ## # #
+ ### ## ########## ####### ##########
+ # ## # # # # ##
+ # ## # ## # ## #
+ # # ## # ## #
+ # # ## # ## ##
+ # # ## ########## #
+
diff --git a/externals/figlet/tests/res026.txt b/externals/figlet/tests/res026.txt
new file mode 100644
index 0000000000..12b3f95496
--- /dev/null
+++ b/externals/figlet/tests/res026.txt
@@ -0,0 +1,8 @@
+########## ## # #
+ ### ## ########## ####### ##########
+ # ## # # # # ##
+ # ## # ## # ## #
+ # # ## # ## #
+ # # ## # ## ##
+ # # ## ########## #
+
diff --git a/externals/figlet/tests/res027.txt b/externals/figlet/tests/res027.txt
new file mode 100644
index 0000000000..7f6545f865
--- /dev/null
+++ b/externals/figlet/tests/res027.txt
@@ -0,0 +1,430 @@
+ .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``)
+ | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-`
+ |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' )
+ | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_)
+ | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_)
+ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-.
+ | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._)
+ `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+
+ (``--._
+ `-._ _\
+ ( ` )\
+ (_{;}_))
+ (_,_)/
+ .-' /
+ (_.---'
+
+
+ _-_'''-. .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ ( ' ) \ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .')
+ (_{;}_) '| (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)
+ .(_,_)--. ||(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \
+ | | / || (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|
+ ' | /| |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | '
+ \ \____/ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' /
+ \ / | | \ / (_{;}_)| | \ / '. \_/``".' \ /
+ `'-...-' `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+ _ _ _____ __ ___ _ .---. ________ ,---. .--..-./`)
+ ( ` ) \ _\ / /.' | | | | ,_| | || \ | |\ .-.')
+ (_{;}_).-./ ). / ' | .' | |,-./ ) | .----'| , \ | |/ `-' \
+ (_,_) \ '_ .') .' .' '_ | |\ '_ '`) | _|____ | |\_ \| | `-'`"`
+ (_ (_) _) ' ' ( \.-.| > (_) ) |_( )_ || _( )_\ | .---.
+ _ / \ \ ' (`. _` /|( . .-' (_ o._)__|| (_ o _) | | |
+ _( )_ `-'`-' \ | (_ (_) _) `-'`-'|___ |(_,_) | (_,_)\ | | |
+ (_ o _)/ / \ \ \ / . \ / | \| | | | | | | |
+ (_,_)'--' '----' ``-'`-'' `--------`'---' '--' '--' '---'
+
+ .---. _ _ _______ ,---------. .-''-. _ _
+ | ,_| ( ' ) / __ \\ \ .'_ _ \ ( ' )
+ ,-./ ) (_{;}_) | ,_/ \__)`--. ,---'/ ( ` ) ' (_{;}_)
+ \ '_ '`) (_,_),-./ ) | \ . (_ o _) | (_,_)
+ > (_) ) // \ '_ '`) :_ _: | (_,_)___| //
+ ( . .-' // > (_) ) __ (_I_) ' \ .---. //
+ `-'`-'|___ ,-'/ ( . .-'_/ ) (_(=)_) \ `-' /,-'/
+ | \) ( `-'`-' / (_I_) \ /) (
+ `--------``---' `._____.' '---' `'-..-' `---'
+
+ ____ ,---------. ,-----. .-------. .-_'''-. ,-----.
+ .' __ `.\ \ .' .-, '. | _ _ \ '_( )_ \ .' .-, '.
+ / ' \ \`--. ,---'/ ,-.| \ _ \ | ( ' ) | |(_ o _)| ' / ,-.| \ _ \
+ |___| / | | \ ; \ '_ / | :|(_ o _) / . (_,_)/___| ; \ '_ / | :
+ _.-` | :_ _: | _`,/ \ _/ || (_,_).' __ | | .-----.| _`,/ \ _/ |
+ .' _ | (_I_) : ( '\_/ \ ;| |\ \ | |' \ '- .': ( '\_/ \ ;
+ | _( )_ | (_(=)_) \ `"/ \ ) / | | \ `' / \ `-'` | \ `"/ \ ) /
+ \ (_ o _) / (_I_) '. \_/``".' | | \ / \ / '. \_/``".'
+ '.(_,_).' '---' '-----' ''-' `'-' `'-...-' '-----'
+
+ .---. .---. .-'''-. ______ .-''-. ,---------.
+ | | |_ _| / _ \ (``--._ | _ `''. .'_ _ \\ \
+ | | ( ' ) (`' )/`--' `-._ _\ | _ | ) _ \ / ( ` ) '`--. ,---'
+ | '-(_{;}_)(_ o _). ( ` )\ |( ''_' ) | . (_ o _) | | \
+ | (_,_) (_,_). '. (_{;}_))| . (_) `. | | (_,_)___| :_ _:
+ | _ _--. | .---. \ : (_,_)/ |(_ ._) '_ _' \ .---. (_I_)
+ |( ' ) | | \ `-' | .-' / | (_.\.' /( ` )\ `-' / (_(=)_)
+ (_{;}_)| | \ / (_.---' | .'(_{;}_)\ / (_I_)
+ '(_,_) '---' `-...-' '-----'` (_,_) `'-..-' '---'
+
+ ,---. .--.
+ .-, | \ | |
+ ,-.| \ _ | , \ | |
+ \ '_ / | | |\_ \| | _ _ _ _
+ _`,/ \ _/ | _( )_\ | ( ' )--( ' )
+ ( '\_/ \ | (_ o _) |(_{;}_)(_{;}_)
+ `"/ \ ) | (_,_)\ | (_,_)--(_,_)
+ \_/``" | | | |
+ '--' '--'
+
+ .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``)
+ | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-`
+ |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' )
+ | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_)
+ | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_)
+ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-.
+ | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._)
+ `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+
+ (``--._
+ `-._ _\
+ ( ` )\
+ (_{;}_))
+ (_,_)/
+ .-' /
+ (_.---'
+
+
+ _ _ .-''-. .---. .---. _______ ____ .-------. ____
+ ( ` ) .'_ _ \ | | |_ _| / __ \ .' __ `. \ _(`)_ \ .' __ `.
+ (_{;}_)/ ( ` ) '| | ( ' ) | ,_/ \__) / ' \ \| (_ o._)|/ ' \ \
+ (_,_). (_ o _) || '-(_{;}_),-./ ) |___| / || (_,_) /|___| / |
+ | (_,_)___|| (_,_) \ '_ '`) _.-` || '-.-' _.-` |
+ _ ' \ .---.| _ _--. | > (_) ) __ .' _ || | .' _ |
+ _( )_ \ `-' /|( ' ) | | ( . .-'_/ )| _( )_ || | | _( )_ |
+ (_ o _) \ / (_{;}_)| | `-'`-' / \ (_ o _) // ) \ (_ o _) /
+ (_,_) `'-..-' '(_,_) '---' `._____.' '.(_,_).' `---' '.(_,_).'
+
+ _ _ ,---. ,---. .-''-. ,---. .--..-./`) .---.
+ ( ` ) /,--.| /_ | .'_ _ \ | \ | |\ .-.') | ,_|
+ (_{;}_) //_ || ,_ | / ( ` ) '| , \ | |/ `-' \,-./ )
+ (_,_) /_( )_|| ,-./ )| . (_ o _) || |\_ \| | `-'`"`\ '_ '`)
+ /(_ o _)| \ '_ '`) | (_,_)___|| _( )_\ | .---. > (_) )
+ _ / /(_,_)||_ > (_) ) ' \ .---.| (_ o _) | | | ( . .-'
+ _( )_ / `-----' ||( . .-' \ `-' /| (_,_)\ | | | `-'`-'|___
+ (_ o _)`-------|||-' `-'`-'| \ / | | | | | | | \
+ (_,_) '-' '---' `'-..-' '--' '--' '---' `--------`
+
+ _____ __ ____ ,---------. ,---. .--. ____ __ .-'''-.
+ \ _\ / / .' __ `.\ \| \ | | \ \ / // _ \
+ .-./ ). / ' / ' \ \`--. ,---'| , \ | | \ _. / '(`' )/`--'
+ \ '_ .') .' |___| / | | \ | |\_ \| | _( )_ .'(_ o _).
+ (_ (_) _) ' _.-` | :_ _: | _( )_\ | ___(_ o _)' (_,_). '.
+ / \ \ .' _ | (_I_) | (_ o _) || |(_,_)' .---. \ :
+ `-'`-' \ | _( )_ | (_(=)_) | (_,_)\ || `-' / \ `-' |
+ / / \ \\ (_ o _) / (_I_) | | | | \ / \ /
+ '--' '----''.(_,_).' '---' '--' '--' `-..-' `-...-'
+
+ .-------. ,-----. .-------. .-------. .-''-.
+ | _ _ \ .' .-, '. | _ _ \ | _ _ \ .'_ _ \
+ | ( ' ) | / ,-.| \ _ \ | ( ' ) | | ( ' ) | / ( ` ) '
+ |(_ o _) / ; \ '_ / | :|(_ o _) / |(_ o _) / . (_ o _) |
+ | (_,_).' __ | _`,/ \ _/ || (_,_).' __ | (_,_).' __ | (_,_)___|
+ | |\ \ | |: ( '\_/ \ ;| |\ \ | || |\ \ | |' \ .---.
+ | | \ `' / \ `"/ \ ) / | | \ `' /| | \ `' / \ `-' /
+ | | \ / '. \_/``".' | | \ / | | \ / \ /
+ ''-' `'-' '-----' ''-' `'-' ''-' `'-' `'-..-'
+
+ .-------. ____ .-''-. ,---. .--.
+ | _ _ \ .' __ `. .'_ _ \ | \ | |
+ | ( ' ) | / ' \ \ / ( ` ) '| , \ | |
+ |(_ o _) / |___| / |. (_ o _) || |\_ \| |
+ | (_,_).' __ _.-` || (_,_)___|| _( )_\ |
+ | |\ \ | |.' _ |' \ .---.| (_ o _) |
+ | | \ `' /| _( )_ | \ `-' /| (_,_)\ |
+ | | \ / \ (_ o _) / \ / | | | |
+ ''-' `'-' '.(_,_).' `'-..-' '--' '--'
+
+ .-''-. .-------. _____ __ .-''-. ,---. .--. ___ _
+ .'_ _ \ \ _(`)_ \\ _\ / /.'_ _ \ | \ | |.' | | |
+ / ( ` ) '| (_ o._)|.-./ ). / '/ ( ` ) '| , \ | || .' | |
+ . (_ o _) || (_,_) /\ '_ .') .'. (_ o _) || |\_ \| |.' '_ | |
+ | (_,_)___|| '-.-'(_ (_) _) ' | (_,_)___|| _( )_\ |' ( \.-.|
+ ' \ .---.| | / \ \' \ .---.| (_ o _) |' (`. _` /|
+ \ `-' /| | `-'`-' \\ `-' /| (_,_)\ || (_ (_) _)
+ \ / / ) / / \ \\ / | | | | \ / . \ /
+ `'-..-' `---' '--' '----'`'-..-' '--' '--' ``-'`-''
+
+ ______ .-''-. ,---------. _______
+ | _ `''. .'_ _ \\ \ / __ \
+ | _ | ) _ \ / ( ` ) '`--. ,---'| ,_/ \__)
+ |( ''_' ) |. (_ o _) | | \ ,-./ )
+ | . (_) `. || (_,_)___| :_ _: \ '_ '`)
+ |(_ ._) '' \ .---. (_I_) > (_) ) __
+ | (_.\.' / \ `-' / (_(=)_)( . .-'_/ )
+ | .' \ / (_I_) `-'`-' /
+ '-----'` `'-..-' '---' `._____.'
+
+ ,---. .--. .-''-. .--. .--. ,-----. ,---------.
+ | \ | | .'_ _ \ | | _/ / .' .-, '.\ \
+ | , \ | | / ( ` ) '| (`' ) / / ,-.| \ _ \`--. ,---'
+ | |\_ \| |. (_ o _) ||(_ ()_) ; \ '_ / | : | \
+ | _( )_\ || (_,_)___|| (_,_) __ | _`,/ \ _/ | :_ _:
+ | (_ o _) |' \ .---.| |\ \ | |: ( '\_/ \ ; (_I_)
+ | (_,_)\ | \ `-' /| | \ `' / \ `"/ \ ) / (_(=)_)
+ | | | | \ / | | \ / '. \_/``".' (_I_)
+ '--' '--' `'-..-' `--' `'-' '-----' '---'
+
+ _ _ .----, _ _
+ ( ' )`-, ( (_I_)
+ (_{;}_) _\_ \(_(=)_)
+ (_,_) ( ' ) \(_I_)
+ (_{;}_) ( )/
+ (_,_) /
+ / /
+ .-` (
+ '----`
+
+ .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``)
+ | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-`
+ |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' )
+ | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_)
+ | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_)
+ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-.
+ | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._)
+ `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+
+ (``--._
+ `-._ _\
+ ( ` )\
+ (_{;}_))
+ (_,_)/
+ .-' /
+ (_.---'
+
+
+ _ _ .-''-. .---. .---. _______ ____ .-------. ____
+ ( ` ) .'_ _ \ | | |_ _| / __ \ .' __ `. \ _(`)_ \ .' __ `.
+ (_{;}_)/ ( ` ) '| | ( ' ) | ,_/ \__) / ' \ \| (_ o._)|/ ' \ \
+ (_,_). (_ o _) || '-(_{;}_),-./ ) |___| / || (_,_) /|___| / |
+ | (_,_)___|| (_,_) \ '_ '`) _.-` || '-.-' _.-` |
+ _ ' \ .---.| _ _--. | > (_) ) __ .' _ || | .' _ |
+ _( )_ \ `-' /|( ' ) | | ( . .-'_/ )| _( )_ || | | _( )_ |
+ (_ o _) \ / (_{;}_)| | `-'`-' / \ (_ o _) // ) \ (_ o _) /
+ (_,_) `'-..-' '(_,_) '---' `._____.' '.(_,_).' `---' '.(_,_).'
+
+ _ _ ,---. ,---. .-''-. ,---. .--..-./`) .---.
+ ( ` ) /,--.| /_ | .'_ _ \ | \ | |\ .-.') | ,_|
+ (_{;}_) //_ || ,_ | / ( ` ) '| , \ | |/ `-' \,-./ )
+ (_,_) /_( )_|| ,-./ )| . (_ o _) || |\_ \| | `-'`"`\ '_ '`)
+ /(_ o _)| \ '_ '`) | (_,_)___|| _( )_\ | .---. > (_) )
+ _ / /(_,_)||_ > (_) ) ' \ .---.| (_ o _) | | | ( . .-'
+ _( )_ / `-----' ||( . .-' \ `-' /| (_,_)\ | | | `-'`-'|___
+ (_ o _)`-------|||-' `-'`-'| \ / | | | | | | | \
+ (_,_) '-' '---' `'-..-' '--' '--' '---' `--------`
+
+ _ _ .----, _ _
+ ( ' )`-, ( (_I_)
+ (_{;}_) _\_ \(_(=)_)
+ (_,_) ( ' ) \(_I_)
+ (_{;}_) ( )/
+ (_,_) /
+ / /
+ .-` (
+ '----`
+
+ .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``)
+ | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-`
+ |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' )
+ | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_)
+ | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_)
+ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-.
+ | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._)
+ `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+ .-''-. .---. .---.,---------.
+ .'_ _ \ | | |_ _|\ \ (``--._
+ / ( ` ) '| | ( ' ) `--. ,---' `-._ _\
+ . (_ o _) || '-(_{;}_) | \ ( ` )\
+ | (_,_)___|| (_,_) :_ _: (_{;}_))
+ ' \ .---.| _ _--. | (_I_) (_,_)/
+ \ `-' /|( ' ) | | (_(=)_) .-' /
+ \ / (_{;}_)| | (_I_) (_.---'
+ `'-..-' '(_,_) '---' '---'
+
+ ,---------. ,-----. .---. .-------.
+ \ \ .' .-, '. | ,_| \ _(`)_ \
+ `--. ,---'/ ,-.| \ _ \ ,-./ ) | (_ o._)|
+ | \ ; \ '_ / | :\ '_ '`) | (_,_) /
+ :_ _: | _`,/ \ _/ | > (_) ) | '-.-'
+ (_I_) : ( '\_/ \ ;( . .-' | |
+ (_(=)_) \ `"/ \ ) / `-'`-'|___ | |
+ (_I_) '. \_/``".' | \/ )
+ '---' '-----' `--------``---'
+
+ .-''-. .--. .--. _______ .-./`) .---. .---.,---------.
+ .'_ _ \ | | _/ / / __ \ \ .-.')| | |_ _|\ \
+ / ( ` ) '| (`' ) / | ,_/ \__)/ `-' \| | ( ' ) `--. ,---'
+ . (_ o _) ||(_ ()_) ,-./ ) `-'`"`| '-(_{;}_) | \
+ | (_,_)___|| (_,_) __ \ '_ '`) .---. | (_,_) :_ _:
+ ' \ .---.| |\ \ | | > (_) ) __ | | | _ _--. | (_I_)
+ \ `-' /| | \ `' /( . .-'_/ )| | |( ' ) | | (_(=)_)
+ \ / | | \ / `-'`-' / | | (_{;}_)| | (_I_)
+ `'-..-' `--' `'-' `._____.' '---' '(_,_) '---' '---'
+
+ .-'''-. ,---. .--.
+ / _ \| \ | |
+ (`' )/`--'| , \ | |
+ (_ o _). | |\_ \| |
+ (_,_). '. | _( )_\ |
+ .---. \ :| (_ o _) |
+ \ `-' || (_,_)\ |
+ \ / | | | |
+ `-...-' '--' '--'
+
+ .-./`) ________ ________ ___ _ .-'''-. ____
+ \ .-.')| || |.' | | | / _ \ .' __ `. _.--``)
+ / `-' \| .----'| .----'| .' | | (`' )/`--'/ ' \ \ /_ _.-`
+ `-'`"`| _|____ | _|____ .' '_ | |(_ o _). |___| / | /( ' )
+ .---. |_( )_ ||_( )_ |' ( \.-.| (_,_). '. _.-` |((_{;}_)
+ | | (_ o._)__|(_ o._)__|' (`. _` /|.---. \ :.' _ | \(_,_)
+ | | |(_,_) |(_,_) | (_ (_) _)\ `-' || _( )_ | \ `-.
+ | | | | | | \ / . \ / \ / \ (_ o _) / `---._)
+ '---' '---' '---' ``-'`-'' `-...-' '.(_,_).'
+
+ ______ .---. .-''-.
+ (``--._ | _ `''. | ,_| .'_ _ \
+ `-._ _\ | _ | ) _ \,-./ ) / ( ` ) '
+ ( ` )\ |( ''_' ) |\ '_ '`) . (_ o _) |
+ (_{;}_))| . (_) `. | > (_) ) | (_,_)___|
+ (_,_)/ |(_ ._) '( . .-' ' \ .---.
+ .-' / | (_.\.' / `-'`-'|___\ `-' /
+ (_.---' | .' | \\ /
+ '-----'` `--------` `'-..-'
+
+ .-''-. .-'''-. ,-----. .---. .---.,---------.
+ .'_ _ \ / _ \ .' .-, '. | | |_ _|\ \
+ / ( ` ) ' (`' )/`--' / ,-.| \ _ \ | | ( ' ) `--. ,---'
+ . (_ o _) |(_ o _). ; \ '_ / | :| '-(_{;}_) | \
+ | (_,_)___| (_,_). '. | _`,/ \ _/ || (_,_) :_ _:
+ ' \ .---..---. \ :: ( '\_/ \ ;| _ _--. | (_I_)
+ \ `-' /\ `-' | \ `"/ \ ) / |( ' ) | | (_(=)_)
+ \ / \ / '. \_/``".' (_{;}_)| | (_I_)
+ `'-..-' `-...-' '-----' '(_,_) '---' '---'
+
+ ,---------. _ _ ,---. .--. .-''-. .-------. ____
+ \ \ ( ' ) | \ | | .'_ _ \ | _ _ \ .' __ `.
+ `--. ,---'(_{;}_)| , \ | | / ( ` ) '| ( ' ) | / ' \ \
+ | \ (_,_) | |\_ \| |. (_ o _) ||(_ o _) / |___| / |
+ :_ _: | _( )_\ || (_,_)___|| (_,_).' __ _.-` |
+ (_I_) | (_ o _) |' \ .---.| |\ \ | |.' _ |
+ (_(=)_) | (_,_)\ | \ `-' /| | \ `' /| _( )_ |
+ (_I_) | | | | \ / | | \ / \ (_ o _) /
+ '---' '--' '--' `'-..-' ''-' `'-' '.(_,_).'
+
+ .---. .---. .-''-. .---. .---. .-'''-.
+ | ,_| | ,_| .'_ _ \ | | |_ _| / _ \
+ ,-./ ) ,-./ ) / ( ` ) '| | ( ' ) (`' )/`--'
+ \ '_ '`) \ '_ '`) . (_ o _) || '-(_{;}_)(_ o _).
+ > (_) ) > (_) ) | (_,_)___|| (_,_) (_,_). '.
+ ( . .-' ( . .-' ' \ .---.| _ _--. | .---. \ :
+ `-'`-'|___`-'`-'|___\ `-' /|( ' ) | | \ `-' |
+ | \| \\ / (_{;}_)| | \ /
+ `--------``--------` `'-..-' '(_,_) '---' `-...-'
+
+ .-'''-. ,---------. .-------. .-./`) .-------. _______ .-'''-.
+ / _ \\ \\ _(`)_ \\ .-.')| _ _ \ / __ \ / _ \
+ (`' )/`--' `--. ,---'| (_ o._)|/ `-' \| ( ' ) | | ,_/ \__) (`' )/`--'
+(_ o _). | \ | (_,_) / `-'`"`|(_ o _) / ,-./ ) (_ o _).
+ (_,_). '. :_ _: | '-.-' .---. | (_,_).' __ \ '_ '`) (_,_). '.
+.---. \ : (_I_) | | | | | |\ \ | | > (_) ) __ .---. \ :
+\ `-' | (_(=)_) | | | | | | \ `' /( . .-'_/ )\ `-' |
+ \ / (_I_) / ) | | | | \ / `-'`-' / \ /
+ `-...-' '---' `---' '---' ''-' `'-' `._____.' `-...-'
+
+ .---. .---. _______ .-./`) .-------. .-''-.
+(``--._ | | |_ _| / __ \ \ .-.')| _ _ \ .'_ _ \ _.--``)
+ `-._ _\ | | ( ' ) | ,_/ \__)/ `-' \| ( ' ) | / ( ` ) ' /_ _.-`
+ ( ` )\ | '-(_{;}_),-./ ) `-'`"`|(_ o _) / . (_ o _) | /( ' )
+ (_{;}_))| (_,_) \ '_ '`) .---. | (_,_).' __ | (_,_)___|((_{;}_)
+ (_,_)/ | _ _--. | > (_) ) __ | | | |\ \ | |' \ .---. \(_,_)
+ .-' / |( ' ) | | ( . .-'_/ )| | | | \ `' / \ `-' / \ `-.
+(_.---' (_{;}_)| | `-'`-' / | | | | \ / \ / `---._)
+ '(_,_) '---' `._____.' '---' ''-' `'-' `'-..-'
+
+ .-'''-. .-./`) .---. .---.,---------.
+ / _ \\ .-.')| | |_ _|\ \
+ (`' )/`--'/ `-' \| | ( ' ) `--. ,---'
+ (_ o _). `-'`"`| '-(_{;}_) | \
+ (_,_). '. .---. | (_,_) :_ _:
+ .---. \ : | | | _ _--. | (_I_)
+ \ `-' | | | |( ' ) | | (_(=)_)
+ \ / | | (_{;}_)| | (_I_)
+ `-...-' '---' '(_,_) '---' '---'
+
+ ,---------. _ _ ,---. .--. .-'''-. ____ .--. .--.
+ \ \ ( ' ) | \ | | / _ \ .' __ `. | |_ | |
+ `--. ,---'(_{;}_)| , \ | | (`' )/`--'/ ' \ \| _( )_ | |
+ | \ (_,_) | |\_ \| |(_ o _). |___| / ||(_ o _) | |
+ :_ _: | _( )_\ | (_,_). '. _.-` || (_,_) \ | |
+ (_I_) | (_ o _) |.---. \ :.' _ || |/ \| |
+ (_(=)_) | (_,_)\ |\ `-' || _( )_ || ' /\ ` |
+ (_I_) | | | | \ / \ (_ o _) /| / \ |
+ '---' '--' '--' `-...-' '.(_,_).' `---' `---`
+
+ .-''-. .--. .--. _______ .-./`) .---. .---. _______
+ .'_ _ \ | | _/ / / __ \ \ .-.')| | |_ _| / __ \
+ / ( ` ) '| (`' ) / | ,_/ \__)/ `-' \| | ( ' ) | ,_/ \__)
+ . (_ o _) ||(_ ()_) ,-./ ) `-'`"`| '-(_{;}_),-./ )
+ | (_,_)___|| (_,_) __ \ '_ '`) .---. | (_,_) \ '_ '`)
+ ' \ .---.| |\ \ | | > (_) ) __ | | | _ _--. | > (_) ) __
+ \ `-' /| | \ `' /( . .-'_/ )| | |( ' ) | | ( . .-'_/ )
+ \ / | | \ / `-'`-' / | | (_{;}_)| | `-'`-' /
+ `'-..-' `--' `'-' `._____.' '---' '(_,_) '---' `._____.'
+
+ ,---. .--.
+ | \ | |
+ | , \ | |
+ | |\_ \| |
+ | _( )_\ |
+ _ _ | (_ o _) |
+ ( ` ) | (_,_)\ |
+ (_{;}_)| | | |
+ (_,_) '--' '--'
+
+ ,---. .--..-./`)
+ | \ | |\ .-.')
+ | , \ | |/ `-' \
+ | |\_ \| | `-'`"` _ _ _ _ _ _ _ _
+ | _( )_\ | .---. ( ' )--( ' ) ( ' )--( ' )
+ | (_ o _) | | | (_{;}_)(_{;}_)(_{;}_)(_{;}_)
+ | (_,_)\ | | | (_,_)--(_,_) (_,_)--(_,_)
+ | | | | | |
+ '--' '--' '---'
+
+ ,---. .--. ____ .-./`) _______ .-''-. ______
+ | \ | | .' __ `. \ .-.')\ ____ \ .'_ _ \ | _ `''.
+ | , \ | |/ ' \ \/ `-' \| | \ | / ( ` ) '| _ | ) _ \
+ | |\_ \| ||___| / | `-'`"`| |____/ / . (_ o _) ||( ''_' ) |
+ | _( )_\ | _.-` | .---. | _ _ '. | (_,_)___|| . (_) `. |
+ | (_ o _) |.' _ | | | | ( ' ) \' \ .---.|(_ ._) '
+ | (_,_)\ || _( )_ | | | | (_{;}_) | \ `-' /| (_.\.' /
+ | | | |\ (_ o _) / | | | (_,_) / \ / | .'
+ '--' '--' '.(_,_).' '---' /_______.' `'-..-' '-----'`
+
+ .---. .-''-. ,---. ,---. .-''-. ______
+ | ,_| .'_ _ \ | / | | .'_ _ \ | _ `''.
+ ,-./ ) / ( ` ) '| | | .'/ ( ` ) '| _ | ) _ \
+ \ '_ '`) . (_ o _) || | _ | |. (_ o _) ||( ''_' ) | _ _ _ _
+ > (_) ) | (_,_)___|| _( )_ || (_,_)___|| . (_) `. | ( ' )--( ' )
+ ( . .-' ' \ .---.\ (_ o._) /' \ .---.|(_ ._) '(_{;}_)(_{;}_)
+ `-'`-'|___\ `-' / \ (_,_) / \ `-' /| (_.\.' / (_,_)--(_,_)
+ | \\ / \ / \ / | .'
+ `--------` `'-..-' `---` `'-..-' '-----'`
+
diff --git a/externals/figlet/utf8.c b/externals/figlet/utf8.c
new file mode 100644
index 0000000000..b8338c1ea8
--- /dev/null
+++ b/externals/figlet/utf8.c
@@ -0,0 +1,326 @@
+#ifdef TLF_FONTS
+/*
+ * Copyright (c) 2007 Alexey Vatchenko <av@bsdua.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/types.h>
+
+#include <wchar.h>
+#include <arpa/inet.h> /* for htonl() */
+
+#include "utf8.h"
+
+#define _NXT 0x80
+#define _SEQ2 0xc0
+#define _SEQ3 0xe0
+#define _SEQ4 0xf0
+#define _SEQ5 0xf8
+#define _SEQ6 0xfc
+
+#define _BOM 0xfeff
+
+static int __wchar_forbitten(wchar_t sym);
+static int __utf8_forbitten(u_char octet);
+
+static int
+__wchar_forbitten(wchar_t sym)
+{
+
+ /* Surrogate pairs */
+ if (sym >= 0xd800 && sym <= 0xdfff)
+ return (-1);
+
+ return (0);
+}
+
+static int
+__utf8_forbitten(u_char octet)
+{
+
+ switch (octet) {
+ case 0xc0:
+ case 0xc1:
+ case 0xf5:
+ case 0xff:
+ return (-1);
+ }
+
+ return (0);
+}
+
+/*
+ * DESCRIPTION
+ * This function translates UTF-8 string into UCS-4 string (all symbols
+ * will be in local machine byte order).
+ *
+ * It takes the following arguments:
+ * in - input UTF-8 string. It can be null-terminated.
+ * insize - size of input string in bytes.
+ * out - result buffer for UCS-4 string. If out is NULL,
+ * function returns size of result buffer.
+ * outsize - size of out buffer in wide characters.
+ *
+ * RETURN VALUES
+ * The function returns size of result buffer (in wide characters).
+ * Zero is returned in case of error.
+ *
+ * CAVEATS
+ * 1. If UTF-8 string contains zero symbols, they will be translated
+ * as regular symbols.
+ * 2. If UTF8_IGNORE_ERROR or UTF8_SKIP_BOM flag is set, sizes may vary
+ * when `out' is NULL and not NULL. It's because of special UTF-8
+ * sequences which may result in forbitten (by RFC3629) UNICODE
+ * characters. So, the caller must check return value every time and
+ * not prepare buffer in advance (\0 terminate) but after calling this
+ * function.
+ */
+size_t
+utf8_to_wchar(const char *in, size_t insize, wchar_t *out, size_t outsize,
+ int flags)
+{
+ u_char *p, *lim;
+ wchar_t *wlim, high;
+ size_t n, total, i, n_bits;
+
+ if (in == NULL || insize == 0 || (outsize == 0 && out != NULL))
+ return (0);
+
+ total = 0;
+ p = (u_char *)in;
+ lim = p + insize;
+ wlim = out + outsize;
+
+ for (; p < lim; p += n) {
+ if (__utf8_forbitten(*p) != 0 &&
+ (flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+
+ /*
+ * Get number of bytes for one wide character.
+ */
+ n = 1; /* default: 1 byte. Used when skipping bytes. */
+ if ((*p & 0x80) == 0)
+ high = (wchar_t)*p;
+ else if ((*p & 0xe0) == _SEQ2) {
+ n = 2;
+ high = (wchar_t)(*p & 0x1f);
+ } else if ((*p & 0xf0) == _SEQ3) {
+ n = 3;
+ high = (wchar_t)(*p & 0x0f);
+ } else if ((*p & 0xf8) == _SEQ4) {
+ n = 4;
+ high = (wchar_t)(*p & 0x07);
+ } else if ((*p & 0xfc) == _SEQ5) {
+ n = 5;
+ high = (wchar_t)(*p & 0x03);
+ } else if ((*p & 0xfe) == _SEQ6) {
+ n = 6;
+ high = (wchar_t)(*p & 0x01);
+ } else {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ continue;
+ }
+
+ /* does the sequence header tell us truth about length? */
+ if (lim - p <= n - 1) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ n = 1;
+ continue; /* skip */
+ }
+
+ /*
+ * Validate sequence.
+ * All symbols must have higher bits set to 10xxxxxx
+ */
+ if (n > 1) {
+ for (i = 1; i < n; i++) {
+ if ((p[i] & 0xc0) != _NXT)
+ break;
+ }
+ if (i != n) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ n = 1;
+ continue; /* skip */
+ }
+ }
+
+ total++;
+
+ if (out == NULL)
+ continue;
+
+ if (out >= wlim)
+ return (0); /* no space left */
+
+ *out = 0;
+ n_bits = 0;
+ for (i = 1; i < n; i++) {
+ *out |= (wchar_t)(p[n - i] & 0x3f) << n_bits;
+ n_bits += 6; /* 6 low bits in every byte */
+ }
+ *out |= high << n_bits;
+
+ if (*out == 0) /* return at end of string */
+ break;
+
+ if (__wchar_forbitten(*out) != 0) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0); /* forbitten character */
+ else {
+ total--;
+ out--;
+ }
+ } else if (*out == _BOM && (flags & UTF8_SKIP_BOM) != 0) {
+ total--;
+ out--;
+ }
+
+ out++;
+ }
+
+ return (total);
+}
+
+/*
+ * DESCRIPTION
+ * This function translates UCS-4 symbols (given in local machine
+ * byte order) into UTF-8 string.
+ *
+ * It takes the following arguments:
+ * in - input unicode string. It can be null-terminated.
+ * insize - size of input string in wide characters.
+ * out - result buffer for utf8 string. If out is NULL,
+ * function returns size of result buffer.
+ * outsize - size of result buffer.
+ *
+ * RETURN VALUES
+ * The function returns size of result buffer (in bytes). Zero is returned
+ * in case of error.
+ *
+ * CAVEATS
+ * If UCS-4 string contains zero symbols, they will be translated
+ * as regular symbols.
+ */
+size_t
+wchar_to_utf8(const wchar_t *in, size_t insize, char *out, size_t outsize,
+ int flags)
+{
+ wchar_t *w, *wlim, ch;
+ u_char *p, *lim, *oc;
+ size_t total, n;
+
+ if (in == NULL || insize == 0 || (outsize == 0 && out != NULL))
+ return (0);
+
+ w = (wchar_t *)in;
+ wlim = w + insize;
+ p = (u_char *)out;
+ lim = p + outsize;
+ total = 0;
+ for (; w < wlim; w++) {
+ if (__wchar_forbitten(*w) != 0) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ else
+ continue;
+ }
+
+ if (*w == _BOM && (flags & UTF8_SKIP_BOM) != 0)
+ continue;
+
+ if (*w < 0) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ continue;
+ } else if (*w <= 0x0000007f)
+ n = 1;
+ else if (*w <= 0x000007ff)
+ n = 2;
+ else if (*w <= 0x0000ffff)
+ n = 3;
+ else if (*w <= 0x001fffff)
+ n = 4;
+ else if (*w <= 0x03ffffff)
+ n = 5;
+ else /* if (*w <= 0x7fffffff) */
+ n = 6;
+
+ total += n;
+
+ if (out == NULL)
+ continue;
+
+ if (lim - p <= n - 1)
+ return (0); /* no space left */
+
+ /* make it work under different endians */
+ ch = htonl(*w);
+ oc = (u_char *)&ch;
+ switch (n) {
+ case 1:
+ *p = oc[3];
+ break;
+
+ case 2:
+ p[1] = _NXT | (oc[3] & 0x3f);
+ p[0] = _SEQ2 | (oc[3] >> 6) | ((oc[2] & 0x07) << 2);
+ break;
+
+ case 3:
+ p[2] = _NXT | (oc[3] & 0x3f);
+ p[1] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+ p[0] = _SEQ3 | ((oc[2] & 0xf0) >> 4);
+ break;
+
+ case 4:
+ p[3] = _NXT | (oc[3] & 0x3f);
+ p[2] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+ p[1] = _NXT | ((oc[2] & 0xf0) >> 4) |
+ ((oc[1] & 0x03) << 4);
+ p[0] = _SEQ4 | ((oc[1] & 0x1f) >> 2);
+ break;
+
+ case 5:
+ p[4] = _NXT | (oc[3] & 0x3f);
+ p[3] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+ p[2] = _NXT | ((oc[2] & 0xf0) >> 4) |
+ ((oc[1] & 0x03) << 4);
+ p[1] = _NXT | (oc[1] >> 2);
+ p[0] = _SEQ5 | (oc[0] & 0x03);
+ break;
+
+ case 6:
+ p[5] = _NXT | (oc[3] & 0x3f);
+ p[4] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+ p[3] = _NXT | (oc[2] >> 4) | ((oc[1] & 0x03) << 4);
+ p[2] = _NXT | (oc[1] >> 2);
+ p[1] = _NXT | (oc[0] & 0x3f);
+ p[0] = _SEQ6 | ((oc[0] & 0x40) >> 6);
+ break;
+ }
+
+ /*
+ * NOTE: do not check here for forbitten UTF-8 characters.
+ * They cannot appear here because we do proper convertion.
+ */
+
+ p += n;
+ }
+
+ return (total);
+}
+#endif /* TLF_FONTS */
diff --git a/externals/figlet/utf8.h b/externals/figlet/utf8.h
new file mode 100644
index 0000000000..a3e09bdee8
--- /dev/null
+++ b/externals/figlet/utf8.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2007 Alexey Vatchenko <av@bsdua.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * utf8: implementation of UTF-8 charset encoding (RFC3629).
+ */
+#ifndef _UTF8_H_
+#define _UTF8_H_
+
+#include <sys/types.h>
+
+#include <wchar.h>
+
+#define UTF8_IGNORE_ERROR 0x01
+#define UTF8_SKIP_BOM 0x02
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+size_t utf8_to_wchar(const char *in, size_t insize, wchar_t *out,
+ size_t outsize, int flags);
+size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out,
+ size_t outsize, int flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_UTF8_H_ */
diff --git a/externals/figlet/zipio.c b/externals/figlet/zipio.c
new file mode 100644
index 0000000000..f7406d952a
--- /dev/null
+++ b/externals/figlet/zipio.c
@@ -0,0 +1,818 @@
+/*
+ * zipio.c - stdio emulation library for reading zip files
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.1:
+ * Changed "z*" functions to "Z*" to avoid namespace pollution.
+ * Added "zungetc" macro.
+ * Added definitions of SEEK_SET, SEEK_CUR, SEEK_END for the Posixly challenged
+ * John Cowan <cowan@ccil.org>
+ *
+ * Changes from 1.1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Avoid usage of unitialized "length" variable in _Zgetc
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * Refer to zipio.h for a description of this package.
+ */
+
+/*
+ * The .zip file header is described below. It consists of
+ * 30 fixed bytes, followed by two variable length fields
+ * whose length is contained in the first 30 bytes. After this
+ * header, the data is stored (in deflate format if the compression
+ * method is 8).
+ *
+ * The crc-32 field is the crc on the uncompressed data.
+ *
+ * .zip file header:
+ *
+ * local file header signature 4 bytes (0x04034b50)
+ * version needed to extract 2 bytes
+ * general purpose bit flag 2 bytes
+ * compression method 2 bytes
+ * last mod file time 2 bytes
+ * last mod file date 2 bytes
+ * crc-32 4 bytes
+ * compressed size 4 bytes
+ * uncompressed size 4 bytes
+ * filename length 2 bytes
+ * extra field length 2 bytes
+ *
+ * filename (variable size)
+ * extra field (variable size)
+ *
+ * These fields are described in more detail in appnote.txt
+ * in the pkzip 1.93 distribution.
+ */
+
+#include <stdlib.h>
+#ifdef MEMCPY
+#include <mem.h>
+#endif
+
+#include "zipio.h"
+#include "inflate.h"
+#include "crc.h"
+
+/*
+ * Macros for constants
+ */
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef ZIPSIGNATURE
+#define ZIPSIGNATURE 0x04034b50L
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+
+/*
+ * Buffer size macros
+ *
+ * The following constants are optimized for large-model
+ * (but not flat model) Windows with virtual memory. It
+ * will work fine on unix and flat model Windows as well.
+ *
+ * The constant BUFFERTHRESHOLD determines when memory
+ * buffering changes to file buffering.
+ *
+ * Assumptions:
+ *
+ * 1) INPBUFSIZE + OUTBUFSIZE + sizeof(void *) * PTRBUFSIZE + delta < 64K
+ *
+ * 2) OUTBUFSIZE = 32K * N (related to inflate's 32K window size)
+ *
+ * 2) Max in-memory file size is OUTBUFSIZE * PTRBUFSIZE
+ * which is 64 MBytes by default (32K * 2K).
+ *
+ */
+
+#ifndef BUFFERTHRESHOLD
+#define BUFFERTHRESHOLD (256 * 1024L)
+#endif
+
+#ifndef INPBUFSIZE
+#define INPBUFSIZE ( 8 * 1024 )
+#endif
+
+#ifndef PTRBUFSIZE
+#define PTRBUFSIZE ( 2 * 1024 )
+#endif
+
+#ifndef OUTBUFSIZE
+#define OUTBUFSIZE ((unsigned int) ( 32 * 1024L))
+#endif
+
+#define MAXFILESIZE (OUTBUFSIZE * (long) PTRBUFSIZE)
+
+/*
+ * Macro for short-hand reference to ZipioState (from ZFILE *)
+ */
+
+#define ZS ((struct ZipioState *) stream)
+
+/*
+ * Macro to manipulate Zgetc() cache
+ */
+
+#define CACHEINIT \
+ zs->ptr = NULL; \
+ zs->len = 0;
+
+#define CACHEUPDATE \
+ if (ZS->ptr) \
+ { \
+ ZS->fileposition &= ~((long) (OUTBUFSIZE-1)); \
+ ZS->fileposition += ZS->ptr - ZS->getbuf; \
+ ZS->ptr = NULL; \
+ } \
+ ZS->len = 0;
+
+/*
+ * Macros for run-time type identification
+ */
+
+#ifndef RUNTIMEENABLE
+#define RUNTIMEENABLE 0
+#endif
+
+#if RUNTIMEENABLE
+#define ZIPIOSTATETYPE 0x0110f00fL
+#define RUNTIMEINIT \
+ zs->runtimetypeid1 = ZIPIOSTATETYPE; \
+ zs->runtimetypeid2 = ZIPIOSTATETYPE;
+
+#define RUNTIMECHECK \
+ if (!ZS || (ZS->runtimetypeid1 != ZIPIOSTATETYPE) \
+ || (ZS->runtimetypeid2 != ZIPIOSTATETYPE)) return -1;
+#else
+#define RUNTIMEINIT
+#define RUNTIMECHECK
+#endif
+
+/*
+ * Macros for converting bytes to unsigned integers
+ */
+
+#define GETUINT4(ptr, i4) \
+ { \
+ i4 = (((unsigned long) *(((unsigned char *) (ptr)) + 0)) ) | \
+ (((unsigned long) *(((unsigned char *) (ptr)) + 1)) << 8) | \
+ (((unsigned long) *(((unsigned char *) (ptr)) + 2)) << 16) | \
+ (((unsigned long) *(((unsigned char *) (ptr)) + 3)) << 24) ; \
+ }
+
+#define GETUINT2(ptr, i2) \
+ { \
+ i2 = (((unsigned int) *(((unsigned char *) (ptr)) + 0)) ) | \
+ (((unsigned int) *(((unsigned char *) (ptr)) + 1)) << 8) ; \
+ }
+
+/* Structure to hold state for decoding zip files */
+struct ZipioState {
+
+ /* Fields overlaid with ZFILE structure */
+ int len; /* length of Zgetc cache */
+ unsigned char *ptr; /* pointer to Zgetc cache */
+
+ /* Fields invisible to users of ZFILE structure */
+
+ unsigned long runtimetypeid1; /* to detect run-time errors */
+ int errorencountered; /* error encountered flag */
+
+ /* Buffering state */
+ unsigned char inpbuf[INPBUFSIZE]; /* inp buffer from zip file */
+ unsigned char *ptrbuf[PTRBUFSIZE]; /* pointers to in-memory bufs */
+
+ unsigned char getbuf[OUTBUFSIZE]; /* buffer for use by Zgetc */
+ long getoff; /* starting offset of getbuf */
+
+ FILE *tmpfil; /* file ptr to temp file */
+
+ /* Amount of input data inflated */
+ unsigned long inpinf;
+ unsigned long outinf;
+
+ /* Zip file header */
+ unsigned long sign; /* local file header signature (0x04034b50) */
+ unsigned int vers; /* version needed to extract 2 bytes */
+ unsigned int flag; /* general purpose bit flag 2 bytes */
+ unsigned int comp; /* compression method 2 bytes */
+ unsigned int mtim; /* last mod file time 2 bytes */
+ unsigned int mdat; /* last mod file date 2 bytes */
+ unsigned long crc3; /* crc-32 4 bytes */
+ unsigned long csiz; /* compressed size 4 bytes */
+ unsigned long usiz; /* uncompressed size 4 bytes */
+ unsigned int flen; /* filename length 2 bytes */
+ unsigned int elen; /* extra field length 2 bytes */
+
+ /* Application state */
+ FILE *OpenFile; /* currently open file */
+
+ void *inflatestate; /* current state for inflate */
+
+ unsigned long fileposition; /* current file position */
+
+ unsigned long filecrc; /* current crc */
+
+ unsigned long runtimetypeid2; /* to detect run-time errors */
+};
+
+/*
+ * Utility routines to handle uncompressed file buffers
+ */
+
+/* Initialize buffering */
+static void BufferInitialize(
+ struct ZipioState *zs,
+ int doinflate
+)
+{
+ zs->getoff = -1;
+ zs->tmpfil = NULL;
+
+ /*
+ * If not inflating, use the input file
+ */
+
+ if (!doinflate)
+ {
+ zs->tmpfil = zs->OpenFile;
+
+ /* Get the uncompressed file size */
+ fseek(zs->tmpfil, 0, SEEK_END);
+ zs->usiz = ftell(zs->tmpfil);
+ zs->outinf = zs->usiz;
+
+ /* Start at the beginning */
+ fseek(zs->tmpfil, 0, SEEK_SET);
+ }
+
+ /* If there's no file open, see if it's big enough for temp file */
+ if (!zs->tmpfil)
+ {
+ if (zs->usiz >= BUFFERTHRESHOLD)
+ zs->tmpfil = tmpfile();
+ }
+
+ /* If there's no file open, then use memory buffering */
+ if (!zs->tmpfil)
+ {
+ int i;
+
+ for (i=0; i<PTRBUFSIZE; i++)
+ zs->ptrbuf[i] = NULL;
+ }
+}
+
+/* pump data till length bytes of file are inflated or error encountered */
+static int BufferPump(struct ZipioState *zs, long length)
+{
+ size_t inplen, ret;
+
+ /* Check to see if the length is valid */
+ if (length > zs->usiz) return TRUE;
+
+ /* Loop till enough data is pumped */
+ while (!zs->errorencountered && (zs->outinf < length))
+ {
+ /* Compute how much data to read */
+ if ((zs->csiz - zs->inpinf) < INPBUFSIZE)
+ inplen = (size_t) (zs->csiz - zs->inpinf);
+ else
+ inplen = INPBUFSIZE;
+
+ if (inplen <= 0) return TRUE;
+
+ /* Read some data from the file */
+ ret = fread(zs->inpbuf, 1, inplen, zs->OpenFile);
+ if (ret != inplen) return TRUE;
+
+ /* Update how much data has been read from the file */
+ zs->inpinf += inplen;
+
+ /* Pump this data into the decompressor */
+ if (InflatePutBuffer(zs->inflatestate, zs->inpbuf, inplen)) return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* Read from the buffer */
+static int BufferRead(
+ struct ZipioState *zs,
+ long offset,
+ unsigned char *buffer,
+ long length
+)
+{
+ /*
+ * Make sure enough bytes have been inflated
+ * Note that the correction for reading past EOF has to
+ * be done before calling this routine
+ */
+
+ if (BufferPump(zs, offset+length)) return TRUE;
+
+ /* If using file buffering, just get the data from the file */
+ if (zs->tmpfil)
+ {
+ if (fseek(zs->tmpfil, offset, SEEK_SET)) return TRUE;
+ if (fread(buffer, 1, (size_t) length, zs->tmpfil) != length) return TRUE;
+ }
+ /* If no temp file, use memory buffering */
+ else
+ {
+ unsigned int i;
+ unsigned int off, len;
+ unsigned char *ptr;
+
+ long tmpoff;
+ unsigned char *tmpbuf;
+ long tmplen;
+
+ /* Save copies of offset, buffer and length for the loop */
+ tmpoff = offset;
+ tmpbuf = buffer;
+ tmplen = length;
+
+ /* Validate the transfer */
+ if (tmpoff+tmplen > MAXFILESIZE) return TRUE;
+
+ /* Loop till done */
+ while (tmplen)
+ {
+ /* Get a pointer to the next block */
+ i = (unsigned int) (tmpoff / OUTBUFSIZE);
+ ptr = zs->ptrbuf[i];
+ if (!ptr) return TRUE;
+
+ /* Get the offset,length for this block */
+ off = (unsigned int) (tmpoff & (OUTBUFSIZE-1));
+ len = OUTBUFSIZE - off;
+ if (len > tmplen) len = (unsigned int) tmplen;
+
+ /* Get the starting pointer for the transfer */
+ ptr += off;
+
+ /* Copy the data for this block */
+#ifdef MEMCPY
+ memcpy(tmpbuf, ptr, len);
+#else
+ for (i=0; i<len; i++)
+ tmpbuf[i] = ptr[i];
+#endif
+
+ /* Update the offset, buffer, and length */
+ tmpoff += len;
+ tmpbuf += len;
+ tmplen -= len;
+ }
+ }
+
+ /* return success */
+ return FALSE;
+}
+
+/* Append to the buffer */
+static int BufferAppend(
+ struct ZipioState *zs,
+ unsigned char *buffer,
+ long length
+)
+{
+ /* If using file buffering, just append the data from the file */
+ if (zs->tmpfil)
+ {
+ if (fseek(zs->tmpfil, zs->outinf, SEEK_SET)) return TRUE;
+ if (fwrite(buffer, 1, (size_t) length, zs->tmpfil) != length) return TRUE;
+ }
+ /* If no temp file, use memory buffering */
+ else
+ {
+ unsigned int i;
+ unsigned int off, len;
+ unsigned char *ptr;
+
+ long tmpoff;
+ unsigned char *tmpbuf;
+ long tmplen;
+
+ /* Save copies of outinf, buffer and length for the loop */
+ tmpoff = zs->outinf;
+ tmpbuf = buffer;
+ tmplen = length;
+
+ /* Validate the transfer */
+ if (tmpoff+tmplen > MAXFILESIZE) return TRUE;
+
+ /* Loop till done */
+ while (tmplen)
+ {
+ /* Get a pointer to the next block */
+ i = (unsigned int) (tmpoff / OUTBUFSIZE);
+ ptr = zs->ptrbuf[i];
+ if (!ptr)
+ {
+ ptr = (unsigned char *) malloc(OUTBUFSIZE);
+ if (!ptr) return TRUE;
+ zs->ptrbuf[i] = ptr;
+ }
+
+ /* Get the offset,length for this block */
+ off = (unsigned int) (tmpoff & (OUTBUFSIZE-1));
+ len = OUTBUFSIZE - off;
+ if (len > tmplen) len = (unsigned int) tmplen;
+
+ /* Get the starting pointer for the transfer */
+ ptr += off;
+
+ /* Copy the data for this block */
+#ifdef MEMCPY
+ memcpy(ptr, tmpbuf, len);
+#else
+ for (i=0; i<len; i++)
+ ptr[i] = tmpbuf[i];
+#endif
+
+ /* Update the offset, buffer, and length */
+ tmpoff += len;
+ tmpbuf += len;
+ tmplen -= len;
+ }
+ }
+
+ /* Update the output buffer length */
+ zs->outinf += length;
+
+ /* return success */
+ return FALSE;
+}
+
+/* Terminate buffering */
+static void BufferTerminate(
+ struct ZipioState *zs
+)
+{
+ /* If reading directly from the uncompressed file, just mark with NULL */
+ if (zs->tmpfil == zs->OpenFile)
+ {
+ zs->tmpfil = NULL;
+ }
+ /* If using the a temporary file, close it */
+ else if (zs->tmpfil)
+ {
+ fclose(zs->tmpfil);
+ zs->tmpfil = NULL;
+ }
+ /* If doing memory buffering, free the buffers */
+ else
+ {
+ int i;
+
+ for (i=0; i<PTRBUFSIZE; i++)
+ if (zs->ptrbuf[i]) free(zs->ptrbuf[i]);
+ }
+}
+
+/*
+ * callout routines for InflateInitialize
+ */
+
+static int inflate_putbuffer( /* returns 0 on success */
+ void *stream, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+)
+{
+ RUNTIMECHECK;
+
+ /* If the write will go past the end of file, return an error */
+ if (ZS->outinf + length > ZS->usiz) return TRUE;
+
+ /* Update the CRC */
+ ZS->filecrc = CrcUpdate(ZS->filecrc, buffer, length);
+
+ /* Append to the buffer */
+ if (BufferAppend(ZS, buffer, length)) return TRUE;
+
+ /* Return success */
+ return FALSE;
+}
+
+static void *inflate_malloc(long length)
+{
+ return malloc((size_t) length);
+}
+
+static void inflate_free(void *buffer)
+{
+ free(buffer);
+}
+
+ZFILE *Zopen(const char *path, const char *mode)
+{
+ struct ZipioState *zs;
+
+ long inplen;
+
+ /* Allocate the ZipioState memory area */
+ zs = (struct ZipioState *) malloc(sizeof(struct ZipioState));
+ if (!zs) return NULL;
+
+ /* Set up the initial values of the inflate state */
+
+ CACHEINIT;
+
+ RUNTIMEINIT;
+
+ zs->errorencountered = FALSE;
+
+ zs->inpinf = 0;
+ zs->outinf = 0;
+
+ zs->fileposition = 0;
+
+ zs->filecrc = 0xffffffffL;
+
+ /* Open the real file */
+ zs->OpenFile = fopen(path, mode);
+ if (!zs->OpenFile)
+ {
+ free(zs);
+ return NULL;
+ }
+
+ /* Read the first input buffer */
+ if ((inplen = (long) fread(zs->inpbuf, 1, INPBUFSIZE, zs->OpenFile)) >= 30)
+ {
+ GETUINT4(zs->inpbuf+ 0, zs->sign);
+ GETUINT2(zs->inpbuf+ 4, zs->vers);
+ GETUINT2(zs->inpbuf+ 6, zs->flag);
+ GETUINT2(zs->inpbuf+ 8, zs->comp);
+ GETUINT2(zs->inpbuf+10, zs->mtim);
+ GETUINT2(zs->inpbuf+12, zs->mdat);
+ GETUINT4(zs->inpbuf+14, zs->crc3);
+ GETUINT4(zs->inpbuf+18, zs->csiz);
+ GETUINT4(zs->inpbuf+22, zs->usiz);
+ GETUINT2(zs->inpbuf+26, zs->flen);
+ GETUINT2(zs->inpbuf+28, zs->elen);
+
+#ifdef PRINTZIPHEADER
+ fprintf(stderr, "local file header signature hex %8lx\n", zs->sign);
+ fprintf(stderr, "version needed to extract %8d\n" , zs->vers);
+ fprintf(stderr, "general purpose bit flag hex %8x\n" , zs->flag);
+ fprintf(stderr, "compression method %8d\n" , zs->comp);
+ fprintf(stderr, "last mod file time %8d\n" , zs->mtim);
+ fprintf(stderr, "last mod file date %8d\n" , zs->mdat);
+ fprintf(stderr, "crc-32 hex %8lx\n", zs->crc3);
+ fprintf(stderr, "compressed size %8ld\n", zs->csiz);
+ fprintf(stderr, "uncompressed size %8ld\n", zs->usiz);
+ fprintf(stderr, "filename length %8d\n" , zs->flen);
+ fprintf(stderr, "extra field length %8d\n" , zs->elen);
+#endif
+ }
+ else
+ {
+ zs->sign = 0;
+ }
+
+ /*
+ * If the file isn't a zip file, set up to read it normally
+ */
+ if ((zs->sign != ZIPSIGNATURE) ||
+ (zs->flag & 1) ||
+ (zs->comp != 8) ||
+ (inplen <= 30 + zs->flen + zs->elen) )
+ {
+ /* Initialize buffering */
+ BufferInitialize(zs, FALSE);
+
+ zs->inflatestate = NULL;
+ }
+ else
+ {
+ /* Initialize buffering */
+ BufferInitialize(zs, TRUE);
+
+ zs->inflatestate = InflateInitialize(
+ (void *) zs,
+ inflate_putbuffer,
+ inflate_malloc,
+ inflate_free
+ );
+
+ if (InflatePutBuffer(zs->inflatestate,
+ zs->inpbuf+30+zs->flen+zs->elen,
+ inplen-30-zs->flen-zs->elen
+ )
+ )
+ zs->errorencountered = TRUE;
+
+ zs->inpinf += inplen-30-zs->flen-zs->elen;
+ }
+
+ /* Return this state info to the caller */
+ return (ZFILE *) zs;
+}
+
+int _Zgetc(ZFILE *stream)
+{
+ long offset, length;
+
+ int off;
+
+ RUNTIMECHECK;
+
+ if (ZS->errorencountered) return -1;
+
+ CACHEUPDATE;
+
+ /* If already at EOF, return */
+ if (ZS->fileposition >= ZS->usiz) return -1;
+
+ /* If data isn't in current outbuf, get it */
+ offset = ZS->fileposition & ~((long) (OUTBUFSIZE-1));
+ length = ZS->usiz - offset;
+ if (length > OUTBUFSIZE) length = OUTBUFSIZE;
+
+ if (ZS->getoff != offset)
+ {
+ if (BufferRead(ZS, offset, ZS->getbuf, length)) return -1;
+
+ ZS->getoff = offset;
+ }
+
+ /* Set up the cache */
+ off = (int) (ZS->fileposition & (OUTBUFSIZE-1));
+ ZS->len = (int) (length - off);
+ ZS->ptr = ZS->getbuf + off;
+
+ /* Return the character */
+ ZS->len--;
+ return *(ZS->ptr++);
+}
+
+size_t Zread(void *ptr, size_t size, size_t n, ZFILE *stream)
+{
+ long length;
+
+ RUNTIMECHECK;
+
+ if (ZS->errorencountered) return 0;
+
+ CACHEUPDATE;
+
+ /* Compute the length requested */
+ length = size * (long) n;
+
+ /* Adjust the length to account for premature EOF */
+ if (ZS->fileposition+length > ZS->usiz)
+ length = ZS->usiz - ZS->fileposition;
+
+ /* If the length is zero, then just return an EOF error */
+ if (length <= 0) return 0;
+
+ /* Make the length a multiple of size */
+ length /= size;
+ length *= size;
+
+ /* If the length is zero, then just return an EOF error */
+ if (length <= 0) return 0;
+
+ /* Read from the buffer */
+ if (BufferRead(ZS, ZS->fileposition, (unsigned char *) ptr, length))
+ return 0;
+
+ /* Update the file position */
+ ZS->fileposition += length;
+
+ /* Return the number of items transferred */
+ return (size_t) (length / size);
+}
+
+int Zseek(ZFILE *stream, long offset, int whence)
+{
+ long newoffset;
+
+ RUNTIMECHECK;
+
+ if (ZS->errorencountered) return -1;
+
+ CACHEUPDATE;
+
+ if (whence == SEEK_SET)
+ {
+ newoffset = offset;
+ }
+ else if (whence == SEEK_CUR)
+ {
+ newoffset = ZS->fileposition + offset;
+ }
+ else if (whence == SEEK_END)
+ {
+ newoffset = ZS->fileposition + ZS->usiz;
+ }
+ else
+ {
+ return -1;
+ }
+
+ if ((newoffset < 0) || (newoffset > ZS->usiz)) return -1;
+
+ ZS->fileposition = newoffset;
+
+ return 0;
+}
+
+long Ztell(ZFILE *stream)
+{
+ RUNTIMECHECK;
+
+ if (ZS->errorencountered) return -1;
+
+ CACHEUPDATE;
+
+ return ZS->fileposition;
+}
+
+int Zclose(ZFILE *stream)
+{
+ int ret;
+
+ RUNTIMECHECK;
+
+ CACHEUPDATE;
+
+ /* terminate the inflate routines, and check for errors */
+ if (ZS->inflatestate)
+ {
+ if (InflateTerminate(ZS->inflatestate))
+ ZS->errorencountered = TRUE;
+
+ /* Check that the CRC is OK */
+ if (ZS->filecrc != (ZS->crc3 ^ 0xffffffffL))
+ ZS->errorencountered = TRUE;
+ }
+
+ /* save the final error status */
+ ret = ZS->errorencountered;
+
+ /* terminate the buffering */
+ BufferTerminate(ZS);
+
+ /* free the ZipioState structure */
+ free(ZS);
+
+ /* return the final error status */
+ return ret;
+}
diff --git a/externals/figlet/zipio.h b/externals/figlet/zipio.h
new file mode 100644
index 0000000000..12289d6581
--- /dev/null
+++ b/externals/figlet/zipio.h
@@ -0,0 +1,104 @@
+/*
+ * zipio.h - stdio emulation library for reading zip files
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.1:
+ * Changed "z*" functions to "Z*" to avoid namespace pollution.
+ * Added "zungetc" macro.
+ * John Cowan <cowan@ccil.org>
+ *
+ * Changes from 1.1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * This library of routines has the same calling sequence as
+ * the stdio.h routines for reading files. If these routines
+ * detect that they are reading from a zip file, they transparently
+ * unzip the file and make the application think they're reading
+ * from the uncompressed file.
+ *
+ * Note that this library is designed to work for zip files that
+ * use the deflate compression method, and to read the first file
+ * within the zip archive.
+ *
+ * There are a number of tunable parameters in the reference
+ * implementation relating to in-memory decompression and the
+ * use of temporary files.
+ *
+ * Particular care was taken to make the Zgetc() macro work
+ * as efficiently as possible. When reading an uncompressed
+ * file with Zgetc(), it has exactly the same performance as
+ * when using getc(). WHen reading a compressed file with
+ * Zgetc(), it has the same performance as fread(). The total
+ * CPU overhead for decompression is about 50 cycles per byte.
+ *
+ * The Zungetc() macro is quite limited. It ignores the character
+ * specified for pushback, and essentially just forces the last
+ * character read to be re-read. This is essential when parsing
+ * numbers and such. (1.1.1)
+ *
+ * There are a few stdio routines that aren't represented here, but
+ * they can be layered on top of these routines if needed.
+ */
+
+#ifndef __ZIPIO_H
+#define __ZIPIO_H
+
+#include <stdio.h>
+
+typedef struct {
+ int len;
+ unsigned char *ptr;
+} ZFILE;
+
+#define Zgetc(f) \
+ ((--((f)->len) >= 0) \
+ ? (unsigned char)(*(f)->ptr++) \
+ : _Zgetc (f))
+
+#define Zungetc(c,f) \
+ ((f)->ptr--, (f)->len++, (c))
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ZFILE *Zopen(const char *path, const char *mode);
+int _Zgetc(ZFILE *stream);
+size_t Zread(void *ptr, size_t size, size_t n, ZFILE *stream);
+int Zseek(ZFILE *stream, long offset, int whence);
+long Ztell(ZFILE *stream);
+int Zclose(ZFILE *stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/pear-figlet/Text/Figlet.php b/externals/pear-figlet/Text/Figlet.php
new file mode 100644
index 0000000000..dd27cf9b73
--- /dev/null
+++ b/externals/pear-figlet/Text/Figlet.php
@@ -0,0 +1,510 @@
+<?php
+/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
+/**
+* ASCII art text creation
+*
+* Project home page (Russian): http://bolknote.ru/files/figlet/
+*
+* PHP Version 4
+*
+* @category Text
+* @package Text_Figlet
+* @author Evgeny Stepanischev <imbolk@gmail.com>
+* @author Christian Weiske <cweiske@php.net>
+* @license http://www.php.net/license PHP License
+* @version CVS: $Id$
+* @link http://pear.php.net/package/Text_Figlet
+*/
+require_once 'PEAR.php';
+
+/**
+* ASCII art text creation
+*
+* Project home page (Russian): http://bolknote.ru/files/figlet/
+*
+* PHP Version 4
+*
+* @category Text
+* @package Text_Figlet
+* @author Evgeny Stepanischev <imbolk@gmail.com>
+* @author Christian Weiske <cweiske@php.net>
+* @license http://www.php.net/license PHP License
+* @link http://pear.php.net/package/Text_Figlet
+*/
+class Text_Figlet
+{
+ /**
+ * Height of a letter
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $height;
+
+ /**
+ * Letter baseline
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $oldlayout;
+
+ /**
+ * Flag - RTL (right to left) or LTR (left to right) text direction
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $rtol;
+
+ /**
+ * Information about special 'hardblank' character
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $hardblank;
+
+ /**
+ * Is used for keeping font
+ *
+ * @var array
+ *
+ * @access protected
+ */
+ var $font;
+
+ /**
+ * Flag is true if smushing occured in letters printing cycle
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $smush_flag;
+
+ /**
+ * Comment lines buffer
+ *
+ * @var string
+ *
+ * @access public
+ */
+
+ var $font_comment;
+
+
+ /**
+ * Load user font. Must be invoked first.
+ * Automatically tries the Text_Figlet font data directory
+ * as long as no path separator is in the filename.
+ *
+ * @param string $filename font file name
+ * @param bool $loadgerman (optional) load German character set or not
+ *
+ * @access public
+ * @return mixed PEAR_Error or true for success
+ */
+ function loadFont($filename, $loadgerman = true)
+ {
+ $this->font = array();
+ if (!file_exists($filename)) {
+ //if it does not exist, try the Text_Figlet data directory
+ include_once 'PEAR/Config.php';
+
+ $config = PEAR_Config::singleton();
+ $fontdir = $config->get('data_dir') . '/Text_Figlet/fonts/';
+
+ //only for filenames without path separators
+ if (strpos($filename, '/') === false
+ && file_exists($fontdir . $filename)
+ ) {
+ $filename = $fontdir . $filename;
+ } else {
+ return PEAR::raiseError('Figlet font file "'
+ . $filename
+ . '" cannot be found', 1);
+ }
+ }
+
+ $this->font_comment = '';
+
+ // If Gzip compressed font
+ if (substr($filename, -3, 3) == '.gz') {
+ $filename = 'compress.zlib://' . $filename;
+ $compressed = true;
+
+ if (!function_exists('gzcompress')) {
+ return PEAR::raiseError('Cannot load gzip compressed fonts since'
+ . ' gzcompress() is not available.',
+ 3);
+ }
+ } else {
+ $compressed = false;
+ }
+
+ if (!($fp = fopen($filename, 'rb'))) {
+ return PEAR::raiseError('Cannot open figlet font file ' . $filename, 2);
+ }
+
+ if (!$compressed) {
+ /* ZIPed font */
+ if (fread($fp, 2) == 'PK') {
+ if (!function_exists('zip_open')) {
+ return PEAR::raiseError('Cannot load ZIP compressed fonts since'
+ . ' ZIP PHP extension is not available.',
+ 5);
+ }
+
+ fclose($fp);
+
+ if (!($fp = zip_open($filename))) {
+ return PEAR::raiseError('Cannot open figlet font file ' . $filename, 2);
+ }
+
+ $name = zip_entry_name(zip_read($fp));
+ zip_close($fp);
+
+ if (!($fp = fopen('zip://' . realpath($filename) . '#' . $name, 'rb'))) {
+ return PEAR::raiseError('Cannot open figlet font file ' . $filename, 2);
+ }
+
+ $compressed = true;
+ } else {
+ flock($fp, LOCK_SH);
+ rewind($fp);
+ }
+ }
+
+ // flf2a$ 6 5 20 15 3 0 143 229
+ // | | | | | | | | | |
+ // / / | | | | | | | \
+ // Signature / / | | | | | \ Codetag_Count
+ // Hardblank / / | | | \ Full_Layout
+ // Height / | | \ Print_Direction
+ // Baseline / \ Comment_Lines
+ // Max_Length Old_Layout
+
+
+ $header = explode(' ', fgets($fp, 2048));
+
+ if (substr($header[0], 0, 5) <> 'flf2a') {
+ return PEAR::raiseError('Unknown FIGlet font format.', 4);
+ }
+
+ @list ($this->hardblank, $this->height,,,
+ $this->oldlayout, $cmt_count, $this->rtol) = $header;
+
+ $this->hardblank = substr($this->hardblank, -1, 1);
+
+ for ($i = 0; $i < $cmt_count; $i++) {
+ $this->font_comment .= fgets($fp, 2048);
+ }
+
+ // ASCII charcters
+ for ($i = 32; $i < 127; $i++) {
+ $this->font[$i] = $this->_char($fp);
+ }
+
+ foreach (array(196, 214, 220, 228, 246, 252, 223) as $i) {
+ if ($loadgerman) {
+ $letter = $this->_char($fp);
+
+ // Invalid character but main font is loaded and I can use it
+ if ($letter === false) {
+ fclose($fp);
+ return true;
+ }
+
+ // Load if it is not blank only
+ if (trim(implode('', $letter)) <> '') {
+ $this->font[$i] = $letter;
+ }
+ } else {
+ $this->_skip($fp);
+ }
+ }
+
+ // Extented characters
+ for ($n = 0; !feof($fp); $n++) {
+ list ($i) = explode(' ', rtrim(fgets($fp, 1024)), 2);
+ if ($i == '') {
+ continue;
+ }
+
+ // If comment
+ if (preg_match('/^\-0x/i', $i)) {
+ $this->_skip($fp);
+ } else {
+ // If Unicode
+ if (preg_match('/^0x/i', $i)) {
+ $i = hexdec(substr($i, 2));
+ } else {
+ // If octal
+ if ($i{0} === '0' && $i !== '0' || substr($i, 0, 2) == '-0') {
+ $i = octdec($i);
+ }
+ }
+
+ $letter = $this->_char($fp);
+
+ // Invalid character but main font is loaded and I can use it
+ if ($letter === false) {
+ fclose($fp);
+ return true;
+ }
+
+ $this->font[$i] = $letter;
+ }
+ }
+
+ fclose($fp);
+ return true;
+ }
+
+
+
+ /**
+ * Print string using font loaded by LoadFont method
+ *
+ * @param string $str string for printing
+ * @param bool $inhtml (optional) output mode
+ * - HTML (true) or plain text (false)
+ *
+ * @access public
+ * @return string contains
+ */
+ function lineEcho($str, $inhtml = false)
+ {
+ $out = array();
+
+ for ($i = 0; $i<strlen($str); $i++) {
+ // Pseudo Unicode support
+ if (substr($str, $i, 2) == '%u') {
+ $lt = hexdec(substr($str, $i+2, 4));
+ $i += 5;
+ } else {
+ $lt = ord($str{$i});
+ }
+
+ $hb = preg_quote($this->hardblank, '/');
+ $sp = "$hb\\x00\\s";
+
+ // If chosen character not found try to use default
+ // If default character is not defined skip it
+
+ if (!isset($this->font[$lt])) {
+ if (isset($this->font[0])) {
+ $lt = 0;
+ } else {
+ continue;
+ }
+ }
+
+ for ($j = 0; $j < $this->height; $j++) {
+ $line = $this->font[$lt][$j];
+
+ // Replace hardblanks
+ if (isset($out[$j])) {
+ if ($this->rtol) {
+ $out[$j] = $line . $out[$j];
+ } else {
+ $out[$j] .= $line;
+ }
+ } else {
+ $out[$j] = $line;
+ }
+ }
+
+ if ($this->oldlayout > -1 && $i) {
+ // Calculate minimal distance between two last letters
+
+ $mindiff = -1;
+
+ for ($j = 0; $j < $this->height; $j++) {
+ if (preg_match("/\S(\s*\\x00\s*)\S/", $out[$j], $r)) {
+ if ($mindiff == -1) {
+ $mindiff = strlen($r[1]);
+ } else {
+ $mindiff = min($mindiff, strlen($r[1]));
+ }
+ }
+ }
+
+ // Remove spaces between two last letter
+ // dec mindiff for exclude \x00 symbol
+
+ if (--$mindiff > 0) {
+ for ($j = 0; $j < $this->height; $j++) {
+ if (preg_match("/\\x00(\s{0,{$mindiff}})/", $out[$j], $r)) {
+ $l = strlen($r[1]);
+ $b = $mindiff - $l;
+ $out[$j] = preg_replace("/\s{0,$b}\\x00\s{{$l}}/",
+ "\0",
+ $out[$j],
+ 1);
+ }
+ }
+ }
+ // Smushing
+
+ $this->smush_flag = 0;
+
+ for ($j = 0; $j < $this->height; $j++) {
+ $out[$j] = preg_replace_callback("#([^$sp])\\x00([^$sp])#",
+ array(&$this, '_rep'),
+ $out[$j]);
+ }
+
+ // Remove one space if smushing
+ // and remove all \x00 except tail whenever
+
+ if ($this->smush_flag) {
+ $pat = array("/\s\\x00(?!$)|\\x00\s/", "/\\x00(?!$)/");
+ $rep = array('', '');
+ } else {
+ $pat = "/\\x00(?!$)/";
+ $rep = '';
+ }
+
+ for ($j = 0; $j<$this->height; $j++) {
+ $out[$j] = preg_replace($pat, $rep, $out[$j]);
+ }
+ }
+ }
+
+ $trans = array("\0" => '', $this->hardblank => ' ');
+ $str = strtr(implode("\n", $out), $trans);
+
+ if ($inhtml) {
+ return '<nobr>'.
+ nl2br(str_replace(' ', '&nbsp;', htmlspecialchars($str))).
+ '</nobr>';
+ }
+
+ return $str;
+ }
+
+
+
+ /**
+ * It is preg_replace callback function that makes horizontal letter smushing
+ *
+ * @param array $r preg_replace matches array
+ *
+ * @return string
+ * @access private
+ */
+ function _rep($r)
+ {
+ if ($this->oldlayout & 1 && $r[1] == $r[2]) {
+ $this->smush_flag = 1;
+ return $r[1];
+ }
+
+ if ($this->oldlayout & 2) {
+ $symb = '|/\\[]{}()<>';
+
+ if ($r[1] == '_' && strpos($symb, $r[2]) !== false ||
+ $r[2] == '_' && strpos($symb, $r[1]) !== false) {
+ $this->smush_flag = 1;
+ return $r[1];
+ }
+ }
+
+ if ($this->oldlayout & 4) {
+ $classes = '|/\\[]{}()<>';
+
+ if (($left = strpos($classes, $r[1])) !== false) {
+ if (($right = strpos($classes, $r[2])) !== false) {
+ $this->smush_flag = 1;
+ return $right > $left ? $r[2] : $r[1];
+ }
+ }
+ }
+
+ if ($this->oldlayout & 8) {
+ $t = array('[' => ']', ']' => '[', '{' => '}', '}' => '{',
+ '(' => ')', ')' => '(');
+
+ if (isset($t[$r[2]]) && $r[1] == $t[$r[2]]) {
+ $this->smush_flag = 1;
+ return '|';
+ }
+ }
+
+ if ($this->oldlayout & 16) {
+ $t = array("/\\" => '|', "\\/" => 'Y', '><' => 'X');
+
+ if (isset($t[$r[1].$r[2]])) {
+ $this->smush_flag = 1;
+ return $t[$r[1].$r[2]];
+ }
+ }
+
+ if ($this->oldlayout & 32) {
+ if ($r[1] == $r[2] && $r[1] == $this->hardblank) {
+ $this->smush_flag = 1;
+ return $this->hardblank;
+ }
+ }
+
+ return $r[1]."\00".$r[2];
+ }
+
+
+
+ /**
+ * Function loads one character in the internal array from file
+ *
+ * @param resource &$fp handle of font file
+ *
+ * @return mixed lines of the character or false if foef occured
+ * @access private
+ */
+ function _char(&$fp)
+ {
+ $out = array();
+
+ for ($i = 0; $i < $this->height; $i++) {
+ if (feof($fp)) {
+ return false;
+ }
+
+ $line = rtrim(fgets($fp, 2048), "\r\n");
+ if (preg_match('/(.){1,2}$/', $line, $r)) {
+ $line = str_replace($r[1], '', $line);
+ }
+
+ $line .= "\x00";
+
+ $out[] = $line;
+ }
+
+ return $out;
+ }
+
+
+
+ /**
+ * Function for skipping one character in a font file
+ *
+ * @param resource &$fp handle of font file
+ *
+ * @return boolean always return true
+ * @access private
+ */
+ function _skip(&$fp)
+ {
+ for ($i = 0; $i<$this->height && !feof($fp); $i++) {
+ fgets($fp, 2048);
+ }
+
+ return true;
+ }
+}
+?>
diff --git a/externals/pear-figlet/docs/README.TXT b/externals/pear-figlet/docs/README.TXT
new file mode 100644
index 0000000000..544a5259a9
--- /dev/null
+++ b/externals/pear-figlet/docs/README.TXT
@@ -0,0 +1,26 @@
+FIGlet project home page: http://www.figlet.org/
+You can download FIGlet fonts from: ftp://ftp.figlet.org/pub/figlet/fonts/
+Project home page (Russian): http://bolknote.ru/files/figlet/
+
+Notes:
+1. There are no support flc and vertical smushing.
+2. But horizontal smushing is supported.
+3. Default character (0x00) is supported.
+4. German symbols are supported.
+5. It is supported Unicode as %uHHHH, HHHH - a hex code of a character (UCS-2).
+7. RTL and LTR text directions are suppoted.
+8. Windows and Unix font formats are supported.
+9. Incomplete fonts are supported (for example dwhistled.flf).
+10. Gzipped fonts supported as .flf.gz (zlib PHP extension required)
+11. ZIPed fonts supported (ZIP PHP extension required)
+ `
+Usage:
+
+ include_once 'Text/Figlet.php';
+
+ $figlet = new Text_Figlet();
+ if (PEAR::isError($error = $figlet->LoadFont('slant.flf'))) {
+ echo 'Error: ', $error->getMessage();
+ } else {
+ echo $figlet->LineEcho("Hello, world!");
+ }
\ No newline at end of file
diff --git a/externals/pear-figlet/docs/examples/hello_world.php b/externals/pear-figlet/docs/examples/hello_world.php
new file mode 100644
index 0000000000..849c997fb3
--- /dev/null
+++ b/externals/pear-figlet/docs/examples/hello_world.php
@@ -0,0 +1,35 @@
+<?php
+
+/* UTF-8 convert to FIGlet Unicode */
+/* iconv PHP module required */
+function utf8tofiglet($str)
+{
+ // escape %u
+ $str = str_replace('%u', sprintf('%%%%u%04X', ord('u')), $str);
+
+ if (function_exists('iconv')) {
+ $str = iconv('utf-8', 'ucs-2be', $str);
+ $out = '';
+
+ for ($i = 0, $len = strlen($str); $i<$len; $i++) {
+ $code = ord($str[$i++]) * 256 + ord($str[$i]);
+
+ $out .= $code < 128 ? $str[$i] : sprintf('%%u%04X', $code);
+ }
+
+ return $out;
+ }
+
+ return $str;
+}
+
+require_once 'Text/Figlet.php';
+
+$figlet = new Text_Figlet();
+$error = $figlet->LoadFont('makisupa.flf');
+if (PEAR::isError($error)) {
+ echo 'Error: ' . $error->getMessage() . "\n";
+} else {
+ echo $figlet->LineEcho(utf8tofiglet('Hello, world!')) . "\n";
+}
+?>
\ No newline at end of file
diff --git a/externals/pear-figlet/fonts/makisupa.flf b/externals/pear-figlet/fonts/makisupa.flf
new file mode 100644
index 0000000000..6ed7e1e6df
--- /dev/null
+++ b/externals/pear-figlet/fonts/makisupa.flf
@@ -0,0 +1,2877 @@
+flf2a_ 16 16 100 -1 3 0 0 73
+Converted Makisupa (http://www.greywolfwebworks.com/fonts.html)
+by Evgeny Stepanischev http://bolknote.ru/ 2010.07.08
+GPL and OFL license.
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_** _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##**## _@
+_##**## _@
+_##**## _@
+_##**## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ ##* ##* _@
+_*##**##** _@
+_######### _@
+_######### _@
+_ ##* ##* _@
+_*##**##** _@
+_######### _@
+_######### _@
+_ ##* ##* _@
+_ _@
+_@@
+_ *## _@
+_ *##* _@
+_*#####* _@
+_#######* _@
+_###**##* _@
+_###* ##* _@
+_######* _@
+_*###### _@
+_ ***##* _@
+_###**##* _@
+_#######* _@
+_*#####* _@
+_ *###* _@
+_ *## _@
+_ _@
+_@@
+_*##* #** _@
+_#### *### _@
+_#### #### _@
+_####*###* _@
+_######## _@
+_*######* _@
+_ **###* _@
+_ *###* _@
+_ *###* _@
+_ *######* _@
+_*######## _@
+_*##*##*## _@
+_###*##### _@
+_*#* *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *####* _@
+_ ######* _@
+_ ###*##* _@
+_ ###*##* _@
+_ *####* _@
+_*#####*##* _@
+_#########* _@
+_##* ####* _@
+_###*#####* _@
+_*######### _@
+_ *####**#* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_###** _@
+_*#### _@
+_ *### _@
+_ _@
+_ _@
+_@@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ *##* _@
+_*###* _@
+_###* _@
+_##* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ *# _@
+_#### _@
+_*### _@
+_#### _@
+_ *# _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***##**** _@
+_######### _@
+_######### _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_*# _@
+_** _@
+_#* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_********* _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_** _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ *#* _@
+_ *### _@
+_ *##* _@
+_ *###* _@
+_ *##* _@
+_ *### _@
+_ ###* _@
+_ *### _@
+_ ###* _@
+_ *##* _@
+_*###* _@
+_*##* _@
+_###* _@
+_*#* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##*## *## _@
+_##*## *## _@
+_##*** *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_*###* _@
+_####* _@
+_**##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_**###** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_ *### _@
+_ *######* _@
+_*######* _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_ *### _@
+_ #####* _@
+_ #####* _@
+_ ***### _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_ *##* _@
+_ *###* _@
+_ *####* _@
+_ *#####* _@
+_ *######* _@
+_ *####*##* _@
+_ ####**##* _@
+_*########* _@
+_*########* _@
+_ *##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_#######* _@
+_########* _@
+_******### _@
+_ *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_ *#* _@
+_ *## _@
+_ ### _@
+_ *##* _@
+_ *## _@
+_ ##* _@
+_*######* _@
+_########* _@
+_######### _@
+_##* *### _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_******### _@
+_ ###* _@
+_ *### _@
+_ *##* _@
+_ ###* _@
+_ *##* _@
+_ *##* _@
+_ ### _@
+_ *##* _@
+_ ### _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_###* *### _@
+_*#######* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_###**#### _@
+_*######## _@
+_ *######* _@
+_ *### _@
+_ *##* _@
+_ *###* _@
+_ *### _@
+_ ###* _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_** _@
+_ _@
+_ _@
+_ _@
+_** _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ _@
+_** _@
+_##* _@
+_##* _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_*# _@
+_** _@
+_#* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ *#* _@
+_ *### _@
+_ *###* _@
+_*###* _@
+_###* _@
+_###* _@
+_*###* _@
+_ *###* _@
+_ *### _@
+_ *#* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_********* _@
+_######### _@
+_######### _@
+_ _@
+_********* _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_*#* _@
+_###* _@
+_*###* _@
+_ *###* _@
+_ *### _@
+_ *### _@
+_ *###* _@
+_*###* _@
+_###* _@
+_*#* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_ *### _@
+_ *####* _@
+_ *####* _@
+_ *###** _@
+_ *##* _@
+_ ** _@
+_ ** _@
+_ *## _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ *####** _@
+_ *##*#*##* _@
+_ ##**#**#* _@
+_*#* #*# *# _@
+_*# ### *# _@
+_*#* #*# *# _@
+_ ## # #*## _@
+_ *### ###* _@
+_ *#####* _@
+_ *** _@
+_ _@
+_@@
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_#######* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_########* _@
+_#######* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* _@
+_##* _@
+_##* _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_######* _@
+_#######* _@
+_###*####* _@
+_##* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_###*####* _@
+_#######* _@
+_######* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_#######* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_#######* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* _@
+_##* ##### _@
+_##* ##### _@
+_##* **### _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*######## _@
+_ *####### _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_######### _@
+_######### _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_ *##### _@
+_ *##### _@
+_ **### _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* ### _@
+_##* *##* _@
+_##* ###* _@
+_##* *##* _@
+_#######* _@
+_####### _@
+_###*###* _@
+_##* *### _@
+_##* *##* _@
+_##* ### _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_##* *## _@
+_### ### _@
+_###* *### _@
+_####*#### _@
+_######### _@
+_######### _@
+_##*###*## _@
+_##*###*## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_##* *## _@
+_### *## _@
+_###* *## _@
+_####* *## _@
+_####* *## _@
+_#####**## _@
+_######*## _@
+_##*###### _@
+_##**##### _@
+_##* *#### _@
+_##* *#### _@
+_##* *### _@
+_##* ### _@
+_##* *## _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_#######* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_########* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *#### _@
+_##* ##### _@
+_####*#### _@
+_*######## _@
+_ *######* _@
+_ _@
+_@@
+_#######* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ *#####* _@
+_ *#######* _@
+_ ###***### _@
+_ ##* *## _@
+_ ##* *## _@
+_ ###* _@
+_ *######* _@
+_ *######* _@
+_ ****### _@
+_ ##* *## _@
+_ ##* *## _@
+_ ###***### _@
+_ *#######* _@
+_ *#####* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_### ### _@
+_*##* *##* _@
+_ ###*### _@
+_ *#####* _@
+_ ##### _@
+_ *###* _@
+_ ##* _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##*###*## _@
+_##*###*## _@
+_######### _@
+_######### _@
+_####*#### _@
+_###* *### _@
+_### ### _@
+_##* *## _@
+_ _@
+_@@
+_##* *## _@
+_### ### _@
+_###* *### _@
+_*### ###* _@
+_ ###*### _@
+_ *#####* _@
+_ ##### _@
+_ ##### _@
+_ *#####* _@
+_ ###*### _@
+_*### ###* _@
+_###* *### _@
+_### ### _@
+_##* *## _@
+_ _@
+_@@
+_##* ##* _@
+_##* ##* _@
+_##* ##* _@
+_##* *##* _@
+_### *##* _@
+_###**###* _@
+_*######* _@
+_ *####* _@
+_ *##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_*****###* _@
+_ *###* _@
+_ ###* _@
+_ *### _@
+_ ###* _@
+_ *### _@
+_ ###* _@
+_ *### _@
+_*###* _@
+_*###***** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_###** _@
+_#####* _@
+_#####* _@
+_ _@
+_ _@
+_@@
+_*#* _@
+_###* _@
+_*##* _@
+_*###* _@
+_ *##* _@
+_ ###* _@
+_ *### _@
+_ ###* _@
+_ *### _@
+_ *##* _@
+_ *###* _@
+_ *##* _@
+_ *### _@
+_ *#* _@
+_ _@
+_@@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***##* _@
+_#####* _@
+_#####* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ *#* _@
+_*###* _@
+_##*## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_********** _@
+_########## _@
+_########## _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_*#* _@
+_###* _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_#####* _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##**### _@
+_##* *## _@
+_##**### _@
+_######* _@
+_#####* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* _@
+_##* _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_#####* _@
+_######* _@
+_##*#### _@
+_##* ### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* ### _@
+_##*#### _@
+_######* _@
+_#####* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##*#### _@
+_##*#### _@
+_##***## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *##### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####### _@
+_####### _@
+_##***## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *#### _@
+_ *#### _@
+_ ***## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##**### _@
+_##**##* _@
+_#####* _@
+_#####* _@
+_##*### _@
+_##**##* _@
+_##* ### _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_### ### _@
+_###*### _@
+_####### _@
+_####### _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_### *## _@
+_###**## _@
+_####*## _@
+_####*## _@
+_####### _@
+_##*#### _@
+_##*#### _@
+_##**### _@
+_##* ### _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_#####* _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##**** _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_##*#### _@
+_####### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_#####* _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##**### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_#####* _@
+_*#####* _@
+_ ***### _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ ##### _@
+_ *###* _@
+_ *#* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####### _@
+_####### _@
+_####### _@
+_####### _@
+_###*### _@
+_### ### _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_*##*##* _@
+_*#####* _@
+_ ##### _@
+_ *###* _@
+_ ##### _@
+_*#####* _@
+_*##*##* _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_### ##* _@
+_### ##* _@
+_### *##* _@
+_###**##* _@
+_*###### _@
+_ *####* _@
+_ *##* _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_####### _@
+_****##* _@
+_ ###* _@
+_ *##* _@
+_ ### _@
+_ *##* _@
+_*### _@
+_*##**** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+_ ##* _@
+_ *##* _@
+_*###* _@
+_*###* _@
+_ *##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ####* _@
+_ *#### _@
+_ *### _@
+_ _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_ _@
+_@@
+_ ##* _@
+_ ##* _@
+_ ###* _@
+_ ###* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ *##* _@
+_*###* _@
+_###* _@
+_##* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ **** _@
+_*#####*#* _@
+_######### _@
+_*****###* _@
+_ _@
+_@@
+_ *##* _@
+_ *####* _@
+_*######* _@
+_#### ###* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_###***##* _@
+_########* _@
+_########* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_### ##* _@
+_ _@
+_@@
+_ *####* _@
+_*######* _@
+_####*###* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_###* *##* _@
+_####*###* _@
+_*######* _@
+_ *####* _@
+_ _@
+_@@
+_### ##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_###* *##* _@
+_####*###* _@
+_*######* _@
+_ *####* _@
+_ _@
+_@@
+_ _@
+_ *# *# _@
+_ * * _@
+_ *###* _@
+_*#####* _@
+_####### _@
+_### *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ *# *# _@
+_ * * _@
+_ *####* _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
+_ _@
+_ *# *# _@
+_ * * _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
+_##* *## _@
+_##* *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_##* *###* _@
+_##**###* _@
+_ *###* _@
+_ ###* _@
+_ *#* _@
+_ _@
+_ _@
+_@@
+0x45e EXT
+_ *## _@
+_ *## _@
+_ *####* _@
+_#######* _@
+_###**##* _@
+_### ##* _@
+_### _@
+_### _@
+_### ##* _@
+_###**##* _@
+_#######* _@
+_*#####* _@
+_ *#### _@
+_ *## _@
+_ _@
+_@@
+0x408 EXT
+_ *#####* _@
+_ *#######* _@
+_ ###***### _@
+_ ##* *## _@
+_ ##* *## _@
+_*##* _@
+_####### _@
+_####### _@
+_*###*** _@
+_ ##* _@
+_ ##* _@
+_*###*** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x490 EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_### *### _@
+_###**#### _@
+_*####### _@
+_ *##### _@
+_ *### _@
+_ ###### _@
+_ ###### _@
+_ **##** _@
+_ ###### _@
+_ ###### _@
+_ **##** _@
+_ _@
+_@@
+0xa4 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##**## _@
+_###### _@
+_*#**#* _@
+_*#**#* _@
+_###### _@
+_##**## _@
+_ _@
+_@@
+0x2030 EXT
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ #****# _@
+_ ###### _@
+_ _@
+_@@
+0x457 EXT
+_ ##* _@
+_ ##* _@
+_ ** _@
+_ *** _@
+_ *##* _@
+_ *###* _@
+_ *##### _@
+_*#####* _@
+_###*** _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x40e EXT
+_##* _@
+_##* _@
+_** _@
+_ _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+0xa7 EXT
+_### *## _@
+_####* _@
+_*#####* _@
+_####### _@
+_##***## _@
+_##***## _@
+_####### _@
+_*#####* _@
+_ *#### _@
+_##**### _@
+_###*### _@
+_*#####* _@
+_ *####* _@
+_ _@
+_ _@
+_@@
+0xb6 EXT
+_ *############# _@
+_ *############## _@
+_*########***###* _@
+_*########* ##* _@
+_*########* ##* _@
+_*########* ##* _@
+_ *#######* ##* _@
+_ *######* ##* _@
+_ *##* ##* _@
+_ ##* ##* _@
+_ ##* ##* _@
+_ ##* ##* _@
+_ ##* ##* _@
+_ ##* ##* _@
+_ _@
+_@@
+0xb5 EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_########* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_ _@
+_@@
+0xa9 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ *####** _@
+_ *#######* _@
+_ ##*#####* _@
+_*#**#**#*# _@
+_*# *# ***# _@
+_*#**#**#*# _@
+_ ## ###*## _@
+_ *##***##* _@
+_ *#####* _@
+_ *** _@
+_ _@
+_@@
+0xae EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ *####** _@
+_ *##***##* _@
+_ ##*###*#* _@
+_*#* #*# *# _@
+_*# ### *# _@
+_*#* #*# *# _@
+_ ## # #*## _@
+_ *##* ###* _@
+_ *#####* _@
+_ *** _@
+_ _@
+_@@
+0x45b EXT
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ #****# _@
+_ ###### _@
+_ _@
+_@@
+0x40a EXT
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ #****# _@
+_ ###### _@
+_ _@
+_@@
+0x42f EXT
+_##* *## _@
+_##* *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_##* *###* _@
+_##**###* _@
+_ *###* _@
+_ ###* _@
+_ *#* _@
+_ _@
+_ _@
+_@@
+0x410 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x411 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x412 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x413 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x414 EXT
+_ *##* _@
+_ *####* _@
+_*######* _@
+_#### ###* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_###***##* _@
+_########* _@
+_########* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_### ##* _@
+_ _@
+_@@
+0x415 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x416 EXT
+_ *###*######### _@
+_ *############## _@
+_*###*####******* _@
+_###* *### _@
+_##* *## _@
+_##* *##* _@
+_##* *####### _@
+_###***######## _@
+_#########***** _@
+_######### _@
+_##* *## _@
+_##* *##******* _@
+_##* *######### _@
+_##* *######### _@
+_ _@
+_@@
+0x417 EXT
+_##* *##* _@
+_##* ##* _@
+_##* ##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* ##* _@
+_##* *##* _@
+_###**###* _@
+_*######* _@
+_ *####* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_ _@
+_@@
+0x418 EXT
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_#######* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x419 EXT
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_#######* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41a EXT
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_####### _@
+_####### _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41b EXT
+_#########* _@
+_#########* _@
+_###******* _@
+_### _@
+_### _@
+_###* _@
+_######## _@
+_######## _@
+_###***** _@
+_### _@
+_### _@
+_###******* _@
+_#########* _@
+_#########* _@
+_ _@
+_@@
+0x41c EXT
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41d EXT
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41e EXT
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41f EXT
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x420 EXT
+_ *#####* _@
+_ *######* _@
+_ *##**###* _@
+_ *## *###* _@
+_ *## *##* _@
+_ *## ##* _@
+_###### ##* _@
+_###### ##* _@
+_**##** ##* _@
+_ *## *##* _@
+_ *## *###* _@
+_ *##**###* _@
+_ *######* _@
+_ *#####* _@
+_ _@
+_@@
+0x421 EXT
+_##* *## _@
+_### *## _@
+_###* *## _@
+_####* *## _@
+_####* *## _@
+_#####**## _@
+_######*## _@
+_##*###### _@
+_##**##### _@
+_##* ##### _@
+_##* *#### _@
+_##* *### _@
+_##* ### _@
+_##* *## _@
+_ _@
+_@@
+0x422 EXT
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x423 EXT
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x424 EXT
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x425 EXT
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x426 EXT
+_ *####* _@
+_*######* _@
+_####*###* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_###* *##* _@
+_####*###* _@
+_*######* _@
+_ *####* _@
+_ _@
+_@@
+0x427 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_*#* *#* _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_*#* *#* _@
+_ _@
+_@@
+0x428 EXT
+_ *######* _@
+_*######## _@
+_###**#### _@
+_##* *#### _@
+_##* ##### _@
+_##**##### _@
+_##*###### _@
+_######*## _@
+_#####**## _@
+_##### *## _@
+_####* *## _@
+_####**### _@
+_########* _@
+_*######* _@
+_ _@
+_@@
+0x429 EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x42a EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x42b EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x42c EXT
+_### ##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_###* *##* _@
+_####*###* _@
+_*######* _@
+_ *####* _@
+_ _@
+_@@
+0x430 EXT
+_ ##* _@
+_ ### _@
+_ ** _@
+_ *###* _@
+_*#####* _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x431 EXT
+_ *## _@
+_ ### _@
+_ ** _@
+_ *###* _@
+_*#####* _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x432 EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x433 EXT
+_####### _@
+_*#*#### _@
+_ *** _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x434 EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_ *###* _@
+_*#####* _@
+_####### _@
+_### *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x435 EXT
+_ *## _@
+_ *## _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* ## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* ## _@
+_##* ## _@
+_ _@
+_@@
+0x436 EXT
+_ _@
+_ _@
+_ _@
+_ *##########* _@
+_*###########* _@
+_###*###***** _@
+_##* *##* _@
+_##* ###### _@
+_##***###### _@
+_#######**** _@
+_#######* _@
+_##* *##***** _@
+_##* #######* _@
+_##* #######* _@
+_ _@
+_@@
+0x437 EXT
+_ *####* _@
+_*###### _@
+_###*###* _@
+_### *##* _@
+_### ##* _@
+_### _@
+_### _@
+_### ##* _@
+_###**##* _@
+_#######* _@
+_ *####* _@
+_ *## _@
+_ *## _@
+_ _@
+_ _@
+_@@
+0x438 EXT
+_ ##* _@
+_ *## _@
+_ ** _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+0x439 EXT
+_ *## _@
+_ ##* _@
+_ ** _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+0x43a EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+0x43b EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+0x43c EXT
+_ ##* _@
+_ *## _@
+_ ** _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x43d EXT
+_ *## _@
+_ ##* _@
+_ ** _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x43e EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x43f EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x440 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ ## * _@
+_ *# ** _@
+_*#**#*#*# * _@
+_ #**#####*# _@
+_ # ######## _@
+_ ##*##**### _@
+_ *### _@
+_ _@
+_ _@
+_@@
+0x441 EXT
+_####### _@
+_*#*#### _@
+_ *** _@
+_##* *## _@
+_### *## _@
+_###**## _@
+_####*## _@
+_####*## _@
+_####### _@
+_##*#### _@
+_##*#### _@
+_##**### _@
+_##* ### _@
+_##* *## _@
+_ _@
+_@@
+0x442 EXT
+_ ##* _@
+_ *## _@
+_ ** _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x443 EXT
+_ *## _@
+_ ##* _@
+_ ** _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x444 EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_ *#### _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *#### _@
+_ _@
+_@@
+0x445 EXT
+_####### _@
+_*#*#### _@
+_ *** _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x446 EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_ *####* _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
+0x447 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ ##* _@
+_ ##* _@
+_ *** _@
+_********* _@
+_######### _@
+_######### _@
+_ *** _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+0x448 EXT
+_ _@
+_ _@
+_ _@
+_ *##### _@
+_*###### _@
+_###*### _@
+_##*#### _@
+_##*#### _@
+_####### _@
+_####*## _@
+_####*## _@
+_###*### _@
+_######* _@
+_#####* _@
+_ _@
+_@@
+0x449 EXT
+_ ##* _@
+_ *## _@
+_ ** _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x44a EXT
+_ *## _@
+_ ##* _@
+_ ** _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x44b EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *#### _@
+_ _@
+_@@
+0x44c EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
diff --git a/resources/figlet/custom/README b/resources/figlet/custom/README
new file mode 100644
index 0000000000..c667bb20e3
--- /dev/null
+++ b/resources/figlet/custom/README
@@ -0,0 +1,2 @@
+Add Figlet ".flf" font files here to make them available to the "figlet"
+Remarkup interpreter.

File Metadata

Mime Type
application/octet-stream
Expires
Thu, May 9, 5:43 AM (2 d)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6261709
Default Alt Text
(1 MB)

Event Timeline