[SCM] obs-studio/master: New upstream version 18.0.1+dfsg1

sramacher at users.alioth.debian.org sramacher at users.alioth.debian.org
Wed Apr 19 20:07:29 UTC 2017


The following commit has been merged in the master branch:
commit 4e97ab5c98120107052a23b5d6777e5fd1d136e0
Author: Sebastian Ramacher <sramacher at debian.org>
Date:   Wed Apr 19 22:06:39 2017 +0200

    New upstream version 18.0.1+dfsg1

diff --git a/deps/libcaption/.gitignore b/deps/libcaption/.gitignore
deleted file mode 100644
index d52b1ec..0000000
--- a/deps/libcaption/.gitignore
+++ /dev/null
@@ -1,57 +0,0 @@
-# Object files
-*.o
-*.ko
-*.obj
-*.elf
-
-# Precompiled Headers
-*.gch
-*.pch
-
-# Libraries
-*.lib
-*.a
-*.la
-*.lo
-
-# Shared objects (inc. Windows DLLs)
-*.dll
-*.so
-*.so.*
-*.dylib
-
-# Executables
-*.exe
-*.out
-*.app
-*.i*86
-*.x86_64
-*.hex
-
-# Debug files
-*.dSYM/
-
-# cmake files
-Makefile
-CMakeFiles
-CMakeCache.txt
-cmake_install.cmake
-
-# Bin
-scc2srt
-srt2vtt
-flv2srt
-ts2srt
-flv+srt
-srtdump
-party
-rtmpspit
-
-# Autogenerated files
-# src/eia608.c
-
-# Mac
-.DS_Store
-
-#Doc
-Doxyfile
diff --git a/deps/libcaption/CMakeLists.txt b/deps/libcaption/CMakeLists.txt
deleted file mode 100644
index 638d532..0000000
--- a/deps/libcaption/CMakeLists.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-project(libcaption)
-add_definitions(-D__STDC_CONSTANT_MACROS)
-if (WIN32)
-  add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-endif()
-
-# Don't need to prefix local includes with "caption/*"
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/caption)
-
-set(CAPTION_SOURCES
-  src/utf8.c
-  src/srt.c
-  src/scc.c
-  src/avc.c
-  src/xds.c
-  src/cea708.c
-  src/caption.c
-  src/eia608_charmap.c
-  src/eia608.c
-)
-
-set(CAPTION_HEADERS
-  caption/utf8.h
-  caption/sei.h
-  caption/scc.h
-  caption/avc.c
-  caption/cea708.h
-  caption/eia608.h
-  caption/caption.h
-  caption/eia608_charmap.h
-)
-
-add_library(caption STATIC ${CAPTION_SOURCES})
diff --git a/deps/libcaption/Doxyfile.in b/deps/libcaption/Doxyfile.in
deleted file mode 100644
index 6fd4ebb..0000000
--- a/deps/libcaption/Doxyfile.in
+++ /dev/null
@@ -1,2406 +0,0 @@
-# Doxyfile 1.8.11
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
-#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all text
-# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
-# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
-# for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
-
-PROJECT_NAME           = "libcaption"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER         =
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          =
-
-# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
-# in the documentation. The maximum height of the logo should not exceed 55
-# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
-# the logo to the output directory.
-
-PROJECT_LOGO           =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = ./docs
-
-# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
-# directories (in 2 levels) under the output directory of each output format and
-# will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system.
-# The default value is: NO.
-
-CREATE_SUBDIRS         = YES
-
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-# characters to appear in the names of generated files. If set to NO, non-ASCII
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-# U+3044.
-# The default value is: NO.
-
-ALLOW_UNICODE_NAMES    = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
-# Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF       =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES        = YES
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
-# page for each member. If set to NO, the documentation of a member will be part
-# of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:\n"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines.
-
-ALIASES                =
-
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
-# A mapping has the form "name=value". For example adding "class=itcl::class"
-# will allow you to use the command class in the itcl::class meaning.
-
-TCL_SUBST              =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
-# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
-# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
-# Fortran. In the later case the parser tries to guess whether the code is fixed
-# or free formatted code, this is the default for Fortran type files), VHDL. For
-# instance to make doxygen treat .inc files as Fortran files (default is PHP),
-# and .f files as C (default is Fortran), use: inc=Fortran f=C.
-#
-# Note: For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen.
-
-EXTENSION_MAPPING      =
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See http://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT       = YES
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by putting a % sign in front of the word or
-# globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT       = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# If one adds a struct or class to a group and this option is enabled, then also
-# any nested class or struct is added to the same group. By default this option
-# is disabled and one has to add nested compounds explicitly via \ingroup.
-# The default value is: NO.
-
-GROUP_NESTED_COMPOUNDS = NO
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO,
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. If set to YES, local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO, only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO, these classes will be included in the various overviews. This option
-# has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# (class|struct|union) declarations. If set to NO, these declarations will be
-# included in the documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO, these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES, upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-# The default value is: system dependent.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES, the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-# grouped member an include statement to the documentation, telling the reader
-# which file to include in order to use the member.
-# The default value is: NO.
-
-SHOW_GROUPED_MEMB_INC  = NO
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order. Note that
-# this will also influence the order of the classes in the class list.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
-# list. This list is created by putting \todo commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
-# list. This list is created by putting \test commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES, the
-# list will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES        = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE            =
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. See also \cite for info how to create references.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS               = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some parameters
-# in a documented function, or documenting parameters that don't exist or using
-# markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO, doxygen will only warn about wrong or incomplete
-# parameter documentation, but not about the absence of documentation.
-# The default value is: NO.
-
-WARN_NO_PARAMDOC       = NO
-
-# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
-# a warning is encountered.
-# The default value is: NO.
-
-WARN_AS_ERROR          = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr).
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
-# Note: If this tag is empty the current directory is searched.
-
-INPUT                  = @CMAKE_CURRENT_SOURCE_DIR@/include @CMAKE_CURRENT_SOURCE_DIR@/examples
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see: http://www.gnu.org/software/libiconv) for the list of
-# possible encodings.
-# The default value is: UTF-8.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# read by doxygen.
-#
-# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
-# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
-# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
-# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl,
-# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js.
-
-FILE_PATTERNS          = *.h *.c *.re2c
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE                =
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH           =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS       =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE =
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# function all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-SOURCE_TOOLTIPS        = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see http://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
-ALPHABETICAL_INDEX     = YES
-
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-# which the alphabetical index list will be split.
-# Minimum value: 1, maximum value: 20, default value: 5.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all classes will
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
-# while generating the index headers.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# cascading style sheets that are included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list). For an example see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET  =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES       =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the style sheet and background images according to
-# this color. Hue is specified as an angle on a colorwheel, see
-# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_HUE    = 220
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use grayscales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_SAT    = 100
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_GAMMA  = 80
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to YES can help to show when doxygen was last run and thus if the
-# documentation is up to date.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP         = NO
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 100
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see: http://developer.apple.com/tools/xcode/), introduced with
-# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
-# Makefile in the HTML output directory. Running make will produce the docset in
-# that directory and running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-# for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET        = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
-# Windows.
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP      = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE               =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler (hhc.exe). If non-empty,
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION           =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated
-# (YES) or that it should be included in the master .chm file (NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI           = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING     =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated
-# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
-# enables the Previous and Next buttons.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
-# folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# The QHG_LOCATION tag can be used to specify the location of Qt's
-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
-# generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX          = NO
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine-tune the look of the index. As an example, the default style
-# sheet generated by doxygen has an example that shows how to put an image at
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-# the same information as the tab index, you could consider setting
-# DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW      = NO
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH         = 250
-
-# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT    = YES
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# http://www.mathjax.org) which uses client side Javascript for the rendering
-# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/latest/output.html) for more details.
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility), NativeMML (i.e. MathML) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT         = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from http://www.mathjax.org before deployment.
-# The default value is: http://cdn.mathjax.org/mathjax/latest.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS     =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE       =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = YES
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = YES
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. The package can be specified just
-# by its name or with the correct syntax as to be used with the LaTeX
-# \usepackage command. To get the times font for instance you can specify :
-# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
-# To use the option intlimits with the amsmath package you can specify:
-# EXTRA_PACKAGES=[intlimits]{amsmath}
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES, to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_TIMESTAMP        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sf.net) file that captures the
-# structure of the code including all documentation. Note that this feature is
-# still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = YES
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command. Disabling a call graph can be
-# accomplished by means of the command \hidecallgraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command. Disabling a caller graph can be
-# accomplished by means of the command \hidecallergraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. For an explanation of the image formats see the section
-# output formats in the documentation of the dot tool (Graphviz (see:
-# http://www.graphviz.org/)).
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
-# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
-# png:gdiplus:gdiplus.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES
diff --git a/deps/libcaption/LICENSE.txt b/deps/libcaption/LICENSE.txt
deleted file mode 100644
index 43df7fb..0000000
--- a/deps/libcaption/LICENSE.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License
-
-Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/deps/libcaption/README.md b/deps/libcaption/README.md
deleted file mode 100644
index 160a956..0000000
--- a/deps/libcaption/README.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# version
-v0.6
-Matthew Szatmary m3u8 at twitch.tv / matt at szatmary.org
-
-# libcaption
-
-libcaption is a small library written in C to aid in the creating and parsing of closed caption data for use in the twitch player, open sourced to use within community developed broadcast tools. To maintain consistency across platforms libcaption aims to implement a subset of EIA608, CEA708 as supported by the Apple iOS platform.
-
-608 support is currently limited to encoding and decoding the necessary control and preamble codes as well as support for the Basic North American, Special North American and Extended Western European character sets.
-
-708 support is limited to encoding the 608 data in NTSC field 1 user data type structure.
-
-In addition, utility functions to create h.264 SEI (Supplementary enhancement information) NALUs (Network Abstraction Layer Unit) for inclusion into an h.264 elementary stream are provided.
-
-H.264 utility functions are limited to wrapping the 708 payload into a SEI NALU. This is accomplished by prepending the 708 payload with 3 bytes (nal_unit_type = 6, payloadType = 4, and PayloadSize = variable), and appending a stop bit encoded into a full byte (with a value of 127). In addition if the 708 payload contains an emulated start code, a three byte sequence equaling 0,0,1 an emulation prevention byte (3) is inserted. Functions to reverse this operation are also provided.
-
-## Characters
-| | | | | | | | | | | | | | | | | |
-|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
-|BNA| |!|"|#|$|%|&|’|(|)|á|+|,|-|.|/|
-|BNA|0|1|2|3|4|5|6|7|8|9|:|;|<|=|>|?|
-|BNA|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|
-|BNA|P|Q|R|S|T|U|V|W|X|Y|Z|[|é|]|í|ó|
-|BNA|ú|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|
-|BNA|p|q|r|s|t|u|v|w|x|y|z|ç|÷|Ñ|ñ|█|
-|SNA|®|°|½|¿|™|¢|£|♪|à| |è|â|ê|î|ô|û|
-|WES|Á|É|Ó|Ú|Ü|ü|‘|¡|*|'|—|©|℠|•|“|”|
-|WEF|À|Â|Ç|È|Ê|Ë|ë|Î|Ï|ï|Ô|Ù|ù|Û|«|»|
-|WEP|Ã|ã|Í|Ì|ì|Ò|ò|Õ|õ|{|}|\\|^|_|\||~|
-|WEG|Ä|ä|Ö|ö|ß|¥|¤|¦|Å|å|Ø|ø|┌|┐|└|┘|
-
-* BNA = Basic North American character set
-* SNA = Special North American character set
-* WES = Extended Western European character set : Extended Spanish/Miscellaneous
-* WEF = Extended Western European character set : Extended French
-* WEP = Extended Western European character set : Portuguese
-* WEG = Extended Western European character set : German/Danish
-
-
-------
-eia608_screen_t is the default internal representation. `screens` can be
-converted to and from SEI messages 608/708 buffers and SRT files
-
-## JSON format
-A JSON rendered format is provided for convenience of integration. The JSON
-format is as follows:
-
-```
-{
-    "format":  "eia608",
-    "mode":    "pop-on",
-    "roll-up": 0,
-    "data": [
-        { "row":0, "col":0, "char":"A", "style":"white" },
-        { "row":0, "col":1, "char":"B", "style":"white" },
-        // ...
-    ]
-}
-```
-
-### `format`
-The only current valid value is `"eia608"`. This field exists for
-future expansion.  Any values other than `"eia608"`, and the object should be
-ignored for now.
-
-### `mode`
-Defines the method by which screen contents are adjusted in response to
-new data, such as content in excess of the normal grid size.
-
-Possible modes are:
-
-`"clear"`: Generated when a screen is initialized, but not entered a "loading"
-state. `"clear"` mode  occurs frequently when the display is to be erased.
-
-`"pop-on"`: Normally used for pre recorded content where. A pop-on screen should
-completely replace all previous screen contents.
-
-`"paint-on"`: Normally used for live content. In this mode, new characters
-appear one or two at a time. The `data` array does include the complete state of
-the screen. In practice, it may not be different that `"pop-on"`.
-
-An internal "loading" mode also exists.
-
-### `roll-up`
-Normally used for live content such as news broadcasts. Text is moved up the
-screen as new rows appear. The number of rows to be displayed is also encoded in
-the JSON  key `"roll-up"` where value is an integer of `0`, `1`, `2`, `3`, or `4`.
-Like `"paint-on"`, the `data` array does include the complete state of the screen.
-
-### `data`
-Contains a object for every character to be displayed. The screen is a grid of
-15 rows and 32 columns. The position of the character is available in the `row`
-and `col` fields. The character itself is in the `char` field. The full
-character set is available in the document, but any valid UTF-8 should be
-supported for future. The style field will contain one of the following values:
-
-`"white"`, `"green"`, `"blue"`, `"cyan"`, `"red"`, `"yellow"`, `"magenta"`, `"italics"`
-
-Characters with the `"italics"` style should be displayed in white.
diff --git a/deps/libcaption/caption/avc.h b/deps/libcaption/caption/avc.h
deleted file mode 100644
index d4d4ed7..0000000
--- a/deps/libcaption/caption/avc.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_AVC_H
-#define LIBCAPTION_AVC_H
-#include "cea708.h"
-#include "caption.h"
-#include <float.h>
-////////////////////////////////////////////////////////////////////////////////
-#define MAX_NALU_SIZE (4*1024*1024)
-typedef struct {
-    size_t size;
-    uint8_t data[MAX_NALU_SIZE];
-} avcnalu_t;
-
-void avcnalu_init (avcnalu_t* nalu);
-int avcnalu_parse_annexb (avcnalu_t* nalu, const uint8_t** data, size_t* size);
-static inline uint8_t  avcnalu_type (avcnalu_t* nalu) { return nalu->data[0] & 0x1F; }
-static inline uint8_t* avcnalu_data (avcnalu_t* nalu) { return &nalu->data[0]; }
-static inline size_t   avcnalu_size (avcnalu_t* nalu) { return nalu->size; }
-////////////////////////////////////////////////////////////////////////////////
-typedef struct _sei_message_t sei_message_t;
-
-typedef enum {
-    sei_type_buffering_period = 0,
-    sei_type_pic_timing = 1,
-    sei_type_pan_scan_rect = 2,
-    sei_type_filler_payload = 3,
-    sei_type_user_data_registered_itu_t_t35 = 4,
-    sei_type_user_data_unregistered = 5,
-    sei_type_recovery_point = 6,
-    sei_type_dec_ref_pic_marking_repetition = 7,
-    sei_type_spare_pic = 8,
-    sei_type_scene_info = 9,
-    sei_type_sub_seq_info = 10,
-    sei_type_sub_seq_layer_characteristics = 11,
-    sei_type_sub_seq_characteristics = 12,
-    sei_type_full_frame_freeze = 13,
-    sei_type_full_frame_freeze_release = 14,
-    sei_type_full_frame_snapshot = 15,
-    sei_type_progressive_refinement_segment_start = 16,
-    sei_type_progressive_refinement_segment_end = 17,
-    sei_type_motion_constrained_slice_group_set = 18,
-    sei_type_film_grain_characteristics = 19,
-    sei_type_deblocking_filter_display_preference = 20,
-    sei_type_stereo_video_info = 21,
-} sei_msgtype_t;
-////////////////////////////////////////////////////////////////////////////////
-// time in seconds
-typedef struct  {
-    double dts;
-    double cts;
-    sei_message_t* head;
-    sei_message_t* tail;
-} sei_t;
-
-/*! \brief
-    \param
-*/
-void sei_init (sei_t* sei);
-/*! \brief
-    \param
-*/
-void sei_free (sei_t* sei);
-/*! \brief
-    \param
-*/
-static inline double sei_dts (sei_t* sei) { return sei->dts; }
-static inline double sei_cts (sei_t* sei) { return sei->cts; }
-static inline double sei_pts (sei_t* sei) { return sei->dts + sei->cts; }
-/*! \brief
-    \param
-*/
-int sei_parse_nalu (sei_t* sei, const uint8_t* data, size_t size, double dts, double cts);
-/*! \brief
-    \param
-*/
-// TODO add dts,cts to nalu
-static inline int sei_parse_avcnalu (sei_t* sei, avcnalu_t* nalu, double dts, double cts) { return sei_parse_nalu (sei,avcnalu_data (nalu),avcnalu_size (nalu),dts,cts); }
-/*! \brief
-    \param
-*/
-static inline int sei_finish (sei_t* sei) { return sei_parse_nalu (sei,0,0,0.0,DBL_MAX); }
-/*! \brief
-    \param
-*/
-static inline sei_message_t* sei_message_head (sei_t* sei) { return sei->head; }
-/*! \brief
-    \param
-*/
-static inline sei_message_t* sei_message_tail (sei_t* sei) { return sei->tail; }
-/*! \brief
-    \param
-*/
-sei_message_t* sei_message_next (sei_message_t* msg);
-/*! \brief
-    \param
-*/
-sei_msgtype_t sei_message_type (sei_message_t* msg);
-/*! \brief
-    \param
-*/
-size_t sei_message_size (sei_message_t* msg);
-/*! \brief
-    \param
-*/
-uint8_t* sei_message_data (sei_message_t* msg);
-/*! \brief
-    \param
-*/
-sei_message_t* sei_message_new (sei_msgtype_t type, uint8_t* data, size_t size);
-/*! \brief
-    \param
-*/
-static inline sei_message_t* sei_message_copy (sei_message_t* msg)
-{
-    return sei_message_new (sei_message_type (msg), sei_message_data (msg), sei_message_size (msg));
-}
-/**
-Free message and all accoiated data. Messaged added to sei_t by using sei_append_message MUST NOT be freed
-These messages will be freed by calling sei_free()
-*/
-/*! \brief
-    \param
-*/
-void  sei_message_free (sei_message_t* msg);
-////////////////////////////////////////////////////////////////////////////////
-/*! \brief
-    \param
-*/
-static inline int sei_decode_cea708 (sei_message_t* msg, cea708_t* cea708)
-{
-    if (sei_type_user_data_registered_itu_t_t35 == sei_message_type (msg)) {
-        return cea708_parse (sei_message_data (msg), sei_message_size (msg), cea708);
-    } else {
-        return 0;
-    }
-}
-////////////////////////////////////////////////////////////////////////////////
-/*! \brief
-    \param
-*/
-size_t sei_render_size (sei_t* sei);
-/*! \brief
-    \param
-*/
-size_t sei_render (sei_t* sei, uint8_t* data);
-/*! \brief
-    \param
-*/
-void sei_dump (sei_t* sei);
-/*! \brief
-    \param
-*/
-void sei_dump_messages (sei_message_t* head);
-////////////////////////////////////////////////////////////////////////////////
-/*! \brief
-    \param
-*/
-int sei_from_caption_frame (sei_t* sei, caption_frame_t* frame);
-/*! \brief
-    \param
-*/
-libcaption_stauts_t sei_to_caption_frame (sei_t* sei, caption_frame_t* frame);
-/*! \brief
-    \param
-*/
-static inline int nalu_to_caption_frame (caption_frame_t* frame, const uint8_t* data, size_t size, double pts, double dts)
-{
-    sei_t sei;
-    sei_init (&sei);
-    sei_parse_nalu (&sei, data, size, pts, dts);
-    sei_to_caption_frame (&sei,frame);
-    sei_free (&sei);
-    return 1;
-}
-////////////////////////////////////////////////////////////////////////////////
-#endif
diff --git a/deps/libcaption/caption/caption.h b/deps/libcaption/caption/caption.h
deleted file mode 100644
index 665ec28..0000000
--- a/deps/libcaption/caption/caption.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_H
-#define LIBCAPTION_H
-#include "utf8.h"
-#include "xds.h"
-#include "eia608.h"
-
-// ssize_t is POSIX and does not exist on Windows
-#if defined(_MSC_VER)
-#if defined(_WIN64)
-typedef signed long ssize_t;
-#else
-typedef signed int ssize_t;
-#endif
-#endif
-
-typedef enum {
-    LIBCAPTION_OK = 1,
-    LIBCAPTION_ERROR = 0,
-    LIBCAPTION_READY = 2
-} libcaption_stauts_t;
-
-
-/*! \brief
-    \param
-*/
-static inline libcaption_stauts_t libcaption_status_update (libcaption_stauts_t old_stat, libcaption_stauts_t new_stat) { return (LIBCAPTION_ERROR == old_stat || LIBCAPTION_ERROR == new_stat) ? LIBCAPTION_ERROR : (LIBCAPTION_READY == old_stat) ? LIBCAPTION_READY : new_stat;  }
-
-#define SCREEN_ROWS 15
-#define SCREEN_COLS 32
-
-typedef struct {
-    unsigned int uln : 1; //< underline
-    unsigned int sty : 3; //< style
-    utf8_char_t data[5];  //< 4 byte utf8 values plus null term
-}  caption_frame_cell_t;
-
-typedef struct {
-    caption_frame_cell_t cell[SCREEN_ROWS][SCREEN_COLS];
-} caption_frame_buffer_t;
-
-
-typedef struct  {
-    unsigned int uln : 1; //< underline
-    unsigned int sty : 3; //< style
-    unsigned int mod : 3; //< current mode
-    unsigned int rup : 2; //< roll-up line count minus 1
-    uint16_t row, col, cc_data;
-} caption_frame_state_t;
-
-// timestamp and duration are in seconds
-typedef struct {
-    double timestamp;
-    double duration;
-    xds_t xds;
-    caption_frame_state_t state;
-    caption_frame_buffer_t front;
-    caption_frame_buffer_t back;
-} caption_frame_t;
-
-// typedef enum {
-//     eia608_paint_on = 0,
-//     eia608_pop_on   = 1,
-//     eia608_rollup_2 = 2,
-//     eia608_rollup_3 = 3,
-//     eia608_rollup_4 = 4,
-// } eia608_display_mode_t;
-// eia608_display_mode_t caption_frame_mode (caption_frame_t* frame);
-
-
-/*!
-    \brief Initializes an allocated caption_frame_t instance
-    \param frame Pointer to prealocated caption_frame_t object
-*/
-void caption_frame_init (caption_frame_t* frame);
-/*! \brief Writes a single charcter to a caption_frame_t object
-    \param frame A pointer to an allocted and initialized caption_frame_t object
-    \param row Row position to write charcter, must be between 0 and SCREEN_ROWS-1
-    \param col Column position to write charcter, must be between 0 and SCREEN_ROWS-1
-    \param style Style to apply to charcter
-    \param underline Set underline attribute, 0 = off any other value = on
-    \param c pointer to a single valid utf8 charcter. Bytes are automatically determined, and a NULL terminator is not required
-*/
-int caption_frame_write_char (caption_frame_t* frame, int row, int col, eia608_style_t style, int underline, const utf8_char_t* c);
-/*! \brief
-    \param
-*/
-const utf8_char_t* caption_frame_read_char (caption_frame_t* frame, int row, int col, eia608_style_t* style, int* underline);
-/*! \brief
-    \param
-*/
-
-/*! \brief
-    \param
-*/
-libcaption_stauts_t caption_frame_decode (caption_frame_t* frame, uint16_t cc_data, double timestamp);
-
-/*! \brief
-    \param
-*/
-int caption_frame_from_text (caption_frame_t* frame, const utf8_char_t* data);
-/*! \brief
-    \param
-*/
-#define CAPTION_FRAME_TEXT_BYTES (((2+SCREEN_ROWS)*SCREEN_COLS*4)+1)
-void caption_frame_to_text (caption_frame_t* frame, utf8_char_t* data);
-/*! \brief
-    \param
-*/
-#define CAPTION_FRAME_DUMP_BUF_SIZE 4096
-size_t caption_frame_dump_buffer (caption_frame_t* frame, utf8_char_t* buf);
-void caption_frame_dump (caption_frame_t* frame);
-/*! \brief
-    \param
-*/
-#define CAPTION_FRAME_JSON_BUF_SIZE 32768
-size_t caption_frame_json (caption_frame_t* frame, utf8_char_t* buf);
-
-#endif
diff --git a/deps/libcaption/caption/cea708.h b/deps/libcaption/caption/cea708.h
deleted file mode 100644
index c2f5bf0..0000000
--- a/deps/libcaption/caption/cea708.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_CEA708_H
-#define LIBCAPTION_CEA708_H
-
-#include "caption.h"
-#define CEA608_MAX_SIZE (255)
-
-////////////////////////////////////////////////////////////////////////////////
-typedef enum {
-    cc_type_ntsc_cc_field_1 = 0,
-    cc_type_ntsc_cc_field_2 = 1,
-    cc_type_dtvcc_packet_data = 2,
-    cc_type_dtvcc_packet_start = 3,
-} cea708_cc_type_t;
-
-typedef struct {
-    unsigned int marker_bits : 5;
-    unsigned int cc_valid : 1;
-    unsigned int cc_type : 2; // castable to cea708_cc_type_t
-    unsigned int cc_data : 16;
-} cc_data_t;
-
-typedef struct {
-    unsigned int process_em_data_flag : 1;
-    unsigned int process_cc_data_flag : 1;
-    unsigned int additional_data_flag : 1;
-    unsigned int cc_count : 5;
-    unsigned int em_data : 8;
-    cc_data_t cc_data[32];
-} user_data_t;
-
-/*! \brief
-    \param
-*/
-cc_data_t cea708_encode_cc_data (int cc_valid, cea708_cc_type_t type, uint16_t cc_data);
-/*! \brief
-    \param
-*/
-int cea708_cc_count (user_data_t* data);
-/*! \brief
-    \param
-*/
-uint16_t cea708_cc_data (user_data_t* data, int index, int* valid, cea708_cc_type_t* type);
-////////////////////////////////////////////////////////////////////////////////
-
-typedef enum {
-    country_united_states = 181,
-} itu_t_t35_country_code_t;
-
-typedef enum {
-    t35_provider_direct_tv = 47,
-    t35_provider_atsc = 49,
-} itu_t_t35_provider_code_t;
-
-typedef struct {
-    itu_t_t35_country_code_t country;
-    itu_t_t35_provider_code_t provider;
-    uint32_t user_identifier;
-    uint8_t atsc1_data_user_data_type_code;
-    uint8_t directv_user_data_length;
-    user_data_t user_data;
-} cea708_t;
-
-/*! \brief
-    \param
-*/
-int cea708_init (cea708_t* cea708); // will confgure using HLS compatiable defaults
-/*! \brief
-    \param
-*/
-int cea708_parse (uint8_t* data, size_t size, cea708_t* cea708);
-/*! \brief
-    \param
-*/
-libcaption_stauts_t cea708_to_caption_frame (caption_frame_t* frame, cea708_t* cea708, double pts);
-/*! \brief
-    \param
-*/
-int cea708_add_cc_data (cea708_t* cea708, int valid, cea708_cc_type_t type, uint16_t cc_data);
-/*! \brief
-    \param
-*/
-int cea708_render (cea708_t* cea708, uint8_t* data, size_t size);
-/*! \brief
-    \param
-*/
-void cea708_dump (cea708_t* cea708);
-#endif
diff --git a/deps/libcaption/caption/eia608.h b/deps/libcaption/caption/eia608.h
deleted file mode 100644
index d0caf32..0000000
--- a/deps/libcaption/caption/eia608.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_EIA608_H
-#define LIBCAPTION_EIA608_H
-
-#include "utf8.h"
-#include "eia608_charmap.h"
-////////////////////////////////////////////////////////////////////////////////
-// Parity
-#define EIA608_BX(B,X) (((B)>>X)&0x01)
-#define EIA608_BP(B) ((B)&0x7F) | ((EIA608_BX((B),0)^EIA608_BX(B,1)^EIA608_BX((B),2)^EIA608_BX((B),3)^EIA608_BX((B),4)^EIA608_BX((B),5)^EIA608_BX((B),6)^(0x01))<<7)
-#define EIA608_B2(B) EIA608_BP((B)+0), EIA608_BP((B)+1), EIA608_BP((B)+2), EIA608_BP((B)+3), EIA608_BP((B)+4), EIA608_BP((B)+5), EIA608_BP((B)+6), EIA608_BP((B)+7)
-#define EIA608_B1(B) EIA608_B2((B)+0), EIA608_B2((B)+8), EIA608_B2((B)+16), EIA608_B2((B)+24), EIA608_B2((B)+32), EIA608_B2((B)+40), EIA608_B2((B)+48), EIA608_B2((B)+56)
-
-static const uint8_t eia608_parity_table[] = { EIA608_B1 (0), EIA608_B1 (64) };
-extern const char* eia608_mode_map[];
-extern const char* eia608_style_map[];
-
-#ifdef _MSC_VER
-#ifndef inline
-#define inline __inline
-#endif
-#endif
-
-/*! \brief
-    \param
-*/
-static inline uint8_t  eia608_parity_byte (uint8_t cc_data) { return eia608_parity_table[0x7F & cc_data]; }
-/*! \brief
-    \param
-*/
-static inline uint16_t eia608_parity_word (uint16_t cc_data) { return (uint16_t) ( (eia608_parity_byte ( (uint8_t) (cc_data>>8)) <<8) | eia608_parity_byte ( (uint8_t) cc_data)); }
-/*! \brief
-    \param
-*/
-static inline uint16_t eia608_parity (uint16_t cc_data) { return eia608_parity_word (cc_data); }
-/*! \brief
-    \param
-*/
-static inline int eia608_parity_varify (uint16_t cc_data) { return eia608_parity_word (cc_data) == cc_data ? 1 : 0; }
-/*! \brief
-    \param
-*/
-static inline int eia608_parity_strip (uint16_t cc_data) { return cc_data & 0x7F7F; }
-/*! \brief
-    \param
-*/
-static inline int eia608_test_second_channel_bit (uint16_t cc_data) { return (cc_data & 0x0800); }
-
-////////////////////////////////////////////////////////////////////////////////
-// cc_data types
-/*! \brief
-    \param
-*/
-static inline int eia608_is_basicna (uint16_t cc_data) { return 0x0000 != (0x6000 & cc_data); /*&& 0x1F00 < (0x7F00 & cc_data);*/ }
-/*! \brief
-    \param
-*/
-static inline int eia608_is_preamble (uint16_t cc_data) { return 0x1040 == (0x7040 & cc_data); }
-/*! \brief
-    \param
-*/
-static inline int eia608_is_midrowchange (uint16_t cc_data) { return 0x1120 == (0x7770 & cc_data); }
-/*! \brief
-    \param
-*/
-static inline int eia608_is_specialna (uint16_t cc_data) { return 0x1130 == (0x7770 & cc_data); }
-/*! \brief
-    \param
-*/
-static inline int eia608_is_xds (uint16_t cc_data) { return 0x0000 == (0x7070 & cc_data) && 0x0000 != (0x0F0F & cc_data); }
-/*! \brief
-    \param
-*/
-static inline int eia608_is_westeu (uint16_t cc_data) { return 0x1220 == (0x7660 & cc_data); }
-/*! \brief
-    \param
-*/
-static inline int eia608_is_control (uint16_t cc_data) { return 0x1420 == (0x7670 & cc_data) || 0x1720 == (0x7770 & cc_data); }
-/*! \brief
-    \param
-*/
-static inline int eia608_is_norpak (uint16_t cc_data) { return 0x1724 == (0x777C & cc_data) || 0x1728 == (0x777C & cc_data); }
-/*! \brief
-    \param
-*/
-static inline int eia608_is_padding (uint16_t cc_data) { return 0x8080 == cc_data; }
-
-////////////////////////////////////////////////////////////////////////////////
-// preamble
-typedef enum {
-    eia608_style_white = 0,
-    eia608_style_green = 1,
-    eia608_style_blue = 2,
-    eia608_style_cyan = 3,
-    eia608_style_red = 4,
-    eia608_style_yellow = 5,
-    eia608_style_magenta = 6,
-    eia608_style_italics = 7,
-} eia608_style_t;
-
-/*! \brief
-    \param
-*/
-int eia608_parse_preamble (uint16_t cc_data, int* row, int* col, eia608_style_t* style, int* chan, int* underline);
-/*! \brief
-    \param
-*/
-int eia608_parse_midrowchange (uint16_t cc_data, int* chan, eia608_style_t* style, int* underline);
-/*! \brief
-    \param
-*/
-uint16_t eia608_row_column_pramble (int row, int col, int chan, int underline);
-/*! \brief
-    \param
-*/
-uint16_t eia608_row_style_pramble (int row, eia608_style_t style, int chan, int underline);
-
-////////////////////////////////////////////////////////////////////////////////
-// control command
-typedef enum { // yes, no?
-    eia608_tab_offset_0 = 0x1720,
-    eia608_tab_offset_1 = 0x1721,
-    eia608_tab_offset_2 = 0x1722,
-    eia608_tab_offset_3 = 0x1723,
-    eia608_control_resume_caption_loading = 0x1420,
-    eia608_control_backspace = 0x1421,
-    eia608_control_alarm_off = 0x1422,
-    eia608_control_alarm_on = 0x1423,
-    eia608_control_delete_to_end_of_row = 0x1424,
-    eia608_control_roll_up_2 = 0x1425,
-    eia608_control_roll_up_3 = 0x1426,
-    eia608_control_roll_up_4 = 0x1427,
-    eia608_control_resume_direct_captioning = 0x1429,
-    eia608_control_text_restart = 0x142A,
-    eia608_control_text_resume_text_display = 0x142B,
-    eia608_control_erase_display_memory = 0x142C,
-    eia608_control_carriage_return = 0x142D,
-    eia608_control_erase_non_displayed_memory = 0x142E,
-    eia608_control_end_of_caption = 0x142F,
-} eia608_control_t;
-
-#define eia608_control_popon eia608_control_resume_caption_loading
-#define eia608_control_painton eia608_control_resume_direct_captioning
-
-/*! \brief
-    \param
-*/
-uint16_t eia608_control_command (eia608_control_t cmd, int cc);
-/*! \brief
-    \param
-*/
-static inline uint16_t eia608_tab (int size, int cc) { return eia608_control_command ( (eia608_control_t) (eia608_tab_offset_0 | (size&0x0F)),cc); }
-/*! \brief
-    \param
-*/
-eia608_control_t eia608_parse_control (uint16_t cc_data, int* cc);
-
-////////////////////////////////////////////////////////////////////////////////
-// text
-/*! \brief
-    \param c
-*/
-uint16_t eia608_from_utf8_1 (const utf8_char_t* c, int chan);
-/*! \brief
-    \param
-*/
-uint16_t eia608_from_utf8_2 (const utf8_char_t* c1, const utf8_char_t* c2);
-/*! \brief
-    \param
-*/
-uint16_t eia608_from_basicna (uint16_t bna1, uint16_t bna2);
-/*! \brief
-    \param
-*/
-int eia608_to_utf8 (uint16_t c, int* chan, utf8_char_t* char1, utf8_char_t* char2);
-////////////////////////////////////////////////////////////////////////////////
-/*! \brief
-    \param
-*/
-void eia608_dump (uint16_t cc_data);
-////////////////////////////////////////////////////////////////////////////////
-
-
-#endif
diff --git a/deps/libcaption/caption/eia608_charmap.h b/deps/libcaption/caption/eia608_charmap.h
deleted file mode 100644
index 261b37a..0000000
--- a/deps/libcaption/caption/eia608_charmap.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_EIA608_CHARMAP_H
-#define LIBCAPTION_EIA608_CHARMAP_H
-
-#define EIA608_CHAR_COUNT 176
-extern const char* eia608_char_map[EIA608_CHAR_COUNT];
-
-// Helper char
-#define EIA608_CHAR_NULL                                       ""
-// Basic North American character set
-#define EIA608_CHAR_SPACE                                      "\x20"
-#define EIA608_CHAR_EXCLAMATION_MARK                           "\x21"
-#define EIA608_CHAR_QUOTATION_MARK                             "\x22"
-#define EIA608_CHAR_NUMBER_SIGN                                "\x23"
-#define EIA608_CHAR_DOLLAR_SIGN                                "\x24"
-#define EIA608_CHAR_PERCENT_SIGN                               "\x25"
-#define EIA608_CHAR_AMPERSAND                                  "\x26"
-#define EIA608_CHAR_LEFT_SINGLE_QUOTATION_MARK                 "\xE2\x80\x98"
-#define EIA608_CHAR_LEFT_PARENTHESIS                           "\x28"
-#define EIA608_CHAR_RIGHT_PARENTHESIS                          "\x29"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_ACUTE            "\xC3\xA1"
-#define EIA608_CHAR_PLUS_SIGN                                  "\x2B"
-#define EIA608_CHAR_COMMA                                      "\x2C"
-#define EIA608_CHAR_HYPHEN_MINUS                               "\x2D"
-#define EIA608_CHAR_FULL_STOP                                  "\x2E"
-#define EIA608_CHAR_SOLIDUS                                    "\x2F"
-
-// Basic North American character set
-#define EIA608_CHAR_DIGIT_ZERO                                 "\x30"
-#define EIA608_CHAR_DIGIT_ONE                                  "\x31"
-#define EIA608_CHAR_DIGIT_TWO                                  "\x32"
-#define EIA608_CHAR_DIGIT_THREE                                "\x33"
-#define EIA608_CHAR_DIGIT_FOUR                                 "\x34"
-#define EIA608_CHAR_DIGIT_FIVE                                 "\x35"
-#define EIA608_CHAR_DIGIT_SIX                                  "\x36"
-#define EIA608_CHAR_DIGIT_SEVEN                                "\x37"
-#define EIA608_CHAR_DIGIT_EIGHT                                "\x38"
-#define EIA608_CHAR_DIGIT_NINE                                 "\x39"
-#define EIA608_CHAR_COLON                                      "\x3A"
-#define EIA608_CHAR_SEMICOLON                                  "\x3B"
-#define EIA608_CHAR_LESS_THAN_SIGN                             "\x3C"
-#define EIA608_CHAR_EQUALS_SIGN                                "\x3D"
-#define EIA608_CHAR_GREATER_THAN_SIGN                          "\x3E"
-#define EIA608_CHAR_QUESTION_MARK                              "\x3F"
-
-// Basic North American character set
-#define EIA608_CHAR_COMMERCIAL_AT                              "\x40"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_A                     "\x41"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_B                     "\x42"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_C                     "\x43"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_D                     "\x44"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_E                     "\x45"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_F                     "\x46"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_G                     "\x47"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_H                     "\x48"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_I                     "\x49"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_J                     "\x4A"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_K                     "\x4B"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_L                     "\x4C"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_M                     "\x4D"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_N                     "\x4E"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_O                     "\x4F"
-
-// Basic North American character set
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_P                     "\x50"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_Q                     "\x51"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_R                     "\x52"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_S                     "\x53"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_T                     "\x54"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_U                     "\x55"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_V                     "\x56"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_W                     "\x57"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_X                     "\x58"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_Y                     "\x59"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_Z                     "\x5A"
-#define EIA608_CHAR_LEFT_SQUARE_BRACKET                        "\x5B"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_E_WITH_ACUTE            "\xC3\xA9"
-#define EIA608_CHAR_RIGHT_SQUARE_BRACKET                       "\x5D"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_I_WITH_ACUTE            "\xC3\xAD"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_ACUTE            "\xC3\xB3"
-
-// Basic North American character set
-#define EIA608_CHAR_LATIN_SMALL_LETTER_U_WITH_ACUTE            "\xC3\xBA"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_A                       "\x61"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_B                       "\x62"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_C                       "\x63"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_D                       "\x64"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_E                       "\x65"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_F                       "\x66"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_G                       "\x67"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_H                       "\x68"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_I                       "\x69"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_J                       "\x6A"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_K                       "\x6B"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_L                       "\x6C"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_M                       "\x6D"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_N                       "\x6E"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_O                       "\x6F"
-
-// Basic North American character set
-#define EIA608_CHAR_LATIN_SMALL_LETTER_P                       "\x70"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_Q                       "\x71"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_R                       "\x72"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_S                       "\x73"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_T                       "\x74"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_U                       "\x75"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_V                       "\x76"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_W                       "\x77"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_X                       "\x78"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_Y                       "\x79"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_Z                       "\x7A"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_C_WITH_CEDILLA          "\xC3\xA7"
-#define EIA608_CHAR_DIVISION_SIGN                              "\xC3\xB7"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_N_WITH_TILDE          "\xC3\x91"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_N_WITH_TILDE            "\xC3\xB1"
-#define EIA608_CHAR_FULL_BLOCK                                 "\xE2\x96\x88"
-
-// Special North American character set[edit]
-#define EIA608_CHAR_REGISTERED_SIGN                            "\xC2\xAE"
-#define EIA608_CHAR_DEGREE_SIGN                                "\xC2\xB0"
-#define EIA608_CHAR_VULGAR_FRACTION_ONE_HALF                   "\xC2\xBD"
-#define EIA608_CHAR_INVERTED_QUESTION_MARK                     "\xC2\xBF"
-#define EIA608_CHAR_TRADE_MARK_SIGN                            "\xE2\x84\xA2"
-#define EIA608_CHAR_CENT_SIGN                                  "\xC2\xA2"
-#define EIA608_CHAR_POUND_SIGN                                 "\xC2\xA3"
-#define EIA608_CHAR_EIGHTH_NOTE                                "\xE2\x99\xAA"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_GRAVE            "\xC3\xA0"
-#define EIA608_CHAR_NO_BREAK_SPACE                             "\xC2\xA0"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_E_WITH_GRAVE            "\xC3\xA8"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX       "\xC3\xA2"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX       "\xC3\xAA"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_I_WITH_CIRCUMFLEX       "\xC3\xAE"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX       "\xC3\xB4"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_U_WITH_CIRCUMFLEX       "\xC3\xBB"
-
-// Extended Western European character set : Extended Spanish/Miscellaneous
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_ACUTE          "\xC3\x81"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_E_WITH_ACUTE          "\xC3\x89"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_ACUTE          "\xC3\x93"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_U_WITH_ACUTE          "\xC3\x9A"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS      "\xC3\x9C"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_U_WITH_DIAERESIS        "\xC3\xBC"
-#define EIA608_CHAR_RIGHT_SINGLE_QUOTATION_MARK                "\xE2\x80\x99"
-#define EIA608_CHAR_INVERTED_EXCLAMATION_MARK                  "\xC2\xA1"
-#define EIA608_CHAR_ASTERISK                                   "\x2A"
-#define EIA608_CHAR_APOSTROPHE                                 "\x27"
-#define EIA608_CHAR_EM_DASH                                    "\xE2\x80\x94"
-#define EIA608_CHAR_COPYRIGHT_SIGN                             "\xC2\xA9"
-#define EIA608_CHAR_SERVICE_MARK                               "\xE2\x84\xA0"
-#define EIA608_CHAR_BULLET                                     "\xE2\x80\xA2"
-#define EIA608_CHAR_LEFT_DOUBLE_QUOTATION_MARK                 "\xE2\x80\x9C"
-#define EIA608_CHAR_RIGHT_DOUBLE_QUOTATION_MARK                "\xE2\x80\x9D"
-
-// Extended Western European character set : Extended French
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_GRAVE          "\xC3\x80"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX     "\xC3\x82"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_C_WITH_CEDILLA        "\xC3\x87"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_E_WITH_GRAVE          "\xC3\x88"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX     "\xC3\x8A"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_E_WITH_DIAERESIS      "\xC3\x8B"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_E_WITH_DIAERESIS        "\xC3\xAB"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX     "\xC3\x8E"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS      "\xC3\x8F"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_I_WITH_DIAERESIS        "\xC3\xAF"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX     "\xC3\x94"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_U_WITH_GRAVE          "\xC3\x99"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_U_WITH_GRAVE            "\xC3\xB9"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_U_WITH_CIRCUMFLEX     "\xC3\x9B"
-#define EIA608_CHAR_LEFT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK  "\xC2\xAB"
-#define EIA608_CHAR_RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK "\xC2\xBB"
-
-// Extended Western European character set : Portuguese
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_TILDE          "\xC3\x83"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_TILDE            "\xC3\xA3"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_I_WITH_ACUTE          "\xC3\x8D"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_I_WITH_GRAVE          "\xC3\x8C"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_I_WITH_GRAVE            "\xC3\xAC"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_GRAVE          "\xC3\x92"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_GRAVE            "\xC3\xB2"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_TILDE          "\xC3\x95"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_TILDE            "\xC3\xB5"
-#define EIA608_CHAR_LEFT_CURLY_BRACKET                         "\x7B"
-#define EIA608_CHAR_RIGHT_CURLY_BRACKET                        "\x7D"
-#define EIA608_CHAR_REVERSE_SOLIDUS                            "\x5C"
-#define EIA608_CHAR_CIRCUMFLEX_ACCENT                          "\x5E"
-#define EIA608_CHAR_LOW_LINE                                   "\x5F"
-#define EIA608_CHAR_VERTICAL_LINE                              "\x7C"
-#define EIA608_CHAR_TILDE                                      "\x7E"
-
-// Extended Western European character set : German/Danish
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS      "\xC3\x84"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_DIAERESIS        "\xC3\xA4"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS      "\xC3\x96"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_DIAERESIS        "\xC3\xB6"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_SHARP_S                 "\xC3\x9F"
-#define EIA608_CHAR_YEN_SIGN                                   "\xC2\xA5"
-#define EIA608_CHAR_CURRENCY_SIGN                              "\xC2\xA4"
-#define EIA608_CHAR_BROKEN_BAR                                 "\xC2\xA6"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE     "\xC3\x85"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_RING_ABOVE       "\xC3\xA5"
-#define EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_STROKE         "\xC3\x98"
-#define EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_STROKE           "\xC3\xB8"
-#define EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT          "\xE2\x94\x8C" // top left
-#define EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT           "\xE2\x94\x90" // top right
-#define EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT            "\xE2\x94\x94" // lower left
-#define EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT             "\xE2\x94\x98" // bottom right
-
-#endif
diff --git a/deps/libcaption/caption/scc.h b/deps/libcaption/caption/scc.h
deleted file mode 100644
index dd4d6dc..0000000
--- a/deps/libcaption/caption/scc.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_SCC_H
-#define LIBCAPTION_SCC_H
-
-#include "eia608.h"
-
-int scc_to_608 (const char* line, double* pts, uint16_t* cc, int cc_max);
-
-#endif
diff --git a/deps/libcaption/caption/srt.h b/deps/libcaption/caption/srt.h
deleted file mode 100644
index c7c1565..0000000
--- a/deps/libcaption/caption/srt.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_SRT_H
-#define LIBCAPTION_SRT_H
-
-#include "eia608.h"
-#include "caption.h"
-
-// timestamp and duration are in seconds
-typedef struct _srt_t {
-    struct _srt_t* next;
-    double timestamp;
-    double duration;
-    size_t aloc;
-} srt_t;
-
-
-
-
-/*! \brief
-    \param
-*/
-srt_t* srt_new (const utf8_char_t* data, size_t size, double timestamp, srt_t* prev, srt_t** head);
-/*! \brief
-    \param
-*/
-srt_t* srt_free_head (srt_t* head);
-// returns the head of the link list. must bee freed when done
-/*! \brief
-    \param
-*/
-srt_t* srt_parse (const utf8_char_t* data, size_t size);
-/*! \brief
-    \param
-*/
-void srt_free (srt_t* srt);
-
-/*! \brief
-    \param
-*/
-static inline srt_t* srt_next (srt_t* srt) { return srt->next; }
-/*! \brief
-    \param
-*/
-static inline utf8_char_t* srt_data (srt_t* srt) { return (utf8_char_t*) (srt) + sizeof (srt_t); }
-// This only converts teh surrent SRT, It does not walk the list
-/*! \brief
-    \param
-*/
-int srt_to_caption_frame (srt_t* srt, caption_frame_t* frame);
-
-// returns teh new srt. Head is not tracher internally.
-/*! \brief
-    \param
-*/
-srt_t* srt_from_caption_frame (caption_frame_t* frame, srt_t* prev, srt_t** head);
-/*! \brief
-    \param
-*/
-void srt_dump (srt_t* srt);
-/*! \brief
-    \param
-*/
-void vtt_dump (srt_t* srt);
-
-#endif
diff --git a/deps/libcaption/caption/utf8.h b/deps/libcaption/caption/utf8.h
deleted file mode 100644
index 576f47a..0000000
--- a/deps/libcaption/caption/utf8.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_UTF8_H
-#define LIBCAPTION_UTF8_H
-
-#include <stddef.h>
-#include <inttypes.h>
-
-// These types exist to make the code more self dcoumenting
-// utf8_char_t point is a null teminate string of utf8 encodecd chars
-//
-// utf8_size_t is the length of a string in chars
-// size_t is bytes
-typedef char utf8_char_t;
-typedef size_t utf8_size_t;
-/*! \brief
-    \param
-
-    Skiped continuation bytes
-*/
-const utf8_char_t* utf8_char_next (const char* s);
-/*! \brief
-    \param
-
-    returnes the length of the char in bytes
-*/
-size_t utf8_char_length (const utf8_char_t* c);
-
-/*! \brief
-    \param
-
-    returns length of the string in bytes
-    size is number of charcter to count (0 to count until NULL term)
-*/
-size_t utf8_string_length (const utf8_char_t* data, utf8_size_t size);
-/*! \brief
-    \param
-*/
-size_t utf8_char_copy (utf8_char_t* dst, const utf8_char_t* src);
-
-/*! \brief
-    \param
-
-    returnes the number of utf8 charcters in a string givne the numbe of bytes
-    to coutn until the a null terminator, pass 0 for size
-*/
-utf8_size_t utf8_char_count (const char* data, size_t size);
-/*! \brief
-    \param
-
-    returnes the length of the line in bytes triming not printable charcters at the end
-*/
-size_t utf8_trimmed_length (const char* data, size_t size);
-/*! \brief
-    \param
-
-    returns the length in bytes of the line including the new line charcter(s)
-    auto detects between windows(CRLF), unix(LF), mac(CR) and riscos (LFCR) line endings
-*/
-size_t utf8_line_length (const char* data);
-/*! \brief
-    \param
-
-    returns number of chars to include before split
-*/
-utf8_size_t utf8_wrap_length (const utf8_char_t* data, utf8_size_t size);
-
-/*! \brief
-    \param
-
-    returns number of new lins in teh string
-*/
-int utf8_line_count (const utf8_char_t* data);
-
-
-#endif
diff --git a/deps/libcaption/caption/xds.h b/deps/libcaption/caption/xds.h
deleted file mode 100644
index 7b510f5..0000000
--- a/deps/libcaption/caption/xds.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/**********************************************************************************************/
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file  */
-/* except in compliance with the License. A copy of the License is located at                 */
-/*                                                                                            */
-/*     http://aws.amazon.com/apache2.0/                                                       */
-/*                                                                                            */
-/* or in the "license" file accompanying this file. This file is distributed on an "AS IS"    */
-/* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the    */
-/* License for the specific language governing permissions and limitations under the License. */
-/**********************************************************************************************/
-
-#ifndef LIBCAPTION_XDS_H
-#define LIBCAPTION_XDS_H
-
-#include <stddef.h>
-#include <inttypes.h>
-
-typedef struct {
-    int state;
-    uint8_t class;
-    uint8_t type;
-    uint32_t size;
-    uint8_t content[32];
-    uint8_t checksum;
-} xds_t;
-
-void xds_init (xds_t* xds);
-int xds_decode (xds_t* xds, uint16_t cc);
-
-#endif
diff --git a/deps/libcaption/examples/add_captions.sh b/deps/libcaption/examples/add_captions.sh
deleted file mode 100644
index 68e295e..0000000
--- a/deps/libcaption/examples/add_captions.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env bash
-
-if [  $# -lt 2 ]
-then
-    echo "Need at least 2 arguments."
-    echo "$0 InputVideo InputSRT [OutputFilename]"
-    exit 1
-fi
-
-VIDEO=$1
-SRT=$2
-
-if [ -z "$3" ]
-then
-    OUTFILE="out.flv"
-else
-    OUTFILE="$3"
-fi
-
-echo "Video=$VIDEO"
-echo "Captions=$SRT"
-echo "Outfile=$OUTFILE"
-
-# ffmpeg -i $VIDEO -acodec copy -vcodec copy -f flv - | ./flv+srt - $SRT - | ffmpeg -i - -acodec copy -vcodec copy $OUTFILE
-ffmpeg -i $VIDEO -threads 0 -vcodec libx264 -profile:v main -preset:v medium \
--r 30 -g 60 -keyint_min 60 -sc_threshold 0 -b:v 4000k -maxrate 4000k \
--bufsize 4000k -filter:v scale="trunc(oh*a/2)*2:720" \
--sws_flags lanczos+accurate_rnd -strict -2 -acodec aac -b:a 96k -ar 48000 -ac 2 \
--f flv - | ./flv+srt - $SRT - | ffmpeg -i - -acodec copy -vcodec copy -y $OUTFILE
diff --git a/deps/libcaption/examples/captioner.c b/deps/libcaption/examples/captioner.c
deleted file mode 100644
index 66b29fa..0000000
--- a/deps/libcaption/examples/captioner.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <linux/input.h>
-#include <string.h>
-#include <stdio.h>
-#include "caption.h"
-#include "flv.h"
-
-char charcode[] = {
-    0,   0, '1', '2', '3', '4', '5', '6',  '7', '8', '9',  '0', '-', '=',   0,   0,
-    'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',  'O', 'P', '[',  ']','\n',   0, 'A', 'S',
-    'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', '\'', '`',   0, '\\', 'Z', 'X', 'C', 'V',
-    'B', 'N', 'M', ',', '.', '/',   0, '*',    0, ' ',   0,    0,   0,   0,   0,   0,
-};
-
-int data_ready (int fd)
-{
-    fd_set set;
-    struct timeval timeout = {0,0};
-    FD_ZERO (&set);
-    FD_SET (fd,&set);
-    int cnt = select (fd+1, &set, 0, 0, &timeout);
-    FD_ZERO (&set);
-    return (0 < cnt);
-}
-
-#define MAX_CAP_LENGTH (SCREEN_ROWS*SCREEN_COLS)
-int main (int argc, char** argv)
-{
-    int fd;
-    ssize_t n;
-    flvtag_t tag;
-    struct input_event ev;
-    int has_audio, has_video;
-    const char* dev = argv[1];
-    char text[MAX_CAP_LENGTH+1];
-    memset (text,0,MAX_CAP_LENGTH+1);
-
-    FILE* flv = flv_open_read ("-");
-    FILE* out = flv_open_write ("-");
-    fd = open (dev, O_RDONLY);
-
-    if (fd == -1) {
-        fprintf (stderr, "Cannot open %s: %s.\n", dev, strerror (errno));
-        return EXIT_FAILURE;
-    }
-
-    if (!flv_read_header (flv,&has_audio,&has_video)) {
-        fprintf (stderr,"%s is not an flv file\n", argv[1]);
-        return EXIT_FAILURE;
-    }
-
-    if (!flv_write_header (out,has_audio,has_video)) {
-        return EXIT_FAILURE;
-    }
-
-    flvtag_init (&tag);
-
-    while (flv_read_tag (flv,&tag)) {
-        if (flvtag_avcpackettype_nalu == flvtag_avcpackettype (&tag)) {
-            if (data_ready (fd)) {
-                n = read (fd, &ev, sizeof ev);
-
-                if (n == (ssize_t)-1) {
-                    if (errno == EINTR) {
-                        continue;
-                    } else {
-                        break;
-                    }
-                } else if (n != sizeof ev) {
-                    errno = EIO;
-                    break;
-                }
-
-                int len = strlen (text);
-                char c = (EV_KEY == ev.type && 1 == ev.value && ev.code < 64) ? charcode[ev.code] : 0;
-
-                if (0 < len && '\n' == c) {
-                    fprintf (stderr,"='%s'\n", text);
-                    flvtag_addcaption (&tag, text);
-                    memset (text,0,MAX_CAP_LENGTH+1);
-                } else if (0 != c && len < MAX_CAP_LENGTH) {
-                    text[len] = c;
-                }
-            }
-        }
-
-        flv_write_tag (out,&tag);
-    }
-
-    return EXIT_SUCCESS;
-}
diff --git a/deps/libcaption/examples/flv+scc.c b/deps/libcaption/examples/flv+scc.c
deleted file mode 100644
index c368224..0000000
--- a/deps/libcaption/examples/flv+scc.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
diff --git a/deps/libcaption/examples/flv+srt.c b/deps/libcaption/examples/flv+srt.c
deleted file mode 100644
index 7828c79..0000000
--- a/deps/libcaption/examples/flv+srt.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "srt.h"
-#include "flv.h"
-#include "avc.h"
-// #include "sei.h"
-
-#define MAX_SRT_SIZE (10*1024*1024)
-#define MAX_READ_SIZE 4096
-
-srt_t* srt_from_file (const char* path)
-{
-    srt_t* head = 0;
-    size_t read, totl = 0;
-    FILE* file = fopen (path,"r");
-
-    if (file) {
-        char* srt_data = malloc (MAX_SRT_SIZE);
-        size_t srt_size = 0;
-        size_t size = MAX_SRT_SIZE;
-        char* data = srt_data;
-
-        while (0 < (read = fread (data,1,size,file))) {
-            totl += read; data += read; size -= read; srt_size += read;
-        }
-
-        head = srt_parse (srt_data,srt_size);
-        free (srt_data);
-    }
-
-    return head;
-}
-
-int main (int argc, char** argv)
-{
-    flvtag_t tag;
-    FILE* flv = flv_open_read (argv[1]);
-    FILE* out = flv_open_write (argv[3]);
-
-    int has_audio, has_video;
-    flvtag_init (&tag);
-
-    if (!flv_read_header (flv,&has_audio,&has_video)) {
-        fprintf (stderr,"%s is not an flv file\n", argv[1]);
-        return EXIT_FAILURE;
-    }
-
-    srt_t* head = srt_from_file (argv[2]);
-    srt_t* srt = head;
-
-    if (! head) {
-        fprintf (stderr,"%s is not an srt file\n", argv[2]);
-        return EXIT_FAILURE;
-    }
-
-    flv_write_header (out,has_audio,has_video);
-
-    while (flv_read_tag (flv,&tag)) {
-        // TODO handle B freame!
-        if (srt && flvtag_pts_seconds (&tag) >= srt->timestamp && flvtag_avcpackettype_nalu == flvtag_avcpackettype (&tag)) {
-            fprintf (stderr,"%f: %s\n", srt->timestamp, srt_data (srt));
-            flvtag_addcaption (&tag, srt_data (srt));
-            srt = srt->next;
-        }
-
-        flv_write_tag (out,&tag);
-        // Write tag out here
-    }
-
-    srt_free (head);
-    return EXIT_SUCCESS;
-}
diff --git a/deps/libcaption/examples/flv.c b/deps/libcaption/examples/flv.c
deleted file mode 100644
index 67ce3c5..0000000
--- a/deps/libcaption/examples/flv.c
+++ /dev/null
@@ -1,383 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "flv.h"
-#include <stdlib.h>
-#include <string.h>
-
-void flvtag_init (flvtag_t* tag)
-{
-    memset (tag,0,sizeof (flvtag_t));
-}
-
-void flvtag_free (flvtag_t* tag)
-{
-    if (tag->data) {
-        free (tag->data);
-    }
-
-    flvtag_init (tag);
-}
-
-int flvtag_reserve (flvtag_t* tag, uint32_t size)
-{
-    size += FLV_TAG_HEADER_SIZE + FLV_TAG_FOOTER_SIZE;
-
-    if (size > tag->aloc) {
-        tag->data = realloc (tag->data,size);
-        tag->aloc = size;
-    }
-
-    return 1;
-}
-
-FILE* flv_open_read (const char* flv)
-{
-    if (0 == flv || 0 == strcmp ("-",flv)) {
-        return stdin;
-    }
-
-    return fopen (flv,"rb");
-}
-
-FILE* flv_open_write (const char* flv)
-{
-    if (0 == flv || 0 == strcmp ("-",flv)) {
-        return stdout;
-    }
-
-    return fopen (flv,"wb");
-}
-
-FILE* flv_close (FILE* flv)
-{
-    fclose (flv);
-    return 0;
-}
-
-int flv_read_header (FILE* flv, int* has_audio, int* has_video)
-{
-    uint8_t h[FLV_HEADER_SIZE];
-
-    if (FLV_HEADER_SIZE != fread (&h[0],1,FLV_HEADER_SIZE,flv)) {
-        return 0;
-    }
-
-    if ('F' != h[0] || 'L' != h[1] || 'V' != h[2]) {
-        return 0;
-    }
-
-    (*has_audio) = h[4]&0x04;
-    (*has_video) = h[4]&0x01;
-    return 1;
-}
-
-int flv_write_header (FILE* flv, int has_audio, int has_video)
-{
-    uint8_t h[FLV_HEADER_SIZE] = {'F', 'L', 'V', 1, (has_audio?0x04:0x00) | (has_video?0x01:0x00), 0, 0, 0, 9, 0, 0, 0, 0 };
-    return FLV_HEADER_SIZE == fwrite (&h[0],1,FLV_HEADER_SIZE,flv);
-}
-
-int flv_read_tag (FILE* flv, flvtag_t* tag)
-{
-    uint32_t size;
-    uint8_t h[FLV_TAG_HEADER_SIZE];
-
-    if (FLV_TAG_HEADER_SIZE != fread (&h[0],1,FLV_TAG_HEADER_SIZE,flv)) {
-        return 0;
-    }
-
-    size = ( (h[1]<<16) | (h[2]<<8) |h[3]);
-    flvtag_reserve (tag, size);
-    // copy header to buffer
-    memcpy (tag->data,&h[0],FLV_TAG_HEADER_SIZE);
-
-    if (size+FLV_TAG_FOOTER_SIZE != fread (&tag->data[FLV_TAG_HEADER_SIZE],1,size+FLV_TAG_FOOTER_SIZE,flv)) {
-        return 0;
-    }
-
-    return 1;
-}
-
-int flv_write_tag (FILE* flv, flvtag_t* tag)
-{
-    size_t size = flvtag_raw_size (tag);
-    return size == fwrite (flvtag_raw_data (tag),1,size,flv);
-}
-////////////////////////////////////////////////////////////////////////////////
-size_t flvtag_header_size (flvtag_t* tag)
-{
-    switch (flvtag_type (tag)) {
-    case flvtag_type_audio:
-        return FLV_TAG_HEADER_SIZE + (flvtag_soundformat_aac != flvtag_soundformat (tag) ? 1 : 2);
-
-    case flvtag_type_video:
-        // CommandFrame does not have a compositionTime
-        return FLV_TAG_HEADER_SIZE + (flvtag_codecid_avc != flvtag_codecid (tag) ? 1 : (flvtag_frametype_commandframe != flvtag_frametype (tag) ? 5 : 2));
-
-    default:
-        return FLV_TAG_HEADER_SIZE;
-    }
-}
-
-size_t flvtag_payload_size (flvtag_t* tag)
-{
-    return FLV_TAG_HEADER_SIZE + flvtag_size (tag) - flvtag_header_size (tag);
-}
-
-uint8_t* flvtag_payload_data (flvtag_t* tag)
-{
-    size_t payload_offset = flvtag_header_size (tag);
-    return &tag->data[payload_offset];
-}
-////////////////////////////////////////////////////////////////////////////////
-int flvtag_updatesize (flvtag_t* tag, uint32_t size)
-{
-    tag->data[1] = size>>16; // DataSize
-    tag->data[2] = size>>8; // DataSize
-    tag->data[3] = size>>0; // DataSize
-    size += 11;
-    tag->data[size+0] = size>>24; // PrevTagSize
-    tag->data[size+1] = size>>16; // PrevTagSize
-    tag->data[size+2] = size>>8; // PrevTagSize
-    tag->data[size+3] = size>>0; // PrevTagSize
-    return 1;
-}
-
-#define FLVTAG_PREALOC 2048
-int flvtag_initavc (flvtag_t* tag, uint32_t dts, int32_t cts, flvtag_frametype_t type)
-{
-    flvtag_init (tag);
-    flvtag_reserve (tag,5+FLVTAG_PREALOC);
-    tag->data[0] = flvtag_type_video;
-    tag->data[4] = dts>>16;
-    tag->data[5] = dts>>8;
-    tag->data[6] = dts>>0;
-    tag->data[7] = dts>>24;
-    tag->data[8] = 0; // StreamID
-    tag->data[9] = 0; // StreamID
-    tag->data[10] = 0; // StreamID
-    // VideoTagHeader
-    tag->data[11] = ( (type<<4) %0xF0) |0x07; // CodecId
-    tag->data[12] = 0x01; // AVC NALU
-    tag->data[13] = cts>>16;
-    tag->data[14] = cts>>8;
-    tag->data[15] = cts>>0;
-    flvtag_updatesize (tag,5);
-    return 1;
-}
-
-int flvtag_initamf (flvtag_t* tag, uint32_t dts)
-{
-    flvtag_init (tag);
-    flvtag_reserve (tag,FLVTAG_PREALOC);
-    tag->data[0] = flvtag_type_scriptdata;
-    tag->data[4] = dts>>16;
-    tag->data[5] = dts>>8;
-    tag->data[6] = dts>>0;
-    tag->data[7] = dts>>24;
-    tag->data[8] = 0; // StreamID
-    tag->data[9] = 0; // StreamID
-    tag->data[10] = 0; // StreamID
-    flvtag_updatesize (tag,0);
-    return 1;
-}
-
-// shamelessly taken from libtomcrypt, an public domain project
-static void base64_encode (const unsigned char* in,  unsigned long inlen, unsigned char* out, unsigned long* outlen)
-{
-    static const char* codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-    unsigned long i, len2, leven;
-    unsigned char* p;
-
-    /* valid output size ? */
-    len2 = 4 * ( (inlen + 2) / 3);
-
-    if (*outlen < len2 + 1) {
-        *outlen = len2 + 1;
-        fprintf (stderr,"\n\nHERE\n\n");
-        return;
-    }
-
-    p = out;
-    leven = 3* (inlen / 3);
-
-    for (i = 0; i < leven; i += 3) {
-        *p++ = codes[ (in[0] >> 2) & 0x3F];
-        *p++ = codes[ ( ( (in[0] & 3) << 4) + (in[1] >> 4)) & 0x3F];
-        *p++ = codes[ ( ( (in[1] & 0xf) << 2) + (in[2] >> 6)) & 0x3F];
-        *p++ = codes[in[2] & 0x3F];
-        in += 3;
-    }
-
-    if (i < inlen) {
-        unsigned a = in[0];
-        unsigned b = (i+1 < inlen) ? in[1] : 0;
-
-        *p++ = codes[ (a >> 2) & 0x3F];
-        *p++ = codes[ ( ( (a & 3) << 4) + (b >> 4)) & 0x3F];
-        *p++ = (i+1 < inlen) ? codes[ ( ( (b & 0xf) << 2)) & 0x3F] : '=';
-        *p++ = '=';
-    }
-
-    /* return ok */
-    *outlen = p - out;
-}
-
-const char onCaptionInfo708[] = { 0x02,0x00,0x0D, 'o','n','C','a','p','t','i','o','n','I','n','f','o',
-                                  0x08, 0x00, 0x00, 0x00, 0x02,
-                                  0x00, 0x04, 't','y','p','e',
-                                  0x02, 0x00, 0x03, '7','0','8',
-                                  0x00, 0x04, 'd','a','t','a',
-                                  0x02, 0x00,0x00
-                                };
-
-int flvtag_amfcaption_708 (flvtag_t* tag, uint32_t timestamp, sei_message_t* msg)
-{
-    flvtag_initamf (tag,timestamp);
-    unsigned long size = 1 + (4 * ( (sei_message_size (msg) + 2) / 3));
-    flvtag_reserve (tag, sizeof (onCaptionInfo708) + size + 3);
-    memcpy (flvtag_payload_data (tag),onCaptionInfo708,sizeof (onCaptionInfo708));
-    uint8_t* data = flvtag_payload_data (tag) + sizeof (onCaptionInfo708);
-    base64_encode (sei_message_data (msg), sei_message_size (msg), data, &size);
-
-    // Update the size of the base64 string
-    data[-2] = size >> 8;
-    data[-1] = size >> 0;
-    // write the last array element
-    data[size+0] = 0x00;
-    data[size+1] = 0x00;
-    data[size+2] = 0x09;
-    flvtag_updatesize (tag, sizeof (onCaptionInfo708) + size + 3);
-
-    return 1;
-}
-
-const char onCaptionInfoUTF8[] = { 0x02,0x00,0x0D, 'o','n','C','a','p','t','i','o','n','I','n','f','o',
-                                   0x08, 0x00, 0x00, 0x00, 0x02,
-                                   0x00, 0x04, 't','y','p','e',
-                                   0x02, 0x00, 0x04, 'U','T','F','8',
-                                   0x00, 0x04, 'd','a','t','a',
-                                   0x02, 0x00,0x00
-                                 };
-
-#define MAX_AMF_STRING 65636
-int flvtag_amfcaption_utf8 (flvtag_t* tag, uint32_t timestamp, const utf8_char_t* text)
-{
-    flvtag_initamf (tag,timestamp);
-    unsigned long size = strlen (text);
-
-    if (MAX_AMF_STRING < size) {
-        size = MAX_AMF_STRING;
-    }
-
-    flvtag_reserve (tag, sizeof (onCaptionInfoUTF8) + size + 3);
-    memcpy (flvtag_payload_data (tag),onCaptionInfoUTF8,sizeof (onCaptionInfoUTF8));
-    uint8_t* data = flvtag_payload_data (tag) + sizeof (onCaptionInfo708);
-    memcpy (data,text,size);
-    // Update the size of the string
-    data[-2] = size >> 8;
-    data[-1] = size >> 0;
-    // write the last array element
-    data[size+0] = 0x00;
-    data[size+1] = 0x00;
-    data[size+2] = 0x09;
-    flvtag_updatesize (tag, sizeof (onCaptionInfoUTF8) + size + 3);
-
-    return 1;
-}
-
-#define LENGTH_SIZE 4
-
-int flvtag_avcwritenal (flvtag_t* tag, uint8_t* data, size_t size)
-{
-    uint32_t flvsize = flvtag_size (tag);
-    flvtag_reserve (tag,flvsize+LENGTH_SIZE+size);
-    uint8_t* payload = tag->data + FLV_TAG_HEADER_SIZE + flvsize;
-    payload[0] = size>>24; // nalu size
-    payload[1] = size>>16;
-    payload[2] = size>>8;
-    payload[3] = size>>0;
-    memcpy (&payload[LENGTH_SIZE],data,size);
-    flvtag_updatesize (tag,flvsize+LENGTH_SIZE+size);
-
-    return 1;
-}
-
-int flvtag_addcaption (flvtag_t* tag, const utf8_char_t* text)
-{
-    if (flvtag_avcpackettype_nalu != flvtag_avcpackettype (tag)) {
-        return 0;
-    }
-
-    sei_t sei;
-    caption_frame_t frame;
-
-    sei_init (&sei);
-    caption_frame_init (&frame);
-    caption_frame_from_text (&frame, text);
-    sei_from_caption_frame (&sei, &frame);
-
-    uint8_t* sei_data = malloc (sei_render_size (&sei));
-    size_t sei_size = sei_render (&sei, sei_data);
-
-    // rewrite tag
-    flvtag_t new_tag;
-    flvtag_initavc (&new_tag, flvtag_dts (tag), flvtag_cts (tag), flvtag_frametype (tag));
-    uint8_t* data = flvtag_payload_data (tag);
-    ssize_t  size = flvtag_payload_size (tag);
-
-    while (0<size) {
-        uint8_t*  nalu_data = &data[LENGTH_SIZE];
-        uint8_t   nalu_type = nalu_data[0]&0x1F;
-        uint32_t  nalu_size = (data[0]<<24) | (data[1]<<16) | (data[2]<<8) | data[3];
-        data += LENGTH_SIZE + nalu_size;
-        size -= LENGTH_SIZE + nalu_size;
-
-        if (0 < sei_size && 7 != nalu_type && 8 != nalu_type && 9 != nalu_type ) {
-            // fprintf (stderr,"Wrote SEI %d '%d'\n\n", sei_size, sei_data[3]);
-            flvtag_avcwritenal (&new_tag,sei_data,sei_size);
-            sei_size = 0;
-        }
-
-        flvtag_avcwritenal (&new_tag,nalu_data,nalu_size);
-    }
-
-    // On the off chance we have an empty frame,
-    // We still wish to append the sei
-    if (0<sei_size) {
-        // fprintf (stderr,"Wrote SEI %d\n\n", sei_size);
-        flvtag_avcwritenal (&new_tag,sei_data,sei_size);
-        sei_size = 0;
-    }
-
-    if (sei_data) {
-        free (sei_data);
-    }
-
-    free (tag->data);
-    sei_free (&sei);
-    tag->data = new_tag.data;
-    tag->aloc = new_tag.aloc;
-    return 1;
-}
diff --git a/deps/libcaption/examples/flv.h b/deps/libcaption/examples/flv.h
deleted file mode 100644
index 9bdd93f..0000000
--- a/deps/libcaption/examples/flv.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_FLV_H
-#define LIBCAPTION_FLV_H
-
-#include <stdio.h>
-#include <stddef.h>
-#include <inttypes.h>
-#define FLV_HEADER_SIZE     13
-#define FLV_FOOTER_SIZE      4
-#define FLV_TAG_HEADER_SIZE 11
-#define FLV_TAG_FOOTER_SIZE  4
-////////////////////////////////////////////////////////////////////////////////
-#include "avc.h"
-////////////////////////////////////////////////////////////////////////////////
-typedef struct {
-    uint8_t* data;
-    size_t   aloc;
-} flvtag_t;
-
-void flvtag_init (flvtag_t* tag);
-void flvtag_free (flvtag_t* tag);
-void flvtag_swap (flvtag_t* tag1, flvtag_t* tag2);
-////////////////////////////////////////////////////////////////////////////////
-typedef enum {
-    flvtag_type_audio      = 0x08,
-    flvtag_type_video      = 0x09,
-    flvtag_type_scriptdata = 0x12,
-} flvtag_type_t;
-
-static inline flvtag_type_t flvtag_type (flvtag_t* tag) { return (flvtag_type_t) tag->data[0]&0x1F; }
-////////////////////////////////////////////////////////////////////////////////
-typedef enum {
-    flvtag_soundformat_unknown                            = -1,
-    flvtag_soundformat_linearpcmplatformendian            =  0,
-    flvtag_soundformat_adpcm                              =  1,
-    flvtag_soundformat_mp3                                =  2,
-    flvtag_soundformat_linearpcmlittleendian              =  3,
-    flvtag_soundformat_nellymoser_16khzmono               =  4,
-    flvtag_soundformat_nellymoser_8khzmono                =  5,
-    flvtag_soundformat_nellymoser                         =  6,
-    flvtag_soundformat_g711alawlogarithmicpcm             =  7,
-    flvtag_soundformat_g711mulawlogarithmicpcm            =  8,
-    flvtag_soundformat_reserved                           =  9,
-    flvtag_soundformat_aac                                = 10,
-    flvtag_soundformat_speex                              = 11,
-    flvtag_soundformat_mp3_8khz                           = 14,
-    flvtag_soundformat_devicespecificsound                = 15
-} flvtag_soundformat_t;
-
-static inline flvtag_soundformat_t flvtag_soundformat (flvtag_t* tag) { return (flvtag_type_audio!=flvtag_type (tag)) ?flvtag_soundformat_unknown: (flvtag_soundformat_t) (tag->data[0]>>4) &0x0F; }
-////////////////////////////////////////////////////////////////////////////////
-typedef enum {
-    flvtag_codecid_unknown                = -1,
-    flvtag_codecid_sorensonh263           =  2,
-    flvtag_codecid_screenvideo            =  3,
-    flvtag_codecid_on2vp6                 =  4,
-    flvtag_codecid_on2vp6withalphachannel =  5,
-    flvtag_codecid_screenvideoversion2    =  6,
-    flvtag_codecid_avc                    =  7
-} flvtag_codecid_t;
-
-static inline flvtag_codecid_t flvtag_codecid (flvtag_t* tag) { return (flvtag_type_video!=flvtag_type (tag)) ? (flvtag_codecid_unknown) : (tag->data[11]&0x0F); }
-////////////////////////////////////////////////////////////////////////////////
-typedef enum {
-    flvtag_frametype_unknown              = -1,
-    flvtag_frametype_keyframe             =  1,
-    flvtag_frametype_interframe           =  2,
-    flvtag_frametype_disposableinterframe =  3,
-    flvtag_frametype_generatedkeyframe    =  4,
-    flvtag_frametype_commandframe         =  5
-} flvtag_frametype_t;
-
-static inline flvtag_frametype_t flvtag_frametype (flvtag_t* tag) { return (flvtag_type_video!=flvtag_type (tag)) ?flvtag_frametype_keyframe: ( (tag->data[11]>>4) &0x0F); }
-////////////////////////////////////////////////////////////////////////////////
-typedef enum {
-    flvtag_avcpackettype_unknown        = -1,
-    flvtag_avcpackettype_sequenceheader =  0,
-    flvtag_avcpackettype_nalu           =  1,
-    flvtag_avcpackettype_endofsequence  =  2
-} flvtag_avcpackettype_t;
-
-static inline flvtag_avcpackettype_t flvtag_avcpackettype (flvtag_t* tag) { return (flvtag_codecid_avc!=flvtag_codecid (tag)) ?flvtag_avcpackettype_unknown:tag->data[12]; }
-////////////////////////////////////////////////////////////////////////////////
-static inline size_t   flvtag_size (flvtag_t* tag) { return (tag->data[1]<<16) | (tag->data[2]<<8) | tag->data[3]; }
-static inline uint32_t flvtag_timestamp (flvtag_t* tag) { return (tag->data[7]<<24) | (tag->data[4]<<16) | (tag->data[5]<<8) | tag->data[6]; }
-static inline uint32_t flvtag_dts (flvtag_t* tag) { return flvtag_timestamp (tag); }
-static inline uint32_t flvtag_cts (flvtag_t* tag) { return (flvtag_avcpackettype_nalu!=flvtag_avcpackettype (tag)) ?0: (tag->data[13]<<16) | (tag->data[14]<<8) |tag->data[15]; }
-static inline uint32_t flvtag_pts (flvtag_t* tag) { return flvtag_dts (tag)+flvtag_cts (tag); }
-static inline double flvtag_dts_seconds (flvtag_t* tag) { return flvtag_dts (tag) / 1000.0; }
-static inline double flvtag_cts_seconds (flvtag_t* tag) { return flvtag_cts (tag) / 1000.0; }
-static inline double flvtag_pts_seconds (flvtag_t* tag) { return flvtag_pts (tag) / 1000.0; }
-////////////////////////////////////////////////////////////////////////////////
-size_t flvtag_header_size (flvtag_t* tag);
-size_t flvtag_payload_size (flvtag_t* tag);
-uint8_t* flvtag_payload_data (flvtag_t* tag);
-////////////////////////////////////////////////////////////////////////////////
-FILE* flv_open_read (const char* flv);
-FILE* flv_open_write (const char* flv);
-FILE* flv_close (FILE* flv);
-////////////////////////////////////////////////////////////////////////////////
-static inline const uint8_t* flvtag_raw_data (flvtag_t* tag) { return tag->data; }
-static inline const size_t flvtag_raw_size (flvtag_t* tag) { return flvtag_size (tag)+FLV_TAG_HEADER_SIZE+FLV_TAG_FOOTER_SIZE; }
-////////////////////////////////////////////////////////////////////////////////
-int flv_read_tag (FILE* flv, flvtag_t* tag);
-int flv_write_tag (FILE* flv, flvtag_t* tag);
-int flv_read_header (FILE* flv, int* has_audio, int* has_video);
-int flv_write_header (FILE* flv, int has_audio, int has_video);
-////////////////////////////////////////////////////////////////////////////////
-// If the tage has more that on sei message, they will be combined into one
-sei_t* flv_read_sei (FILE* flv, flvtag_t* tag);
-////////////////////////////////////////////////////////////////////////////////
-int flvtag_initavc (flvtag_t* tag, uint32_t dts, int32_t cts, flvtag_frametype_t type);
-int flvtag_avcwritenal (flvtag_t* tag, uint8_t* data, size_t size);
-int flvtag_addcaption (flvtag_t* tag, const utf8_char_t* text);
-////////////////////////////////////////////////////////////////////////////////
-int flvtag_amfcaption_708 (flvtag_t* tag, uint32_t timestamp, sei_message_t* msg);
-////////////////////////////////////////////////////////////////////////////////
-// This method is expermental, and not currently available on Twitch
-int flvtag_amfcaption_utf8 (flvtag_t* tag, uint32_t timestamp, const utf8_char_t* text);
-#endif
diff --git a/deps/libcaption/examples/flv2srt.c b/deps/libcaption/examples/flv2srt.c
deleted file mode 100644
index 5afa171..0000000
--- a/deps/libcaption/examples/flv2srt.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "flv.h"
-#include "srt.h"
-#include "avc.h"
-
-#define LENGTH_SIZE 4
-int main (int argc, char** argv)
-{
-    const char* path = argv[1];
-
-    sei_t sei;
-    flvtag_t tag;
-    srt_t* srt = 0, *head = 0;
-    int i, has_audio, has_video;
-    caption_frame_t frame;
-
-    flvtag_init (&tag);
-    caption_frame_init (&frame);
-
-    FILE* flv = flv_open_read (path);
-
-    if (!flv_read_header (flv,&has_audio,&has_video)) {
-        fprintf (stderr,"'%s' Not an flv file\n", path);
-    } else {
-        fprintf (stderr,"Reading from '%s'\n", path);
-    }
-
-    while (flv_read_tag (flv,&tag)) {
-        if (flvtag_avcpackettype_nalu == flvtag_avcpackettype (&tag)) {
-            ssize_t  size = flvtag_payload_size (&tag);
-            uint8_t* data = flvtag_payload_data (&tag);
-
-            while (0<size) {
-                ssize_t  nalu_size = (data[0]<<24) | (data[1]<<16) | (data[2]<<8) | data[3];
-                uint8_t* nalu_data = &data[4];
-                uint8_t  nalu_type = nalu_data[0]&0x1F;
-                data += nalu_size + LENGTH_SIZE;
-                size -= nalu_size + LENGTH_SIZE;
-
-                if (6 == nalu_type) {
-                    sei_init (&sei);
-                    sei_parse_nalu (&sei, nalu_data, nalu_size, flvtag_dts (&tag), flvtag_cts (&tag));
-
-                    cea708_t cea708;
-                    sei_message_t* msg;
-                    cea708_init (&cea708);
-
-                    // for (msg = sei_message_head (&sei) ; msg ; msg = sei_message_next (msg)) {
-                    //     if (sei_type_user_data_registered_itu_t_t35 == sei_message_type (msg)) {
-                    //         cea708_parse (sei_message_data (msg), sei_message_size (msg), &cea708);
-                    //         cea708_dump (&cea708);
-                    //     }
-                    // }
-
-                    // sei_dump(&sei);
-                    sei_to_caption_frame (&sei,&frame);
-                    sei_free (&sei);
-
-                    // caption_frame_dump (&frame);
-                    srt = srt_from_caption_frame (&frame,srt,&head);
-                }
-            }
-        }
-    }
-
-    srt_dump (head);
-    srt_free (head);
-
-    return 1;
-}
diff --git a/deps/libcaption/examples/party.c b/deps/libcaption/examples/party.c
deleted file mode 100644
index e65fed4..0000000
--- a/deps/libcaption/examples/party.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "flv.h"
-#include "avc.h"
-
-#define CAPTION_METHOD_SEI_708  0 // embedded 708
-#define CAPTION_METHOD_AMF_708  1 // onCaptionInfo type = 708
-#define CAPTION_METHOD_AMF_UTF8 2 // onCaptionInfo type = utf8
-#define CAPTION_METHOD CAPTION_METHOD_SEI_708
-
-void get_dudes (char* str)
-{
-    sprintf (str, " %s%s %s(-_-)%s %s(-_-)%s.%s(-_-)%s %s%s", EIA608_CHAR_EIGHTH_NOTE, EIA608_CHAR_EIGHTH_NOTE,
-             ! (rand() % 2) ? EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT : EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT,
-             ! (rand() % 2) ? EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT : EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT,
-             ! (rand() % 2) ? EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT : EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT,
-             ! (rand() % 2) ? EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT : EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT,
-             ! (rand() % 2) ? EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT : EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT,
-             ! (rand() % 2) ? EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT : EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT,
-             EIA608_CHAR_EIGHTH_NOTE, EIA608_CHAR_EIGHTH_NOTE);
-}
-
-void write_amfcaptions_708 (FILE* out, uint32_t timestamp, const char* text)
-{
-    sei_t sei;
-    flvtag_t tag;
-    sei_message_t* msg;
-    caption_frame_t frame;
-    sei_init (&sei);
-    flvtag_init (&tag);
-    caption_frame_init (&frame);
-    caption_frame_from_text (&frame, text);
-    sei_from_caption_frame (&sei, &frame);
-    // caption_frame_dump (&frame);
-
-    for (msg = sei_message_head (&sei); msg; msg=sei_message_next (msg),++timestamp) {
-        flvtag_amfcaption_708 (&tag,timestamp,msg);
-        flv_write_tag (out,&tag);
-    }
-
-    sei_free (&sei);
-    flvtag_free (&tag);
-}
-
-
-void write_amfcaptions_utf8 (FILE* out, uint32_t timestamp, const utf8_char_t* text)
-{
-    flvtag_t tag;
-    flvtag_init (&tag);
-    flvtag_amfcaption_utf8 (&tag,timestamp,text);
-    flv_write_tag (out,&tag);
-    flvtag_free (&tag);
-}
-
-int main (int argc, char** argv)
-{
-    flvtag_t tag;
-    uint32_t nextParty = 1000;
-    int has_audio, has_video;
-    FILE* flv = flv_open_read (argv[1]);
-    FILE* out = flv_open_write (argv[2]);
-    char partyDudes[64];
-
-    flvtag_init (&tag);
-
-    if (!flv_read_header (flv,&has_audio,&has_video)) {
-        fprintf (stderr,"%s is not an flv file\n", argv[1]);
-        return EXIT_FAILURE;
-    }
-
-    flv_write_header (out,has_audio,has_video);
-
-    while (flv_read_tag (flv,&tag)) {
-
-        if (flvtag_avcpackettype_nalu == flvtag_avcpackettype (&tag) && nextParty <= flvtag_timestamp (&tag)) {
-            get_dudes (partyDudes);
-
-            if (CAPTION_METHOD == CAPTION_METHOD_SEI_708) {
-                flvtag_addcaption (&tag, partyDudes);
-            } else if (CAPTION_METHOD == CAPTION_METHOD_AMF_708) {
-                write_amfcaptions_708 (out,nextParty,partyDudes);
-            } else if (CAPTION_METHOD == CAPTION_METHOD_AMF_708) {
-                write_amfcaptions_utf8 (out, nextParty, partyDudes);
-            } else {
-                fprintf (stderr,"Unknnow method\n");
-                return EXIT_FAILURE;
-
-            }
-
-            fprintf (stderr,"%d: %s\n",nextParty, partyDudes);
-            nextParty += 500; // party all the time
-        }
-
-        flv_write_tag (out,&tag);
-    }
-
-    return EXIT_SUCCESS;
-}
diff --git a/deps/libcaption/examples/rollup.c b/deps/libcaption/examples/rollup.c
deleted file mode 100644
index e290af6..0000000
--- a/deps/libcaption/examples/rollup.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "flv.h"
-#include "avc.h"
-#include "srt.h"
-#include "wonderland.h"
-
-#define SECONDS_PER_LINE 3.0
-srt_t* appennd_caption (const utf8_char_t* data, srt_t* prev, srt_t** head)
-{
-
-    int r, c, chan = 0;
-    ssize_t size = (ssize_t) strlen (data);
-    size_t char_count, char_length, line_length = 0, trimmed_length = 0;
-
-    for (r = 0 ; 0 < size && SCREEN_ROWS > r ; ++r) {
-        line_length = utf8_line_length (data);
-        trimmed_length = utf8_trimmed_length (data,line_length);
-        char_count = utf8_char_count (data,trimmed_length);
-
-        // If char_count is greater than one line can display, split it.
-        if (SCREEN_COLS < char_count) {
-            char_count = utf8_wrap_length (data,SCREEN_COLS);
-            line_length = utf8_string_length (data,char_count+1);
-        }
-
-        // fprintf (stderr,"%.*s\n", line_length, data);
-        prev = srt_new (data, line_length, prev ? prev->timestamp + SECONDS_PER_LINE : 0, prev, head);
-
-        data += line_length;
-        size -= (ssize_t) line_length;
-    }
-
-    return prev;
-}
-
-int main (int argc, char** argv)
-{
-    int i = 0;
-    flvtag_t tag;
-    srt_t* head = 0, *tail = 0;
-    int has_audio, has_video;
-    FILE* flv = flv_open_read (argv[1]);
-    FILE* out = flv_open_write (argv[2]);
-    flvtag_init (&tag);
-
-    for (i = 0 ; wonderland[i][0]; ++i) {
-        tail = appennd_caption (wonderland[i], tail, &head);
-    }
-
-
-    if (!flv_read_header (flv,&has_audio,&has_video)) {
-        fprintf (stderr,"%s is not an flv file\n", argv[1]);
-        return EXIT_FAILURE;
-    }
-
-    flv_write_header (out,has_audio,has_video);
-
-    while (flv_read_tag (flv,&tag)) {
-        if (head && flvtag_avcpackettype_nalu == flvtag_avcpackettype (&tag) && head->timestamp <= flvtag_pts_seconds (&tag)) {
-            fprintf (stderr,"%f %s\n", flvtag_pts_seconds (&tag), srt_data (head));
-            flvtag_addcaption (&tag, srt_data (head));
-            head = srt_free_head (head);
-        }
-
-
-        flv_write_tag (out,&tag);
-    }
-
-    return EXIT_SUCCESS;
-}
diff --git a/deps/libcaption/examples/rtmpspit.c b/deps/libcaption/examples/rtmpspit.c
deleted file mode 100644
index c7ef113..0000000
--- a/deps/libcaption/examples/rtmpspit.c
+++ /dev/null
@@ -1,165 +0,0 @@
-#include "flv.h"
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/select.h>
-#include <librtmp/log.h>
-#include <librtmp/rtmp.h>
-
-
-int MyRTMP_Write (RTMP* r, const char* buf, int size)
-{
-    RTMPPacket* pkt = &r->m_write;
-    char* enc;
-    int s2 = size, ret, num;
-
-    pkt->m_nChannel = 0x04;   /* source channel */
-    pkt->m_nInfoField2 = r->m_stream_id;
-
-    while (s2) {
-        if (!pkt->m_nBytesRead) {
-            if (size < 11) {
-                /* FLV pkt too small */
-                return 0;
-            }
-
-            if (buf[0] == 'F' && buf[1] == 'L' && buf[2] == 'V') {
-                buf += 13;
-                s2 -= 13;
-            }
-
-            pkt->m_packetType = *buf++;
-            pkt->m_nBodySize = AMF_DecodeInt24 (buf);
-            buf += 3;
-            pkt->m_nTimeStamp = AMF_DecodeInt24 (buf);
-            buf += 3;
-            pkt->m_nTimeStamp |= *buf++ << 24;
-            buf += 3;
-            s2 -= 11;
-
-            if ( ( (pkt->m_packetType == RTMP_PACKET_TYPE_AUDIO
-                    || pkt->m_packetType == RTMP_PACKET_TYPE_VIDEO) &&
-                    !pkt->m_nTimeStamp) || pkt->m_packetType == RTMP_PACKET_TYPE_INFO) {
-                pkt->m_headerType = RTMP_PACKET_SIZE_LARGE;
-            } else {
-                pkt->m_headerType = RTMP_PACKET_SIZE_MEDIUM;
-            }
-
-            if (!RTMPPacket_Alloc (pkt, pkt->m_nBodySize)) {
-                RTMP_Log (RTMP_LOGDEBUG, "%s, failed to allocate packet", __FUNCTION__);
-                return FALSE;
-            }
-
-            enc = pkt->m_body;
-        } else {
-            enc = pkt->m_body + pkt->m_nBytesRead;
-        }
-
-        num = pkt->m_nBodySize - pkt->m_nBytesRead;
-
-        if (num > s2) {
-            num = s2;
-        }
-
-        memcpy (enc, buf, num);
-        pkt->m_nBytesRead += num;
-        s2 -= num;
-        buf += num;
-
-        if (pkt->m_nBytesRead == pkt->m_nBodySize) {
-            ret = RTMP_SendPacket (r, pkt, FALSE);
-            RTMPPacket_Free (pkt);
-            pkt->m_nBytesRead = 0;
-
-            if (!ret) {
-                return -1;
-            }
-
-            buf += 4;
-            s2 -= 4;
-
-            if (s2 < 0) {
-                break;
-            }
-        }
-    }
-
-    return size+s2;
-}
-
-int main (int argc, const char** argv)
-{
-    FILE* flv;
-    RTMP* rtmp;
-    RTMPPacket rtmpPacket;
-
-    flvtag_t tag;
-    int32_t timestamp = 0;
-    int has_audio, has_video;
-    char* url = 0;
-
-    if (2 >= argc) {
-        fprintf (stderr,"Usage %s [input] [url]\n",argv[0]);
-    }
-
-    url = (char*) argv[2];
-    flv = flv_open_read (argv[1]);
-
-    if (! flv) {
-        fprintf (stderr,"Could not open %s\n",argv[1]);
-        return EXIT_FAILURE;
-    }
-
-    if (! flv_read_header (flv, &has_audio, &has_video)) {
-        fprintf (stderr,"Not an flv file %s\n",argv[1]);
-        return EXIT_FAILURE;
-    }
-
-    flvtag_init (&tag);
-    rtmp = RTMP_Alloc();
-    RTMP_Init (rtmp);
-    fprintf (stderr,"Connecting to %s\n", url);
-    RTMP_SetupURL (rtmp, url);
-    RTMP_EnableWrite (rtmp);
-
-    RTMP_Connect (rtmp, NULL);
-    RTMP_ConnectStream (rtmp, 0);
-    memset (&rtmpPacket, 0, sizeof (RTMPPacket));
-
-    if (! RTMP_IsConnected (rtmp)) {
-        fprintf (stderr,"RTMP_IsConnected() Error\n");
-        return EXIT_FAILURE;
-    }
-
-    while (flv_read_tag (flv,&tag)) {
-        if (! RTMP_IsConnected (rtmp) || RTMP_IsTimedout (rtmp)) {
-            fprintf (stderr,"RTMP_IsConnected() Error\n");
-            return EXIT_FAILURE;
-        }
-
-        if (flvtag_timestamp (&tag) > timestamp) {
-            usleep (1000 * (flvtag_timestamp (&tag) - timestamp));
-            timestamp = flvtag_timestamp (&tag);
-        }
-
-        MyRTMP_Write (rtmp, (const char*) flvtag_raw_data (&tag),flvtag_raw_size (&tag));
-
-        // Handle RTMP ping and such
-        fd_set sockset; struct timeval timeout = {0,0};
-        FD_ZERO (&sockset); FD_SET (RTMP_Socket (rtmp), &sockset);
-        register int result = select (RTMP_Socket (rtmp) + 1, &sockset, NULL, NULL, &timeout);
-
-        if (result == 1 && FD_ISSET (RTMP_Socket (rtmp), &sockset)) {
-            RTMP_ReadPacket (rtmp, &rtmpPacket);
-
-            if (! RTMPPacket_IsReady (&rtmpPacket)) {
-                fprintf (stderr,"Received RTMP packet\n");
-                RTMP_ClientPacket (rtmp,&rtmpPacket);
-                RTMPPacket_Free (&rtmpPacket);
-            }
-        }
-    }
-
-    return EXIT_SUCCESS;
-}
diff --git a/deps/libcaption/examples/scc2srt.c b/deps/libcaption/examples/scc2srt.c
deleted file mode 100644
index 565fd23..0000000
--- a/deps/libcaption/examples/scc2srt.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "srt.h"
-#include "scc.h"
-
-#define MAX_SCC_SIZE (10*1024*1024)
-#define MAX_READ_SIZE 4096
-#define MAX_CC 128
-
-size_t read_file (FILE* file, utf8_char_t* data, size_t size)
-{
-    size_t read, totl = 0;
-
-    while (0 < (read = fread (data,1,MAX_READ_SIZE<size?MAX_READ_SIZE:size,file))) {
-        totl += read; data += read; size -= read;
-    }
-
-    return totl;
-}
-
-srt_t* scc2srt (const char* data)
-{
-    double pts;
-    size_t line_size = 0;
-    int cc_idx, count, i;
-    srt_t* srt = 0, *head = 0;
-    caption_frame_t frame;
-    uint16_t cc_data[MAX_CC];
-
-    while (0 < (line_size = utf8_line_length (data))) {
-        caption_frame_init (&frame);
-        int cc_count = scc_to_608 (data, &pts, (uint16_t*) &cc_data, MAX_CC);
-        data += line_size;
-        data += utf8_line_length (data); // skip empty line
-
-        // fprintf (stderr,"%f, %d| %.*s\n", pts, cc_count, (int) line_size,data);
-
-        for (cc_idx = 0 ; cc_idx < cc_count ; ++cc_idx) {
-            // eia608_dump (cc_data[cc_idx]);
-            caption_frame_decode (&frame,cc_data[cc_idx],pts);
-        }
-
-        // utf8_char_t buff[CAPTION_FRAME_DUMP_BUF_SIZE];
-        // size_t size = caption_frame_dump (&frame, buff);
-        // fprintf (stderr,"%s\n", buff);
-        srt = srt_from_caption_frame (&frame,srt,&head);
-    }
-
-    return head;
-}
-
-int main (int argc, char** argv)
-{
-    char frame_buf[CAPTION_FRAME_DUMP_BUF_SIZE];
-
-    if (argc < 2) {
-        return 0;
-    }
-
-    FILE* file = fopen (argv[1],"r");
-
-    if (! file) {
-        return 0;
-    }
-
-    utf8_char_t* data = malloc (MAX_SCC_SIZE);
-    read_file (file,data,MAX_SCC_SIZE);
-    srt_t* srt = scc2srt (data);
-    srt_dump (srt);
-    srt_free (srt);
-    free (data);
-}
diff --git a/deps/libcaption/examples/srt2vtt.c b/deps/libcaption/examples/srt2vtt.c
deleted file mode 100644
index e6ea31c..0000000
--- a/deps/libcaption/examples/srt2vtt.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "srt.h"
-
-#define MAX_SRT_SIZE (10*1024*1024)
-#define MAX_READ_SIZE 4096
-
-size_t read_file (FILE* file, utf8_char_t* data, size_t size)
-{
-    size_t read, totl = 0;
-
-    while (0 < (read = fread (data,1,MAX_READ_SIZE<size?MAX_READ_SIZE:size,file))) {
-        totl += read; data += read; size -= read;
-    }
-
-    return totl;
-}
-
-int main (int argc, char** argv)
-{
-    srt_t* srt;
-    caption_frame_t frame;
-    char frame_buf[CAPTION_FRAME_DUMP_BUF_SIZE];
-
-    if (argc < 2) {
-        return 0;
-    }
-
-    FILE* file = fopen (argv[1],"r");
-
-    if (! file) {
-        return 0;
-    }
-
-    utf8_char_t* data = malloc (MAX_SRT_SIZE);
-    size_t size = read_file (file,data,MAX_SRT_SIZE);
-    srt_t* head = srt_parse (data,size);
-    vtt_dump (head);
-    srt_free (head);
-}
diff --git a/deps/libcaption/examples/srtdump.c b/deps/libcaption/examples/srtdump.c
deleted file mode 100644
index b63c467..0000000
--- a/deps/libcaption/examples/srtdump.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "srt.h"
-#include "avc.h"
-// #include "sei.h"
-
-#define MAX_SRT_SIZE (10*1024*1024)
-#define MAX_READ_SIZE 4096
-
-size_t read_file (FILE* file, utf8_char_t* data, size_t size)
-{
-    size_t read, totl = 0;
-
-    while (0 < (read = fread (data,1,MAX_READ_SIZE<size?MAX_READ_SIZE:size,file))) {
-        totl += read; data += read; size -= read;
-    }
-
-    return totl;
-}
-
-int main (int argc, char** argv)
-{
-    srt_t* srt;
-    caption_frame_t frame;
-
-    if (argc < 2) {
-        return 0;
-    }
-
-    FILE* file = fopen (argv[1],"r");
-
-    if (! file) {
-        return 0;
-    }
-
-    utf8_char_t* data = (utf8_char_t*) malloc (MAX_SRT_SIZE);
-    size_t size = read_file (file,data,MAX_SRT_SIZE);
-    srt_t* head = srt_parse (data,size);
-
-    for (srt = head ; srt ; srt = srt->next) {
-        caption_frame_init (&frame);
-        srt_to_caption_frame (srt,&frame);
-        caption_frame_dump (&frame);
-    }
-
-    srt_free (head);
-}
diff --git a/deps/libcaption/examples/ts.c b/deps/libcaption/examples/ts.c
deleted file mode 100644
index fc82c53..0000000
--- a/deps/libcaption/examples/ts.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "ts.h"
-#include <string.h>
-
-void ts_init (ts_t* ts)
-{
-    memset (ts,0,sizeof (ts_t));
-}
-
-static int64_t ts_parse_pts (const uint8_t* data)
-{
-    // 0000 1110  1111 1111  1111 1110  1111 1111  1111 1110
-    uint64_t pts = 0;
-    pts |= (uint64_t) (data[0] & 0x0E) << 29;
-    pts |= (uint64_t) (data[1] & 0xFF) << 22;
-    pts |= (uint64_t) (data[2] & 0xFE) << 14;
-    pts |= (uint64_t) (data[3] & 0xFF) <<  7;
-    pts |= (uint64_t) (data[4] & 0xFE) >>  1;
-    return pts;
-}
-
-int ts_parse_packet (ts_t* ts, const uint8_t* data)
-{
-    size_t i = 0;
-    int pusi = !! (data[i + 1] & 0x40);  // Payload Unit Start Indicator
-    int16_t pid = ( (data[i + 1] & 0x1F) << 8) | data[i + 2];    // PID
-    int adaption_present = !! (data[i + 3] & 0x20);  // Adaptation field exist
-    int payload_present = !! (data[i + 3] & 0x10);  // Contains payload
-    i += 4;
-
-    ts->data = 0;
-    ts->size = 0;
-
-    if (adaption_present) {
-        uint8_t adaption_length = data[i + 0]; // adaption field length
-        i += 1 + adaption_length;
-    }
-
-    if (pid == 0) {
-        if (payload_present) {
-            // Skip the payload.
-            i += data[i] + 1;
-        }
-
-        ts->pmtpid = ( (data[i + 10] & 0x1F) << 8) | data[i + 11];
-    } else if (pid == ts->pmtpid) {
-        // PMT
-        if (payload_present) {
-            // Skip the payload.
-            i += data[i] + 1;
-        }
-
-        uint16_t section_length = ( (data[i + 1] & 0x0F) << 8) | data[i + 2];
-        int current = data[i + 5] & 0x01;
-        int16_t program_info_length = ( (data[i + 10] & 0x0F) << 8) | data[i + 11];
-        int16_t descriptor_loop_length = section_length - (9 + program_info_length + 4);   // 4 for the crc
-
-        i += 12 + program_info_length;
-
-        if (current) {
-            while (descriptor_loop_length >= 5) {
-                uint8_t stream_type    = data[i];
-                int16_t elementary_pid = ( (data[i + 1] & 0x1F) << 8) | data[i + 2];
-                int16_t esinfo_length  = ( (data[i + 3] & 0x0F) << 8) | data[i + 4];
-
-                if (0x1B == stream_type) {
-                    ts->avcpid = elementary_pid;
-                }
-
-                i += 5 + esinfo_length;
-                descriptor_loop_length -= 5 + esinfo_length;
-            }
-        }
-    } else if (payload_present && pid == ts->avcpid) {
-        if (pusi) {
-            // int data_alignment = !! (data[i + 6] & 0x04);
-            int has_pts = !! (data[i + 7] & 0x80);
-            int has_dts = !! (data[i + 7] & 0x40);
-            uint8_t header_length = data[i + 8];
-
-            if (has_pts) {
-                ts->pts = ts_parse_pts (&data[i + 9]);
-                ts->dts = has_dts ? ts_parse_pts (&data[i + 14]) : ts->pts;
-            }
-
-            i += 9 + header_length;
-        }
-
-        ts->data = &data[i];
-        ts->size = TS_PACKET_SIZE-i;
-        return LIBCAPTION_READY;
-    }
-
-    return LIBCAPTION_OK;
-}
diff --git a/deps/libcaption/examples/ts.h b/deps/libcaption/examples/ts.h
deleted file mode 100644
index fb9e490..0000000
--- a/deps/libcaption/examples/ts.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#ifndef LIBCAPTION_TS_H
-#define LIBCAPTION_TS_H
-#include "caption.h"
-typedef struct {
-    int16_t pmtpid;
-    int16_t avcpid;
-    int64_t pts;
-    int64_t dts;
-    size_t  size;
-    const uint8_t* data;
-} ts_t;
-
-/*! \brief
-    \param
-
-    Expects 188 byte TS packet
-*/
-#define TS_PACKET_SIZE 188
-void ts_init (ts_t* ts);
-int ts_parse_packet (ts_t* ts, const uint8_t* data);
-// return timestamp in seconds
-static inline double ts_dts_seconds (ts_t* ts) { return ts->dts / 90000.0; }
-static inline double ts_pts_seconds (ts_t* ts) { return ts->pts / 90000.0; }
-static inline double ts_cts_seconds (ts_t* ts) { return (ts->dts - ts->pts) / 90000.0; }
-
-#endif
diff --git a/deps/libcaption/examples/ts2srt.c b/deps/libcaption/examples/ts2srt.c
deleted file mode 100644
index 18d0b1a..0000000
--- a/deps/libcaption/examples/ts2srt.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "ts.h"
-#include "srt.h"
-#include "avc.h"
-#include <stdio.h>
-
-int main (int argc, char** argv)
-{
-    const char* path = argv[1];
-
-    ts_t ts;
-    sei_t sei;
-    avcnalu_t nalu;
-    srt_t* srt = 0, *head = 0;
-    caption_frame_t frame;
-    uint8_t pkt[TS_PACKET_SIZE];
-    ts_init (&ts);
-    avcnalu_init (&nalu);
-    caption_frame_init (&frame);
-
-    FILE* file = fopen (path,"rb+");
-
-    while (TS_PACKET_SIZE == fread (&pkt[0],1,TS_PACKET_SIZE, file)) {
-        switch (ts_parse_packet (&ts,&pkt[0])) {
-        case LIBCAPTION_OK:
-            // fprintf (stderr,"read ts packet\n");
-            break;
-
-        case LIBCAPTION_READY: {
-            // fprintf (stderr,"read ts packet DATA\n");
-            while (ts.size) {
-                // fprintf (stderr,"ts.size %d (%02X%02X%02X%02X)\n",ts.size, ts.data[0], ts.data[1], ts.data[2], ts.data[3]);
-
-                switch (avcnalu_parse_annexb (&nalu, &ts.data, &ts.size)) {
-                case LIBCAPTION_OK:
-                    break;
-
-                case LIBCAPTION_ERROR:
-                    // fprintf (stderr,"LIBCAPTION_ERROR == avcnalu_parse_annexb()\n");
-                    avcnalu_init (&nalu);
-                    break;
-
-                case LIBCAPTION_READY: {
-
-                    if (6 == avcnalu_type (&nalu)) {
-                        // fprintf (stderr,"NALU %d (%d)\n", avcnalu_type (&nalu), avcnalu_size (&nalu));
-                        sei_init (&sei);
-                        sei_parse_avcnalu (&sei, &nalu, ts_dts_seconds (&ts), ts_cts_seconds (&ts));
-
-                        // sei_dump (&sei);
-
-                        if (LIBCAPTION_READY == sei_to_caption_frame (&sei,&frame)) {
-                            // caption_frame_dump (&frame);
-                            srt = srt_from_caption_frame (&frame,srt,&head);
-
-                            // srt_dump (srt);
-                        }
-
-                        sei_free (&sei);
-                    }
-
-                    avcnalu_init (&nalu);
-                } break;
-                }
-            }
-        } break;
-
-        case LIBCAPTION_ERROR:
-            // fprintf (stderr,"read ts packet ERROR\n");
-            break;
-        }
-
-    }
-
-    srt_dump (head);
-    srt_free (head);
-
-    return 1;
-}
diff --git a/deps/libcaption/examples/wonderland.h b/deps/libcaption/examples/wonderland.h
deleted file mode 100644
index 5c68f04..0000000
--- a/deps/libcaption/examples/wonderland.h
+++ /dev/null
@@ -1,2794 +0,0 @@
-const char* wonderland[] = {
-    "Project Gutenberg’s Alice’s Adventures in Wonderland, by Lewis Carroll",
-    "This eBook is for the use of anyone anywhere at no cost and with",
-    "almost no restrictions whatsoever.  You may copy it, give it away or",
-    "re-use it under the terms of the Project Gutenberg License included",
-    "with this eBook or online at www.gutenberg.org",
-    "Title: Alice’s Adventures in Wonderland",
-    "Author: Lewis Carroll",
-    "Posting Date: June 25, 2008 [EBook #11]",
-    "Release Date: March, 1994",
-    "Last Updated: October 6, 2016",
-    "Language: English",
-    "Character set encoding: UTF-8",
-    "*** START OF THIS PROJECT GUTENBERG EBOOK ALICE’S ADVENTURES IN WONDERLAND ***",
-    "ALICE’S ADVENTURES IN WONDERLAND",
-    "Lewis Carroll",
-    "THE MILLENNIUM FULCRUM EDITION 3.0",
-    "CHAPTER I. Down the Rabbit-Hole",
-    "Alice was beginning to get very tired of sitting by her sister on the",
-    "bank, and of having nothing to do: once or twice she had peeped into the",
-    "book her sister was reading, but it had no pictures or conversations in",
-    "it, ‘and what is the use of a book,’ thought Alice ‘without pictures or",
-    "conversations?’",
-    "So she was considering in her own mind (as well as she could, for the",
-    "hot day made her feel very sleepy and stupid), whether the pleasure",
-    "of making a daisy-chain would be worth the trouble of getting up and",
-    "picking the daisies, when suddenly a White Rabbit with pink eyes ran",
-    "close by her.",
-    "There was nothing so VERY remarkable in that; nor did Alice think it so",
-    "VERY much out of the way to hear the Rabbit say to itself, ‘Oh dear!",
-    "Oh dear! I shall be late!’ (when she thought it over afterwards, it",
-    "occurred to her that she ought to have wondered at this, but at the time",
-    "it all seemed quite natural); but when the Rabbit actually TOOK A WATCH",
-    "OUT OF ITS WAISTCOAT-POCKET, and looked at it, and then hurried on,",
-    "Alice started to her feet, for it flashed across her mind that she had",
-    "never before seen a rabbit with either a waistcoat-pocket, or a watch",
-    "to take out of it, and burning with curiosity, she ran across the field",
-    "after it, and fortunately was just in time to see it pop down a large",
-    "rabbit-hole under the hedge.",
-    "In another moment down went Alice after it, never once considering how",
-    "in the world she was to get out again.",
-    "The rabbit-hole went straight on like a tunnel for some way, and then",
-    "dipped suddenly down, so suddenly that Alice had not a moment to think",
-    "about stopping herself before she found herself falling down a very deep",
-    "well.",
-    "Either the well was very deep, or she fell very slowly, for she had",
-    "plenty of time as she went down to look about her and to wonder what was",
-    "going to happen next. First, she tried to look down and make out what",
-    "she was coming to, but it was too dark to see anything; then she",
-    "looked at the sides of the well, and noticed that they were filled with",
-    "cupboards and book-shelves; here and there she saw maps and pictures",
-    "hung upon pegs. She took down a jar from one of the shelves as",
-    "she passed; it was labelled ‘ORANGE MARMALADE’, but to her great",
-    "disappointment it was empty: she did not like to drop the jar for fear",
-    "of killing somebody, so managed to put it into one of the cupboards as",
-    "she fell past it.",
-    "‘Well!’ thought Alice to herself, ‘after such a fall as this, I shall",
-    "think nothing of tumbling down stairs! How brave they’ll all think me at",
-    "home! Why, I wouldn’t say anything about it, even if I fell off the top",
-    "of the house!’ (Which was very likely true.)",
-    "Down, down, down. Would the fall NEVER come to an end! ‘I wonder how",
-    "many miles I’ve fallen by this time?’ she said aloud. ‘I must be getting",
-    "somewhere near the centre of the earth. Let me see: that would be four",
-    "thousand miles down, I think--’ (for, you see, Alice had learnt several",
-    "things of this sort in her lessons in the schoolroom, and though this",
-    "was not a VERY good opportunity for showing off her knowledge, as there",
-    "was no one to listen to her, still it was good practice to say it over)",
-    "‘--yes, that’s about the right distance--but then I wonder what Latitude",
-    "or Longitude I’ve got to?’ (Alice had no idea what Latitude was, or",
-    "Longitude either, but thought they were nice grand words to say.)",
-    "Presently she began again. ‘I wonder if I shall fall right THROUGH the",
-    "earth! How funny it’ll seem to come out among the people that walk with",
-    "their heads downward! The Antipathies, I think--’ (she was rather glad",
-    "there WAS no one listening, this time, as it didn’t sound at all the",
-    "right word) ‘--but I shall have to ask them what the name of the country",
-    "is, you know. Please, Ma’am, is this New Zealand or Australia?’ (and",
-    "she tried to curtsey as she spoke--fancy CURTSEYING as you’re falling",
-    "through the air! Do you think you could manage it?) ‘And what an",
-    "ignorant little girl she’ll think me for asking! No, it’ll never do to",
-    "ask: perhaps I shall see it written up somewhere.’",
-    "Down, down, down. There was nothing else to do, so Alice soon began",
-    "talking again. ‘Dinah’ll miss me very much to-night, I should think!’",
-    "(Dinah was the cat.) ‘I hope they’ll remember her saucer of milk at",
-    "tea-time. Dinah my dear! I wish you were down here with me! There are no",
-    "mice in the air, I’m afraid, but you might catch a bat, and that’s very",
-    "like a mouse, you know. But do cats eat bats, I wonder?’ And here Alice",
-    "began to get rather sleepy, and went on saying to herself, in a dreamy",
-    "sort of way, ‘Do cats eat bats? Do cats eat bats?’ and sometimes, ‘Do",
-    "bats eat cats?’ for, you see, as she couldn’t answer either question,",
-    "it didn’t much matter which way she put it. She felt that she was dozing",
-    "off, and had just begun to dream that she was walking hand in hand with",
-    "Dinah, and saying to her very earnestly, ‘Now, Dinah, tell me the truth:",
-    "did you ever eat a bat?’ when suddenly, thump! thump! down she came upon",
-    "a heap of sticks and dry leaves, and the fall was over.",
-    "Alice was not a bit hurt, and she jumped up on to her feet in a moment:",
-    "she looked up, but it was all dark overhead; before her was another",
-    "long passage, and the White Rabbit was still in sight, hurrying down it.",
-    "There was not a moment to be lost: away went Alice like the wind, and",
-    "was just in time to hear it say, as it turned a corner, ‘Oh my ears",
-    "and whiskers, how late it’s getting!’ She was close behind it when she",
-    "turned the corner, but the Rabbit was no longer to be seen: she found",
-    "herself in a long, low hall, which was lit up by a row of lamps hanging",
-    "from the roof.",
-    "There were doors all round the hall, but they were all locked; and when",
-    "Alice had been all the way down one side and up the other, trying every",
-    "door, she walked sadly down the middle, wondering how she was ever to",
-    "get out again.",
-    "Suddenly she came upon a little three-legged table, all made of solid",
-    "glass; there was nothing on it except a tiny golden key, and Alice’s",
-    "first thought was that it might belong to one of the doors of the hall;",
-    "but, alas! either the locks were too large, or the key was too small,",
-    "but at any rate it would not open any of them. However, on the second",
-    "time round, she came upon a low curtain she had not noticed before, and",
-    "behind it was a little door about fifteen inches high: she tried the",
-    "little golden key in the lock, and to her great delight it fitted!",
-    "Alice opened the door and found that it led into a small passage, not",
-    "much larger than a rat-hole: she knelt down and looked along the passage",
-    "into the loveliest garden you ever saw. How she longed to get out of",
-    "that dark hall, and wander about among those beds of bright flowers and",
-    "those cool fountains, but she could not even get her head through the",
-    "doorway; ‘and even if my head would go through,’ thought poor Alice, ‘it",
-    "would be of very little use without my shoulders. Oh, how I wish I could",
-    "shut up like a telescope! I think I could, if I only knew how to begin.’",
-    "For, you see, so many out-of-the-way things had happened lately,",
-    "that Alice had begun to think that very few things indeed were really",
-    "impossible.",
-    "There seemed to be no use in waiting by the little door, so she went",
-    "back to the table, half hoping she might find another key on it, or at",
-    "any rate a book of rules for shutting people up like telescopes: this",
-    "time she found a little bottle on it, [‘which certainly was not here",
-    "before,’ said Alice,) and round the neck of the bottle was a paper",
-    "label, with the words ‘DRINK ME’ beautifully printed on it in large",
-    "letters.",
-    "It was all very well to say ‘Drink me,’ but the wise little Alice was",
-    "not going to do THAT in a hurry. ‘No, I’ll look first,’ she said, ‘and",
-    "see whether it’s marked “poison” or not’; for she had read several nice",
-    "little histories about children who had got burnt, and eaten up by wild",
-    "beasts and other unpleasant things, all because they WOULD not remember",
-    "the simple rules their friends had taught them: such as, that a red-hot",
-    "poker will burn you if you hold it too long; and that if you cut your",
-    "finger VERY deeply with a knife, it usually bleeds; and she had never",
-    "forgotten that, if you drink much from a bottle marked ‘poison,’ it is",
-    "almost certain to disagree with you, sooner or later.",
-    "However, this bottle was NOT marked ‘poison,’ so Alice ventured to taste",
-    "it, and finding it very nice, (it had, in fact, a sort of mixed flavour",
-    "of cherry-tart, custard, pine-apple, roast turkey, toffee, and hot",
-    "buttered toast,) she very soon finished it off.",
-    "  *    *    *    *    *    *    *",
-    "    *    *    *    *    *    *",
-    "  *    *    *    *    *    *    *",
-    "‘What a curious feeling!’ said Alice; ‘I must be shutting up like a",
-    "telescope.’",
-    "And so it was indeed: she was now only ten inches high, and her face",
-    "brightened up at the thought that she was now the right size for going",
-    "through the little door into that lovely garden. First, however, she",
-    "waited for a few minutes to see if she was going to shrink any further:",
-    "she felt a little nervous about this; ‘for it might end, you know,’ said",
-    "Alice to herself, ‘in my going out altogether, like a candle. I wonder",
-    "what I should be like then?’ And she tried to fancy what the flame of a",
-    "candle is like after the candle is blown out, for she could not remember",
-    "ever having seen such a thing.",
-    "After a while, finding that nothing more happened, she decided on going",
-    "into the garden at once; but, alas for poor Alice! when she got to the",
-    "door, she found she had forgotten the little golden key, and when she",
-    "went back to the table for it, she found she could not possibly reach",
-    "it: she could see it quite plainly through the glass, and she tried her",
-    "best to climb up one of the legs of the table, but it was too slippery;",
-    "and when she had tired herself out with trying, the poor little thing",
-    "sat down and cried.",
-    "‘Come, there’s no use in crying like that!’ said Alice to herself,",
-    "rather sharply; ‘I advise you to leave off this minute!’ She generally",
-    "gave herself very good advice, (though she very seldom followed it),",
-    "and sometimes she scolded herself so severely as to bring tears into",
-    "her eyes; and once she remembered trying to box her own ears for having",
-    "cheated herself in a game of croquet she was playing against herself,",
-    "for this curious child was very fond of pretending to be two people.",
-    "‘But it’s no use now,’ thought poor Alice, ‘to pretend to be two people!",
-    "Why, there’s hardly enough of me left to make ONE respectable person!’",
-    "Soon her eye fell on a little glass box that was lying under the table:",
-    "she opened it, and found in it a very small cake, on which the words",
-    "‘EAT ME’ were beautifully marked in currants. ‘Well, I’ll eat it,’ said",
-    "Alice, ‘and if it makes me grow larger, I can reach the key; and if it",
-    "makes me grow smaller, I can creep under the door; so either way I’ll",
-    "get into the garden, and I don’t care which happens!’",
-    "She ate a little bit, and said anxiously to herself, ‘Which way? Which",
-    "way?’, holding her hand on the top of her head to feel which way it was",
-    "growing, and she was quite surprised to find that she remained the same",
-    "size: to be sure, this generally happens when one eats cake, but Alice",
-    "had got so much into the way of expecting nothing but out-of-the-way",
-    "things to happen, that it seemed quite dull and stupid for life to go on",
-    "in the common way.",
-    "So she set to work, and very soon finished off the cake.",
-    "  *    *    *    *    *    *    *",
-    "    *    *    *    *    *    *",
-    "  *    *    *    *    *    *    *",
-    "CHAPTER II. The Pool of Tears",
-    "‘Curiouser and curiouser!’ cried Alice (she was so much surprised, that",
-    "for the moment she quite forgot how to speak good English); ‘now I’m",
-    "opening out like the largest telescope that ever was! Good-bye, feet!’",
-    "(for when she looked down at her feet, they seemed to be almost out of",
-    "sight, they were getting so far off). ‘Oh, my poor little feet, I wonder",
-    "who will put on your shoes and stockings for you now, dears? I’m sure",
-    "_I_ shan’t be able! I shall be a great deal too far off to trouble",
-    "myself about you: you must manage the best way you can;--but I must be",
-    "kind to them,’ thought Alice, ‘or perhaps they won’t walk the way I want",
-    "to go! Let me see: I’ll give them a new pair of boots every Christmas.’",
-    "And she went on planning to herself how she would manage it. ‘They must",
-    "go by the carrier,’ she thought; ‘and how funny it’ll seem, sending",
-    "presents to one’s own feet! And how odd the directions will look!",
-    "     ALICE’S RIGHT FOOT, ESQ.",
-    "       HEARTHRUG,",
-    "         NEAR THE FENDER,",
-    "           (WITH ALICE’S LOVE).",
-    "Oh dear, what nonsense I’m talking!’",
-    "Just then her head struck against the roof of the hall: in fact she was",
-    "now more than nine feet high, and she at once took up the little golden",
-    "key and hurried off to the garden door.",
-    "Poor Alice! It was as much as she could do, lying down on one side, to",
-    "look through into the garden with one eye; but to get through was more",
-    "hopeless than ever: she sat down and began to cry again.",
-    "‘You ought to be ashamed of yourself,’ said Alice, ‘a great girl like",
-    "you,’ (she might well say this), ‘to go on crying in this way! Stop this",
-    "moment, I tell you!’ But she went on all the same, shedding gallons of",
-    "tears, until there was a large pool all round her, about four inches",
-    "deep and reaching half down the hall.",
-    "After a time she heard a little pattering of feet in the distance, and",
-    "she hastily dried her eyes to see what was coming. It was the White",
-    "Rabbit returning, splendidly dressed, with a pair of white kid gloves in",
-    "one hand and a large fan in the other: he came trotting along in a great",
-    "hurry, muttering to himself as he came, ‘Oh! the Duchess, the Duchess!",
-    "Oh! won’t she be savage if I’ve kept her waiting!’ Alice felt so",
-    "desperate that she was ready to ask help of any one; so, when the Rabbit",
-    "came near her, she began, in a low, timid voice, ‘If you please, sir--’",
-    "The Rabbit started violently, dropped the white kid gloves and the fan,",
-    "and skurried away into the darkness as hard as he could go.",
-    "Alice took up the fan and gloves, and, as the hall was very hot, she",
-    "kept fanning herself all the time she went on talking: ‘Dear, dear! How",
-    "queer everything is to-day! And yesterday things went on just as usual.",
-    "I wonder if I’ve been changed in the night? Let me think: was I the",
-    "same when I got up this morning? I almost think I can remember feeling a",
-    "little different. But if I’m not the same, the next question is, Who",
-    "in the world am I? Ah, THAT’S the great puzzle!’ And she began thinking",
-    "over all the children she knew that were of the same age as herself, to",
-    "see if she could have been changed for any of them.",
-    "‘I’m sure I’m not Ada,’ she said, ‘for her hair goes in such long",
-    "ringlets, and mine doesn’t go in ringlets at all; and I’m sure I can’t",
-    "be Mabel, for I know all sorts of things, and she, oh! she knows such a",
-    "very little! Besides, SHE’S she, and I’m I, and--oh dear, how puzzling",
-    "it all is! I’ll try if I know all the things I used to know. Let me",
-    "see: four times five is twelve, and four times six is thirteen, and",
-    "four times seven is--oh dear! I shall never get to twenty at that rate!",
-    "However, the Multiplication Table doesn’t signify: let’s try Geography.",
-    "London is the capital of Paris, and Paris is the capital of Rome, and",
-    "Rome--no, THAT’S all wrong, I’m certain! I must have been changed for",
-    "Mabel! I’ll try and say “How doth the little--“’ and she crossed her",
-    "hands on her lap as if she were saying lessons, and began to repeat it,",
-    "but her voice sounded hoarse and strange, and the words did not come the",
-    "same as they used to do:--",
-    "     ‘How doth the little crocodile",
-    "      Improve his shining tail,",
-    "     And pour the waters of the Nile",
-    "      On every golden scale!",
-    "     ‘How cheerfully he seems to grin,",
-    "      How neatly spread his claws,",
-    "     And welcome little fishes in",
-    "      With gently smiling jaws!’",
-    "‘I’m sure those are not the right words,’ said poor Alice, and her eyes",
-    "filled with tears again as she went on, ‘I must be Mabel after all, and",
-    "I shall have to go and live in that poky little house, and have next to",
-    "no toys to play with, and oh! ever so many lessons to learn! No, I’ve",
-    "made up my mind about it; if I’m Mabel, I’ll stay down here! It’ll be no",
-    "use their putting their heads down and saying “Come up again, dear!” I",
-    "shall only look up and say “Who am I then? Tell me that first, and then,",
-    "if I like being that person, I’ll come up: if not, I’ll stay down here",
-    "till I’m somebody else”--but, oh dear!’ cried Alice, with a sudden burst",
-    "of tears, ‘I do wish they WOULD put their heads down! I am so VERY tired",
-    "of being all alone here!’",
-    "As she said this she looked down at her hands, and was surprised to see",
-    "that she had put on one of the Rabbit’s little white kid gloves while",
-    "she was talking. ‘How CAN I have done that?’ she thought. ‘I must",
-    "be growing small again.’ She got up and went to the table to measure",
-    "herself by it, and found that, as nearly as she could guess, she was now",
-    "about two feet high, and was going on shrinking rapidly: she soon found",
-    "out that the cause of this was the fan she was holding, and she dropped",
-    "it hastily, just in time to avoid shrinking away altogether.",
-    "‘That WAS a narrow escape!’ said Alice, a good deal frightened at the",
-    "sudden change, but very glad to find herself still in existence; ‘and",
-    "now for the garden!’ and she ran with all speed back to the little door:",
-    "but, alas! the little door was shut again, and the little golden key was",
-    "lying on the glass table as before, ‘and things are worse than ever,’",
-    "thought the poor child, ‘for I never was so small as this before, never!",
-    "And I declare it’s too bad, that it is!’",
-    "As she said these words her foot slipped, and in another moment, splash!",
-    "she was up to her chin in salt water. Her first idea was that she",
-    "had somehow fallen into the sea, ‘and in that case I can go back by",
-    "railway,’ she said to herself. (Alice had been to the seaside once in",
-    "her life, and had come to the general conclusion, that wherever you go",
-    "to on the English coast you find a number of bathing machines in the",
-    "sea, some children digging in the sand with wooden spades, then a row",
-    "of lodging houses, and behind them a railway station.) However, she soon",
-    "made out that she was in the pool of tears which she had wept when she",
-    "was nine feet high.",
-    "‘I wish I hadn’t cried so much!’ said Alice, as she swam about, trying",
-    "to find her way out. ‘I shall be punished for it now, I suppose, by",
-    "being drowned in my own tears! That WILL be a queer thing, to be sure!",
-    "However, everything is queer to-day.’",
-    "Just then she heard something splashing about in the pool a little way",
-    "off, and she swam nearer to make out what it was: at first she thought",
-    "it must be a walrus or hippopotamus, but then she remembered how small",
-    "she was now, and she soon made out that it was only a mouse that had",
-    "slipped in like herself.",
-    "‘Would it be of any use, now,’ thought Alice, ‘to speak to this mouse?",
-    "Everything is so out-of-the-way down here, that I should think very",
-    "likely it can talk: at any rate, there’s no harm in trying.’ So she",
-    "began: ‘O Mouse, do you know the way out of this pool? I am very tired",
-    "of swimming about here, O Mouse!’ (Alice thought this must be the right",
-    "way of speaking to a mouse: she had never done such a thing before, but",
-    "she remembered having seen in her brother’s Latin Grammar, ‘A mouse--of",
-    "a mouse--to a mouse--a mouse--O mouse!’) The Mouse looked at her rather",
-    "inquisitively, and seemed to her to wink with one of its little eyes,",
-    "but it said nothing.",
-    "‘Perhaps it doesn’t understand English,’ thought Alice; ‘I daresay it’s",
-    "a French mouse, come over with William the Conqueror.’ (For, with all",
-    "her knowledge of history, Alice had no very clear notion how long ago",
-    "anything had happened.) So she began again: ‘Ou est ma chatte?’ which",
-    "was the first sentence in her French lesson-book. The Mouse gave a",
-    "sudden leap out of the water, and seemed to quiver all over with fright.",
-    "‘Oh, I beg your pardon!’ cried Alice hastily, afraid that she had hurt",
-    "the poor animal’s feelings. ‘I quite forgot you didn’t like cats.’",
-    "‘Not like cats!’ cried the Mouse, in a shrill, passionate voice. ‘Would",
-    "YOU like cats if you were me?’",
-    "‘Well, perhaps not,’ said Alice in a soothing tone: ‘don’t be angry",
-    "about it. And yet I wish I could show you our cat Dinah: I think you’d",
-    "take a fancy to cats if you could only see her. She is such a dear quiet",
-    "thing,’ Alice went on, half to herself, as she swam lazily about in the",
-    "pool, ‘and she sits purring so nicely by the fire, licking her paws and",
-    "washing her face--and she is such a nice soft thing to nurse--and she’s",
-    "such a capital one for catching mice--oh, I beg your pardon!’ cried",
-    "Alice again, for this time the Mouse was bristling all over, and she",
-    "felt certain it must be really offended. ‘We won’t talk about her any",
-    "more if you’d rather not.’",
-    "‘We indeed!’ cried the Mouse, who was trembling down to the end of his",
-    "tail. ‘As if I would talk on such a subject! Our family always HATED",
-    "cats: nasty, low, vulgar things! Don’t let me hear the name again!’",
-    "‘I won’t indeed!’ said Alice, in a great hurry to change the subject of",
-    "conversation. ‘Are you--are you fond--of--of dogs?’ The Mouse did not",
-    "answer, so Alice went on eagerly: ‘There is such a nice little dog near",
-    "our house I should like to show you! A little bright-eyed terrier, you",
-    "know, with oh, such long curly brown hair! And it’ll fetch things when",
-    "you throw them, and it’ll sit up and beg for its dinner, and all sorts",
-    "of things--I can’t remember half of them--and it belongs to a farmer,",
-    "you know, and he says it’s so useful, it’s worth a hundred pounds! He",
-    "says it kills all the rats and--oh dear!’ cried Alice in a sorrowful",
-    "tone, ‘I’m afraid I’ve offended it again!’ For the Mouse was swimming",
-    "away from her as hard as it could go, and making quite a commotion in",
-    "the pool as it went.",
-    "So she called softly after it, ‘Mouse dear! Do come back again, and we",
-    "won’t talk about cats or dogs either, if you don’t like them!’ When the",
-    "Mouse heard this, it turned round and swam slowly back to her: its",
-    "face was quite pale (with passion, Alice thought), and it said in a low",
-    "trembling voice, ‘Let us get to the shore, and then I’ll tell you my",
-    "history, and you’ll understand why it is I hate cats and dogs.’",
-    "It was high time to go, for the pool was getting quite crowded with the",
-    "birds and animals that had fallen into it: there were a Duck and a Dodo,",
-    "a Lory and an Eaglet, and several other curious creatures. Alice led the",
-    "way, and the whole party swam to the shore.",
-    "CHAPTER III. A Caucus-Race and a Long Tale",
-    "They were indeed a queer-looking party that assembled on the bank--the",
-    "birds with draggled feathers, the animals with their fur clinging close",
-    "to them, and all dripping wet, cross, and uncomfortable.",
-    "The first question of course was, how to get dry again: they had a",
-    "consultation about this, and after a few minutes it seemed quite natural",
-    "to Alice to find herself talking familiarly with them, as if she had",
-    "known them all her life. Indeed, she had quite a long argument with the",
-    "Lory, who at last turned sulky, and would only say, ‘I am older than",
-    "you, and must know better’; and this Alice would not allow without",
-    "knowing how old it was, and, as the Lory positively refused to tell its",
-    "age, there was no more to be said.",
-    "At last the Mouse, who seemed to be a person of authority among them,",
-    "called out, ‘Sit down, all of you, and listen to me! I’LL soon make you",
-    "dry enough!’ They all sat down at once, in a large ring, with the Mouse",
-    "in the middle. Alice kept her eyes anxiously fixed on it, for she felt",
-    "sure she would catch a bad cold if she did not get dry very soon.",
-    "‘Ahem!’ said the Mouse with an important air, ‘are you all ready? This",
-    "is the driest thing I know. Silence all round, if you please! “William",
-    "the Conqueror, whose cause was favoured by the pope, was soon submitted",
-    "to by the English, who wanted leaders, and had been of late much",
-    "accustomed to usurpation and conquest. Edwin and Morcar, the earls of",
-    "Mercia and Northumbria--“’",
-    "‘Ugh!’ said the Lory, with a shiver.",
-    "‘I beg your pardon!’ said the Mouse, frowning, but very politely: ‘Did",
-    "you speak?’",
-    "‘Not I!’ said the Lory hastily.",
-    "‘I thought you did,’ said the Mouse. ‘--I proceed. “Edwin and Morcar,",
-    "the earls of Mercia and Northumbria, declared for him: and even Stigand,",
-    "the patriotic archbishop of Canterbury, found it advisable--“’",
-    "‘Found WHAT?’ said the Duck.",
-    "‘Found IT,’ the Mouse replied rather crossly: ‘of course you know what",
-    "“it” means.’",
-    "‘I know what “it” means well enough, when I find a thing,’ said the",
-    "Duck: ‘it’s generally a frog or a worm. The question is, what did the",
-    "archbishop find?’",
-    "The Mouse did not notice this question, but hurriedly went on, ‘“--found",
-    "it advisable to go with Edgar Atheling to meet William and offer him the",
-    "crown. William’s conduct at first was moderate. But the insolence of his",
-    "Normans--” How are you getting on now, my dear?’ it continued, turning",
-    "to Alice as it spoke.",
-    "‘As wet as ever,’ said Alice in a melancholy tone: ‘it doesn’t seem to",
-    "dry me at all.’",
-    "‘In that case,’ said the Dodo solemnly, rising to its feet, ‘I move",
-    "that the meeting adjourn, for the immediate adoption of more energetic",
-    "remedies--’",
-    "‘Speak English!’ said the Eaglet. ‘I don’t know the meaning of half",
-    "those long words, and, what’s more, I don’t believe you do either!’ And",
-    "the Eaglet bent down its head to hide a smile: some of the other birds",
-    "tittered audibly.",
-    "‘What I was going to say,’ said the Dodo in an offended tone, ‘was, that",
-    "the best thing to get us dry would be a Caucus-race.’",
-    "‘What IS a Caucus-race?’ said Alice; not that she wanted much to know,",
-    "but the Dodo had paused as if it thought that SOMEBODY ought to speak,",
-    "and no one else seemed inclined to say anything.",
-    "‘Why,’ said the Dodo, ‘the best way to explain it is to do it.’ (And, as",
-    "you might like to try the thing yourself, some winter day, I will tell",
-    "you how the Dodo managed it.)",
-    "First it marked out a race-course, in a sort of circle, [‘the exact",
-    "shape doesn’t matter,’ it said,) and then all the party were placed",
-    "along the course, here and there. There was no ‘One, two, three, and",
-    "away,’ but they began running when they liked, and left off when they",
-    "liked, so that it was not easy to know when the race was over. However,",
-    "when they had been running half an hour or so, and were quite dry again,",
-    "the Dodo suddenly called out ‘The race is over!’ and they all crowded",
-    "round it, panting, and asking, ‘But who has won?’",
-    "This question the Dodo could not answer without a great deal of thought,",
-    "and it sat for a long time with one finger pressed upon its forehead",
-    "(the position in which you usually see Shakespeare, in the pictures",
-    "of him), while the rest waited in silence. At last the Dodo said,",
-    "‘EVERYBODY has won, and all must have prizes.’",
-    "‘But who is to give the prizes?’ quite a chorus of voices asked.",
-    "‘Why, SHE, of course,’ said the Dodo, pointing to Alice with one finger;",
-    "and the whole party at once crowded round her, calling out in a confused",
-    "way, ‘Prizes! Prizes!’",
-    "Alice had no idea what to do, and in despair she put her hand in her",
-    "pocket, and pulled out a box of comfits, (luckily the salt water had",
-    "not got into it), and handed them round as prizes. There was exactly one",
-    "a-piece all round.",
-    "‘But she must have a prize herself, you know,’ said the Mouse.",
-    "‘Of course,’ the Dodo replied very gravely. ‘What else have you got in",
-    "your pocket?’ he went on, turning to Alice.",
-    "‘Only a thimble,’ said Alice sadly.",
-    "‘Hand it over here,’ said the Dodo.",
-    "Then they all crowded round her once more, while the Dodo solemnly",
-    "presented the thimble, saying ‘We beg your acceptance of this elegant",
-    "thimble’; and, when it had finished this short speech, they all cheered.",
-    "Alice thought the whole thing very absurd, but they all looked so grave",
-    "that she did not dare to laugh; and, as she could not think of anything",
-    "to say, she simply bowed, and took the thimble, looking as solemn as she",
-    "could.",
-    "The next thing was to eat the comfits: this caused some noise and",
-    "confusion, as the large birds complained that they could not taste",
-    "theirs, and the small ones choked and had to be patted on the back.",
-    "However, it was over at last, and they sat down again in a ring, and",
-    "begged the Mouse to tell them something more.",
-    "‘You promised to tell me your history, you know,’ said Alice, ‘and why",
-    "it is you hate--C and D,’ she added in a whisper, half afraid that it",
-    "would be offended again.",
-    "‘Mine is a long and a sad tale!’ said the Mouse, turning to Alice, and",
-    "sighing.",
-    "‘It IS a long tail, certainly,’ said Alice, looking down with wonder at",
-    "the Mouse’s tail; ‘but why do you call it sad?’ And she kept on puzzling",
-    "about it while the Mouse was speaking, so that her idea of the tale was",
-    "something like this:--",
-    "         ‘Fury said to a",
-    "         mouse, That he",
-    "        met in the",
-    "       house,",
-    "     “Let us",
-    "      both go to",
-    "       law: I will",
-    "        prosecute",
-    "         YOU.--Come,",
-    "           I’ll take no",
-    "           denial; We",
-    "          must have a",
-    "        trial: For",
-    "      really this",
-    "     morning I’ve",
-    "    nothing",
-    "    to do.”",
-    "      Said the",
-    "      mouse to the",
-    "       cur, “Such",
-    "        a trial,",
-    "         dear Sir,",
-    "            With",
-    "          no jury",
-    "        or judge,",
-    "       would be",
-    "      wasting",
-    "      our",
-    "      breath.”",
-    "        “I’ll be",
-    "        judge, I’ll",
-    "         be jury,”",
-    "             Said",
-    "         cunning",
-    "          old Fury:",
-    "          “I’ll",
-    "          try the",
-    "            whole",
-    "            cause,",
-    "              and",
-    "           condemn",
-    "           you",
-    "          to",
-    "           death.”’",
-    "‘You are not attending!’ said the Mouse to Alice severely. ‘What are you",
-    "thinking of?’",
-    "‘I beg your pardon,’ said Alice very humbly: ‘you had got to the fifth",
-    "bend, I think?’",
-    "‘I had NOT!’ cried the Mouse, sharply and very angrily.",
-    "‘A knot!’ said Alice, always ready to make herself useful, and looking",
-    "anxiously about her. ‘Oh, do let me help to undo it!’",
-    "‘I shall do nothing of the sort,’ said the Mouse, getting up and walking",
-    "away. ‘You insult me by talking such nonsense!’",
-    "‘I didn’t mean it!’ pleaded poor Alice. ‘But you’re so easily offended,",
-    "you know!’",
-    "The Mouse only growled in reply.",
-    "‘Please come back and finish your story!’ Alice called after it; and the",
-    "others all joined in chorus, ‘Yes, please do!’ but the Mouse only shook",
-    "its head impatiently, and walked a little quicker.",
-    "‘What a pity it wouldn’t stay!’ sighed the Lory, as soon as it was quite",
-    "out of sight; and an old Crab took the opportunity of saying to her",
-    "daughter ‘Ah, my dear! Let this be a lesson to you never to lose",
-    "YOUR temper!’ ‘Hold your tongue, Ma!’ said the young Crab, a little",
-    "snappishly. ‘You’re enough to try the patience of an oyster!’",
-    "‘I wish I had our Dinah here, I know I do!’ said Alice aloud, addressing",
-    "nobody in particular. ‘She’d soon fetch it back!’",
-    "‘And who is Dinah, if I might venture to ask the question?’ said the",
-    "Lory.",
-    "Alice replied eagerly, for she was always ready to talk about her pet:",
-    "‘Dinah’s our cat. And she’s such a capital one for catching mice you",
-    "can’t think! And oh, I wish you could see her after the birds! Why,",
-    "she’ll eat a little bird as soon as look at it!’",
-    "This speech caused a remarkable sensation among the party. Some of the",
-    "birds hurried off at once: one old Magpie began wrapping itself up very",
-    "carefully, remarking, ‘I really must be getting home; the night-air",
-    "doesn’t suit my throat!’ and a Canary called out in a trembling voice to",
-    "its children, ‘Come away, my dears! It’s high time you were all in bed!’",
-    "On various pretexts they all moved off, and Alice was soon left alone.",
-    "‘I wish I hadn’t mentioned Dinah!’ she said to herself in a melancholy",
-    "tone. ‘Nobody seems to like her, down here, and I’m sure she’s the best",
-    "cat in the world! Oh, my dear Dinah! I wonder if I shall ever see you",
-    "any more!’ And here poor Alice began to cry again, for she felt very",
-    "lonely and low-spirited. In a little while, however, she again heard",
-    "a little pattering of footsteps in the distance, and she looked up",
-    "eagerly, half hoping that the Mouse had changed his mind, and was coming",
-    "back to finish his story.",
-    "CHAPTER IV. The Rabbit Sends in a Little Bill",
-    "It was the White Rabbit, trotting slowly back again, and looking",
-    "anxiously about as it went, as if it had lost something; and she heard",
-    "it muttering to itself ‘The Duchess! The Duchess! Oh my dear paws! Oh",
-    "my fur and whiskers! She’ll get me executed, as sure as ferrets are",
-    "ferrets! Where CAN I have dropped them, I wonder?’ Alice guessed in a",
-    "moment that it was looking for the fan and the pair of white kid gloves,",
-    "and she very good-naturedly began hunting about for them, but they were",
-    "nowhere to be seen--everything seemed to have changed since her swim in",
-    "the pool, and the great hall, with the glass table and the little door,",
-    "had vanished completely.",
-    "Very soon the Rabbit noticed Alice, as she went hunting about, and",
-    "called out to her in an angry tone, ‘Why, Mary Ann, what ARE you doing",
-    "out here? Run home this moment, and fetch me a pair of gloves and a fan!",
-    "Quick, now!’ And Alice was so much frightened that she ran off at once",
-    "in the direction it pointed to, without trying to explain the mistake it",
-    "had made.",
-    "‘He took me for his housemaid,’ she said to herself as she ran. ‘How",
-    "surprised he’ll be when he finds out who I am! But I’d better take him",
-    "his fan and gloves--that is, if I can find them.’ As she said this, she",
-    "came upon a neat little house, on the door of which was a bright brass",
-    "plate with the name ‘W. RABBIT’ engraved upon it. She went in without",
-    "knocking, and hurried upstairs, in great fear lest she should meet the",
-    "real Mary Ann, and be turned out of the house before she had found the",
-    "fan and gloves.",
-    "‘How queer it seems,’ Alice said to herself, ‘to be going messages for",
-    "a rabbit! I suppose Dinah’ll be sending me on messages next!’ And she",
-    "began fancying the sort of thing that would happen: ‘“Miss Alice! Come",
-    "here directly, and get ready for your walk!” “Coming in a minute,",
-    "nurse! But I’ve got to see that the mouse doesn’t get out.” Only I don’t",
-    "think,’ Alice went on, ‘that they’d let Dinah stop in the house if it",
-    "began ordering people about like that!’",
-    "By this time she had found her way into a tidy little room with a table",
-    "in the window, and on it (as she had hoped) a fan and two or three pairs",
-    "of tiny white kid gloves: she took up the fan and a pair of the gloves,",
-    "and was just going to leave the room, when her eye fell upon a little",
-    "bottle that stood near the looking-glass. There was no label this time",
-    "with the words ‘DRINK ME,’ but nevertheless she uncorked it and put it",
-    "to her lips. ‘I know SOMETHING interesting is sure to happen,’ she said",
-    "to herself, ‘whenever I eat or drink anything; so I’ll just see what",
-    "this bottle does. I do hope it’ll make me grow large again, for really",
-    "I’m quite tired of being such a tiny little thing!’",
-    "It did so indeed, and much sooner than she had expected: before she had",
-    "drunk half the bottle, she found her head pressing against the ceiling,",
-    "and had to stoop to save her neck from being broken. She hastily put",
-    "down the bottle, saying to herself ‘That’s quite enough--I hope I shan’t",
-    "grow any more--As it is, I can’t get out at the door--I do wish I hadn’t",
-    "drunk quite so much!’",
-    "Alas! it was too late to wish that! She went on growing, and growing,",
-    "and very soon had to kneel down on the floor: in another minute there",
-    "was not even room for this, and she tried the effect of lying down with",
-    "one elbow against the door, and the other arm curled round her head.",
-    "Still she went on growing, and, as a last resource, she put one arm out",
-    "of the window, and one foot up the chimney, and said to herself ‘Now I",
-    "can do no more, whatever happens. What WILL become of me?’",
-    "Luckily for Alice, the little magic bottle had now had its full effect,",
-    "and she grew no larger: still it was very uncomfortable, and, as there",
-    "seemed to be no sort of chance of her ever getting out of the room",
-    "again, no wonder she felt unhappy.",
-    "‘It was much pleasanter at home,’ thought poor Alice, ‘when one wasn’t",
-    "always growing larger and smaller, and being ordered about by mice and",
-    "rabbits. I almost wish I hadn’t gone down that rabbit-hole--and yet--and",
-    "yet--it’s rather curious, you know, this sort of life! I do wonder what",
-    "CAN have happened to me! When I used to read fairy-tales, I fancied that",
-    "kind of thing never happened, and now here I am in the middle of one!",
-    "There ought to be a book written about me, that there ought! And when I",
-    "grow up, I’ll write one--but I’m grown up now,’ she added in a sorrowful",
-    "tone; ‘at least there’s no room to grow up any more HERE.’",
-    "‘But then,’ thought Alice, ‘shall I NEVER get any older than I am",
-    "now? That’ll be a comfort, one way--never to be an old woman--but",
-    "then--always to have lessons to learn! Oh, I shouldn’t like THAT!’",
-    "‘Oh, you foolish Alice!’ she answered herself. ‘How can you learn",
-    "lessons in here? Why, there’s hardly room for YOU, and no room at all",
-    "for any lesson-books!’",
-    "And so she went on, taking first one side and then the other, and making",
-    "quite a conversation of it altogether; but after a few minutes she heard",
-    "a voice outside, and stopped to listen.",
-    "‘Mary Ann! Mary Ann!’ said the voice. ‘Fetch me my gloves this moment!’",
-    "Then came a little pattering of feet on the stairs. Alice knew it was",
-    "the Rabbit coming to look for her, and she trembled till she shook the",
-    "house, quite forgetting that she was now about a thousand times as large",
-    "as the Rabbit, and had no reason to be afraid of it.",
-    "Presently the Rabbit came up to the door, and tried to open it; but, as",
-    "the door opened inwards, and Alice’s elbow was pressed hard against it,",
-    "that attempt proved a failure. Alice heard it say to itself ‘Then I’ll",
-    "go round and get in at the window.’",
-    "‘THAT you won’t’ thought Alice, and, after waiting till she fancied",
-    "she heard the Rabbit just under the window, she suddenly spread out her",
-    "hand, and made a snatch in the air. She did not get hold of anything,",
-    "but she heard a little shriek and a fall, and a crash of broken glass,",
-    "from which she concluded that it was just possible it had fallen into a",
-    "cucumber-frame, or something of the sort.",
-    "Next came an angry voice--the Rabbit’s--‘Pat! Pat! Where are you?’ And",
-    "then a voice she had never heard before, ‘Sure then I’m here! Digging",
-    "for apples, yer honour!’",
-    "‘Digging for apples, indeed!’ said the Rabbit angrily. ‘Here! Come and",
-    "help me out of THIS!’ (Sounds of more broken glass.)",
-    "‘Now tell me, Pat, what’s that in the window?’",
-    "‘Sure, it’s an arm, yer honour!’ (He pronounced it ‘arrum.’)",
-    "‘An arm, you goose! Who ever saw one that size? Why, it fills the whole",
-    "window!’",
-    "‘Sure, it does, yer honour: but it’s an arm for all that.’",
-    "‘Well, it’s got no business there, at any rate: go and take it away!’",
-    "There was a long silence after this, and Alice could only hear whispers",
-    "now and then; such as, ‘Sure, I don’t like it, yer honour, at all, at",
-    "all!’ ‘Do as I tell you, you coward!’ and at last she spread out her",
-    "hand again, and made another snatch in the air. This time there were",
-    "TWO little shrieks, and more sounds of broken glass. ‘What a number of",
-    "cucumber-frames there must be!’ thought Alice. ‘I wonder what they’ll do",
-    "next! As for pulling me out of the window, I only wish they COULD! I’m",
-    "sure I don’t want to stay in here any longer!’",
-    "She waited for some time without hearing anything more: at last came a",
-    "rumbling of little cartwheels, and the sound of a good many voices",
-    "all talking together: she made out the words: ‘Where’s the other",
-    "ladder?--Why, I hadn’t to bring but one; Bill’s got the other--Bill!",
-    "fetch it here, lad!--Here, put ‘em up at this corner--No, tie ‘em",
-    "together first--they don’t reach half high enough yet--Oh! they’ll",
-    "do well enough; don’t be particular--Here, Bill! catch hold of this",
-    "rope--Will the roof bear?--Mind that loose slate--Oh, it’s coming",
-    "down! Heads below!’ (a loud crash)--‘Now, who did that?--It was Bill, I",
-    "fancy--Who’s to go down the chimney?--Nay, I shan’t! YOU do it!--That I",
-    "won’t, then!--Bill’s to go down--Here, Bill! the master says you’re to",
-    "go down the chimney!’",
-    "‘Oh! So Bill’s got to come down the chimney, has he?’ said Alice to",
-    "herself. ‘Shy, they seem to put everything upon Bill! I wouldn’t be in",
-    "Bill’s place for a good deal: this fireplace is narrow, to be sure; but",
-    "I THINK I can kick a little!’",
-    "She drew her foot as far down the chimney as she could, and waited",
-    "till she heard a little animal (she couldn’t guess of what sort it was)",
-    "scratching and scrambling about in the chimney close above her: then,",
-    "saying to herself ‘This is Bill,’ she gave one sharp kick, and waited to",
-    "see what would happen next.",
-    "The first thing she heard was a general chorus of ‘There goes Bill!’",
-    "then the Rabbit’s voice along--‘Catch him, you by the hedge!’ then",
-    "silence, and then another confusion of voices--‘Hold up his head--Brandy",
-    "now--Don’t choke him--How was it, old fellow? What happened to you? Tell",
-    "us all about it!’",
-    "Last came a little feeble, squeaking voice, [‘That’s Bill,’ thought",
-    "Alice,) ‘Well, I hardly know--No more, thank ye; I’m better now--but I’m",
-    "a deal too flustered to tell you--all I know is, something comes at me",
-    "like a Jack-in-the-box, and up I goes like a sky-rocket!’",
-    "‘So you did, old fellow!’ said the others.",
-    "‘We must burn the house down!’ said the Rabbit’s voice; and Alice called",
-    "out as loud as she could, ‘If you do. I’ll set Dinah at you!’",
-    "There was a dead silence instantly, and Alice thought to herself, ‘I",
-    "wonder what they WILL do next! If they had any sense, they’d take the",
-    "roof off.’ After a minute or two, they began moving about again, and",
-    "Alice heard the Rabbit say, ‘A barrowful will do, to begin with.’",
-    "‘A barrowful of WHAT?’ thought Alice; but she had not long to doubt,",
-    "for the next moment a shower of little pebbles came rattling in at the",
-    "window, and some of them hit her in the face. ‘I’ll put a stop to this,’",
-    "she said to herself, and shouted out, ‘You’d better not do that again!’",
-    "which produced another dead silence.",
-    "Alice noticed with some surprise that the pebbles were all turning into",
-    "little cakes as they lay on the floor, and a bright idea came into her",
-    "head. ‘If I eat one of these cakes,’ she thought, ‘it’s sure to make",
-    "SOME change in my size; and as it can’t possibly make me larger, it must",
-    "make me smaller, I suppose.’",
-    "So she swallowed one of the cakes, and was delighted to find that she",
-    "began shrinking directly. As soon as she was small enough to get through",
-    "the door, she ran out of the house, and found quite a crowd of little",
-    "animals and birds waiting outside. The poor little Lizard, Bill, was",
-    "in the middle, being held up by two guinea-pigs, who were giving it",
-    "something out of a bottle. They all made a rush at Alice the moment she",
-    "appeared; but she ran off as hard as she could, and soon found herself",
-    "safe in a thick wood.",
-    "‘The first thing I’ve got to do,’ said Alice to herself, as she wandered",
-    "about in the wood, ‘is to grow to my right size again; and the second",
-    "thing is to find my way into that lovely garden. I think that will be",
-    "the best plan.’",
-    "It sounded an excellent plan, no doubt, and very neatly and simply",
-    "arranged; the only difficulty was, that she had not the smallest idea",
-    "how to set about it; and while she was peering about anxiously among",
-    "the trees, a little sharp bark just over her head made her look up in a",
-    "great hurry.",
-    "An enormous puppy was looking down at her with large round eyes, and",
-    "feebly stretching out one paw, trying to touch her. ‘Poor little thing!’",
-    "said Alice, in a coaxing tone, and she tried hard to whistle to it; but",
-    "she was terribly frightened all the time at the thought that it might be",
-    "hungry, in which case it would be very likely to eat her up in spite of",
-    "all her coaxing.",
-    "Hardly knowing what she did, she picked up a little bit of stick, and",
-    "held it out to the puppy; whereupon the puppy jumped into the air off",
-    "all its feet at once, with a yelp of delight, and rushed at the stick,",
-    "and made believe to worry it; then Alice dodged behind a great thistle,",
-    "to keep herself from being run over; and the moment she appeared on the",
-    "other side, the puppy made another rush at the stick, and tumbled head",
-    "over heels in its hurry to get hold of it; then Alice, thinking it was",
-    "very like having a game of play with a cart-horse, and expecting every",
-    "moment to be trampled under its feet, ran round the thistle again; then",
-    "the puppy began a series of short charges at the stick, running a very",
-    "little way forwards each time and a long way back, and barking hoarsely",
-    "all the while, till at last it sat down a good way off, panting, with",
-    "its tongue hanging out of its mouth, and its great eyes half shut.",
-    "This seemed to Alice a good opportunity for making her escape; so she",
-    "set off at once, and ran till she was quite tired and out of breath, and",
-    "till the puppy’s bark sounded quite faint in the distance.",
-    "‘And yet what a dear little puppy it was!’ said Alice, as she leant",
-    "against a buttercup to rest herself, and fanned herself with one of the",
-    "leaves: ‘I should have liked teaching it tricks very much, if--if I’d",
-    "only been the right size to do it! Oh dear! I’d nearly forgotten that",
-    "I’ve got to grow up again! Let me see--how IS it to be managed? I",
-    "suppose I ought to eat or drink something or other; but the great",
-    "question is, what?’",
-    "The great question certainly was, what? Alice looked all round her at",
-    "the flowers and the blades of grass, but she did not see anything that",
-    "looked like the right thing to eat or drink under the circumstances.",
-    "There was a large mushroom growing near her, about the same height as",
-    "herself; and when she had looked under it, and on both sides of it, and",
-    "behind it, it occurred to her that she might as well look and see what",
-    "was on the top of it.",
-    "She stretched herself up on tiptoe, and peeped over the edge of the",
-    "mushroom, and her eyes immediately met those of a large caterpillar,",
-    "that was sitting on the top with its arms folded, quietly smoking a long",
-    "hookah, and taking not the smallest notice of her or of anything else.",
-    "CHAPTER V. Advice from a Caterpillar",
-    "The Caterpillar and Alice looked at each other for some time in silence:",
-    "at last the Caterpillar took the hookah out of its mouth, and addressed",
-    "her in a languid, sleepy voice.",
-    "‘Who are YOU?’ said the Caterpillar.",
-    "This was not an encouraging opening for a conversation. Alice replied,",
-    "rather shyly, ‘I--I hardly know, sir, just at present--at least I know",
-    "who I WAS when I got up this morning, but I think I must have been",
-    "changed several times since then.’",
-    "‘What do you mean by that?’ said the Caterpillar sternly. ‘Explain",
-    "yourself!’",
-    "‘I can’t explain MYSELF, I’m afraid, sir’ said Alice, ‘because I’m not",
-    "myself, you see.’",
-    "‘I don’t see,’ said the Caterpillar.",
-    "‘I’m afraid I can’t put it more clearly,’ Alice replied very politely,",
-    "‘for I can’t understand it myself to begin with; and being so many",
-    "different sizes in a day is very confusing.’",
-    "‘It isn’t,’ said the Caterpillar.",
-    "‘Well, perhaps you haven’t found it so yet,’ said Alice; ‘but when you",
-    "have to turn into a chrysalis--you will some day, you know--and then",
-    "after that into a butterfly, I should think you’ll feel it a little",
-    "queer, won’t you?’",
-    "‘Not a bit,’ said the Caterpillar.",
-    "‘Well, perhaps your feelings may be different,’ said Alice; ‘all I know",
-    "is, it would feel very queer to ME.’",
-    "‘You!’ said the Caterpillar contemptuously. ‘Who are YOU?’",
-    "Which brought them back again to the beginning of the conversation.",
-    "Alice felt a little irritated at the Caterpillar’s making such VERY",
-    "short remarks, and she drew herself up and said, very gravely, ‘I think,",
-    "you ought to tell me who YOU are, first.’",
-    "‘Why?’ said the Caterpillar.",
-    "Here was another puzzling question; and as Alice could not think of any",
-    "good reason, and as the Caterpillar seemed to be in a VERY unpleasant",
-    "state of mind, she turned away.",
-    "‘Come back!’ the Caterpillar called after her. ‘I’ve something important",
-    "to say!’",
-    "This sounded promising, certainly: Alice turned and came back again.",
-    "‘Keep your temper,’ said the Caterpillar.",
-    "‘Is that all?’ said Alice, swallowing down her anger as well as she",
-    "could.",
-    "‘No,’ said the Caterpillar.",
-    "Alice thought she might as well wait, as she had nothing else to do, and",
-    "perhaps after all it might tell her something worth hearing. For some",
-    "minutes it puffed away without speaking, but at last it unfolded its",
-    "arms, took the hookah out of its mouth again, and said, ‘So you think",
-    "you’re changed, do you?’",
-    "‘I’m afraid I am, sir,’ said Alice; ‘I can’t remember things as I",
-    "used--and I don’t keep the same size for ten minutes together!’",
-    "‘Can’t remember WHAT things?’ said the Caterpillar.",
-    "‘Well, I’ve tried to say “HOW DOTH THE LITTLE BUSY BEE,” but it all came",
-    "different!’ Alice replied in a very melancholy voice.",
-    "‘Repeat, “YOU ARE OLD, FATHER WILLIAM,”’ said the Caterpillar.",
-    "Alice folded her hands, and began:--",
-    "   ‘You are old, Father William,’ the young man said,",
-    "    ‘And your hair has become very white;",
-    "   And yet you incessantly stand on your head--",
-    "    Do you think, at your age, it is right?’",
-    "   ‘In my youth,’ Father William replied to his son,",
-    "    ‘I feared it might injure the brain;",
-    "   But, now that I’m perfectly sure I have none,",
-    "    Why, I do it again and again.’",
-    "   ‘You are old,’ said the youth, ‘as I mentioned before,",
-    "    And have grown most uncommonly fat;",
-    "   Yet you turned a back-somersault in at the door--",
-    "    Pray, what is the reason of that?’",
-    "   ‘In my youth,’ said the sage, as he shook his grey locks,",
-    "    ‘I kept all my limbs very supple",
-    "   By the use of this ointment--one shilling the box--",
-    "    Allow me to sell you a couple?’",
-    "   ‘You are old,’ said the youth, ‘and your jaws are too weak",
-    "    For anything tougher than suet;",
-    "   Yet you finished the goose, with the bones and the beak--",
-    "    Pray how did you manage to do it?’",
-    "   ‘In my youth,’ said his father, ‘I took to the law,",
-    "    And argued each case with my wife;",
-    "   And the muscular strength, which it gave to my jaw,",
-    "    Has lasted the rest of my life.’",
-    "   ‘You are old,’ said the youth, ‘one would hardly suppose",
-    "    That your eye was as steady as ever;",
-    "   Yet you balanced an eel on the end of your nose--",
-    "    What made you so awfully clever?’",
-    "   ‘I have answered three questions, and that is enough,’",
-    "    Said his father; ‘don’t give yourself airs!",
-    "   Do you think I can listen all day to such stuff?",
-    "    Be off, or I’ll kick you down stairs!’",
-    "‘That is not said right,’ said the Caterpillar.",
-    "‘Not QUITE right, I’m afraid,’ said Alice, timidly; ‘some of the words",
-    "have got altered.’",
-    "‘It is wrong from beginning to end,’ said the Caterpillar decidedly, and",
-    "there was silence for some minutes.",
-    "The Caterpillar was the first to speak.",
-    "‘What size do you want to be?’ it asked.",
-    "‘Oh, I’m not particular as to size,’ Alice hastily replied; ‘only one",
-    "doesn’t like changing so often, you know.’",
-    "‘I DON’T know,’ said the Caterpillar.",
-    "Alice said nothing: she had never been so much contradicted in her life",
-    "before, and she felt that she was losing her temper.",
-    "‘Are you content now?’ said the Caterpillar.",
-    "‘Well, I should like to be a LITTLE larger, sir, if you wouldn’t mind,’",
-    "said Alice: ‘three inches is such a wretched height to be.’",
-    "‘It is a very good height indeed!’ said the Caterpillar angrily, rearing",
-    "itself upright as it spoke (it was exactly three inches high).",
-    "‘But I’m not used to it!’ pleaded poor Alice in a piteous tone. And",
-    "she thought of herself, ‘I wish the creatures wouldn’t be so easily",
-    "offended!’",
-    "‘You’ll get used to it in time,’ said the Caterpillar; and it put the",
-    "hookah into its mouth and began smoking again.",
-    "This time Alice waited patiently until it chose to speak again. In",
-    "a minute or two the Caterpillar took the hookah out of its mouth",
-    "and yawned once or twice, and shook itself. Then it got down off the",
-    "mushroom, and crawled away in the grass, merely remarking as it went,",
-    "‘One side will make you grow taller, and the other side will make you",
-    "grow shorter.’",
-    "‘One side of WHAT? The other side of WHAT?’ thought Alice to herself.",
-    "‘Of the mushroom,’ said the Caterpillar, just as if she had asked it",
-    "aloud; and in another moment it was out of sight.",
-    "Alice remained looking thoughtfully at the mushroom for a minute, trying",
-    "to make out which were the two sides of it; and as it was perfectly",
-    "round, she found this a very difficult question. However, at last she",
-    "stretched her arms round it as far as they would go, and broke off a bit",
-    "of the edge with each hand.",
-    "‘And now which is which?’ she said to herself, and nibbled a little of",
-    "the right-hand bit to try the effect: the next moment she felt a violent",
-    "blow underneath her chin: it had struck her foot!",
-    "She was a good deal frightened by this very sudden change, but she felt",
-    "that there was no time to be lost, as she was shrinking rapidly; so she",
-    "set to work at once to eat some of the other bit. Her chin was pressed",
-    "so closely against her foot, that there was hardly room to open her",
-    "mouth; but she did it at last, and managed to swallow a morsel of the",
-    "lefthand bit.",
-    "  *    *    *    *    *    *    *",
-    "    *    *    *    *    *    *",
-    "  *    *    *    *    *    *    *",
-    "‘Come, my head’s free at last!’ said Alice in a tone of delight, which",
-    "changed into alarm in another moment, when she found that her shoulders",
-    "were nowhere to be found: all she could see, when she looked down, was",
-    "an immense length of neck, which seemed to rise like a stalk out of a",
-    "sea of green leaves that lay far below her.",
-    "‘What CAN all that green stuff be?’ said Alice. ‘And where HAVE my",
-    "shoulders got to? And oh, my poor hands, how is it I can’t see you?’",
-    "She was moving them about as she spoke, but no result seemed to follow,",
-    "except a little shaking among the distant green leaves.",
-    "As there seemed to be no chance of getting her hands up to her head, she",
-    "tried to get her head down to them, and was delighted to find that her",
-    "neck would bend about easily in any direction, like a serpent. She had",
-    "just succeeded in curving it down into a graceful zigzag, and was going",
-    "to dive in among the leaves, which she found to be nothing but the tops",
-    "of the trees under which she had been wandering, when a sharp hiss made",
-    "her draw back in a hurry: a large pigeon had flown into her face, and",
-    "was beating her violently with its wings.",
-    "‘Serpent!’ screamed the Pigeon.",
-    "‘I’m NOT a serpent!’ said Alice indignantly. ‘Let me alone!’",
-    "‘Serpent, I say again!’ repeated the Pigeon, but in a more subdued tone,",
-    "and added with a kind of sob, ‘I’ve tried every way, and nothing seems",
-    "to suit them!’",
-    "‘I haven’t the least idea what you’re talking about,’ said Alice.",
-    "‘I’ve tried the roots of trees, and I’ve tried banks, and I’ve tried",
-    "hedges,’ the Pigeon went on, without attending to her; ‘but those",
-    "serpents! There’s no pleasing them!’",
-    "Alice was more and more puzzled, but she thought there was no use in",
-    "saying anything more till the Pigeon had finished.",
-    "‘As if it wasn’t trouble enough hatching the eggs,’ said the Pigeon;",
-    "‘but I must be on the look-out for serpents night and day! Why, I",
-    "haven’t had a wink of sleep these three weeks!’",
-    "‘I’m very sorry you’ve been annoyed,’ said Alice, who was beginning to",
-    "see its meaning.",
-    "‘And just as I’d taken the highest tree in the wood,’ continued the",
-    "Pigeon, raising its voice to a shriek, ‘and just as I was thinking I",
-    "should be free of them at last, they must needs come wriggling down from",
-    "the sky! Ugh, Serpent!’",
-    "‘But I’m NOT a serpent, I tell you!’ said Alice. ‘I’m a--I’m a--’",
-    "‘Well! WHAT are you?’ said the Pigeon. ‘I can see you’re trying to",
-    "invent something!’",
-    "‘I--I’m a little girl,’ said Alice, rather doubtfully, as she remembered",
-    "the number of changes she had gone through that day.",
-    "‘A likely story indeed!’ said the Pigeon in a tone of the deepest",
-    "contempt. ‘I’ve seen a good many little girls in my time, but never ONE",
-    "with such a neck as that! No, no! You’re a serpent; and there’s no use",
-    "denying it. I suppose you’ll be telling me next that you never tasted an",
-    "egg!’",
-    "‘I HAVE tasted eggs, certainly,’ said Alice, who was a very truthful",
-    "child; ‘but little girls eat eggs quite as much as serpents do, you",
-    "know.’",
-    "‘I don’t believe it,’ said the Pigeon; ‘but if they do, why then they’re",
-    "a kind of serpent, that’s all I can say.’",
-    "This was such a new idea to Alice, that she was quite silent for a",
-    "minute or two, which gave the Pigeon the opportunity of adding, ‘You’re",
-    "looking for eggs, I know THAT well enough; and what does it matter to me",
-    "whether you’re a little girl or a serpent?’",
-    "‘It matters a good deal to ME,’ said Alice hastily; ‘but I’m not looking",
-    "for eggs, as it happens; and if I was, I shouldn’t want YOURS: I don’t",
-    "like them raw.’",
-    "‘Well, be off, then!’ said the Pigeon in a sulky tone, as it settled",
-    "down again into its nest. Alice crouched down among the trees as well as",
-    "she could, for her neck kept getting entangled among the branches, and",
-    "every now and then she had to stop and untwist it. After a while she",
-    "remembered that she still held the pieces of mushroom in her hands, and",
-    "she set to work very carefully, nibbling first at one and then at the",
-    "other, and growing sometimes taller and sometimes shorter, until she had",
-    "succeeded in bringing herself down to her usual height.",
-    "It was so long since she had been anything near the right size, that it",
-    "felt quite strange at first; but she got used to it in a few minutes,",
-    "and began talking to herself, as usual. ‘Come, there’s half my plan done",
-    "now! How puzzling all these changes are! I’m never sure what I’m going",
-    "to be, from one minute to another! However, I’ve got back to my right",
-    "size: the next thing is, to get into that beautiful garden--how IS that",
-    "to be done, I wonder?’ As she said this, she came suddenly upon an open",
-    "place, with a little house in it about four feet high. ‘Whoever lives",
-    "there,’ thought Alice, ‘it’ll never do to come upon them THIS size: why,",
-    "I should frighten them out of their wits!’ So she began nibbling at the",
-    "righthand bit again, and did not venture to go near the house till she",
-    "had brought herself down to nine inches high.",
-    "CHAPTER VI. Pig and Pepper",
-    "For a minute or two she stood looking at the house, and wondering what",
-    "to do next, when suddenly a footman in livery came running out of the",
-    "wood--(she considered him to be a footman because he was in livery:",
-    "otherwise, judging by his face only, she would have called him a",
-    "fish)--and rapped loudly at the door with his knuckles. It was opened",
-    "by another footman in livery, with a round face, and large eyes like a",
-    "frog; and both footmen, Alice noticed, had powdered hair that curled all",
-    "over their heads. She felt very curious to know what it was all about,",
-    "and crept a little way out of the wood to listen.",
-    "The Fish-Footman began by producing from under his arm a great letter,",
-    "nearly as large as himself, and this he handed over to the other,",
-    "saying, in a solemn tone, ‘For the Duchess. An invitation from the Queen",
-    "to play croquet.’ The Frog-Footman repeated, in the same solemn tone,",
-    "only changing the order of the words a little, ‘From the Queen. An",
-    "invitation for the Duchess to play croquet.’",
-    "Then they both bowed low, and their curls got entangled together.",
-    "Alice laughed so much at this, that she had to run back into the",
-    "wood for fear of their hearing her; and when she next peeped out the",
-    "Fish-Footman was gone, and the other was sitting on the ground near the",
-    "door, staring stupidly up into the sky.",
-    "Alice went timidly up to the door, and knocked.",
-    "‘There’s no sort of use in knocking,’ said the Footman, ‘and that for",
-    "two reasons. First, because I’m on the same side of the door as you",
-    "are; secondly, because they’re making such a noise inside, no one could",
-    "possibly hear you.’ And certainly there was a most extraordinary noise",
-    "going on within--a constant howling and sneezing, and every now and then",
-    "a great crash, as if a dish or kettle had been broken to pieces.",
-    "‘Please, then,’ said Alice, ‘how am I to get in?’",
-    "‘There might be some sense in your knocking,’ the Footman went on",
-    "without attending to her, ‘if we had the door between us. For instance,",
-    "if you were INSIDE, you might knock, and I could let you out, you know.’",
-    "He was looking up into the sky all the time he was speaking, and this",
-    "Alice thought decidedly uncivil. ‘But perhaps he can’t help it,’ she",
-    "said to herself; ‘his eyes are so VERY nearly at the top of his head.",
-    "But at any rate he might answer questions.--How am I to get in?’ she",
-    "repeated, aloud.",
-    "‘I shall sit here,’ the Footman remarked, ‘till tomorrow--’",
-    "At this moment the door of the house opened, and a large plate came",
-    "skimming out, straight at the Footman’s head: it just grazed his nose,",
-    "and broke to pieces against one of the trees behind him.",
-    "‘--or next day, maybe,’ the Footman continued in the same tone, exactly",
-    "as if nothing had happened.",
-    "‘How am I to get in?’ asked Alice again, in a louder tone.",
-    "‘ARE you to get in at all?’ said the Footman. ‘That’s the first",
-    "question, you know.’",
-    "It was, no doubt: only Alice did not like to be told so. ‘It’s really",
-    "dreadful,’ she muttered to herself, ‘the way all the creatures argue.",
-    "It’s enough to drive one crazy!’",
-    "The Footman seemed to think this a good opportunity for repeating his",
-    "remark, with variations. ‘I shall sit here,’ he said, ‘on and off, for",
-    "days and days.’",
-    "‘But what am I to do?’ said Alice.",
-    "‘Anything you like,’ said the Footman, and began whistling.",
-    "‘Oh, there’s no use in talking to him,’ said Alice desperately: ‘he’s",
-    "perfectly idiotic!’ And she opened the door and went in.",
-    "The door led right into a large kitchen, which was full of smoke from",
-    "one end to the other: the Duchess was sitting on a three-legged stool in",
-    "the middle, nursing a baby; the cook was leaning over the fire, stirring",
-    "a large cauldron which seemed to be full of soup.",
-    "‘There’s certainly too much pepper in that soup!’ Alice said to herself,",
-    "as well as she could for sneezing.",
-    "There was certainly too much of it in the air. Even the Duchess",
-    "sneezed occasionally; and as for the baby, it was sneezing and howling",
-    "alternately without a moment’s pause. The only things in the kitchen",
-    "that did not sneeze, were the cook, and a large cat which was sitting on",
-    "the hearth and grinning from ear to ear.",
-    "‘Please would you tell me,’ said Alice, a little timidly, for she was",
-    "not quite sure whether it was good manners for her to speak first, ‘why",
-    "your cat grins like that?’",
-    "‘It’s a Cheshire cat,’ said the Duchess, ‘and that’s why. Pig!’",
-    "She said the last word with such sudden violence that Alice quite",
-    "jumped; but she saw in another moment that it was addressed to the baby,",
-    "and not to her, so she took courage, and went on again:--",
-    "‘I didn’t know that Cheshire cats always grinned; in fact, I didn’t know",
-    "that cats COULD grin.’",
-    "‘They all can,’ said the Duchess; ‘and most of ‘em do.’",
-    "‘I don’t know of any that do,’ Alice said very politely, feeling quite",
-    "pleased to have got into a conversation.",
-    "‘You don’t know much,’ said the Duchess; ‘and that’s a fact.’",
-    "Alice did not at all like the tone of this remark, and thought it would",
-    "be as well to introduce some other subject of conversation. While she",
-    "was trying to fix on one, the cook took the cauldron of soup off the",
-    "fire, and at once set to work throwing everything within her reach at",
-    "the Duchess and the baby--the fire-irons came first; then followed a",
-    "shower of saucepans, plates, and dishes. The Duchess took no notice of",
-    "them even when they hit her; and the baby was howling so much already,",
-    "that it was quite impossible to say whether the blows hurt it or not.",
-    "‘Oh, PLEASE mind what you’re doing!’ cried Alice, jumping up and down in",
-    "an agony of terror. ‘Oh, there goes his PRECIOUS nose’; as an unusually",
-    "large saucepan flew close by it, and very nearly carried it off.",
-    "‘If everybody minded their own business,’ the Duchess said in a hoarse",
-    "growl, ‘the world would go round a deal faster than it does.’",
-    "‘Which would NOT be an advantage,’ said Alice, who felt very glad to get",
-    "an opportunity of showing off a little of her knowledge. ‘Just think of",
-    "what work it would make with the day and night! You see the earth takes",
-    "twenty-four hours to turn round on its axis--’",
-    "‘Talking of axes,’ said the Duchess, ‘chop off her head!’",
-    "Alice glanced rather anxiously at the cook, to see if she meant to take",
-    "the hint; but the cook was busily stirring the soup, and seemed not to",
-    "be listening, so she went on again: ‘Twenty-four hours, I THINK; or is",
-    "it twelve? I--’",
-    "‘Oh, don’t bother ME,’ said the Duchess; ‘I never could abide figures!’",
-    "And with that she began nursing her child again, singing a sort of",
-    "lullaby to it as she did so, and giving it a violent shake at the end of",
-    "every line:",
-    "   ‘Speak roughly to your little boy,",
-    "    And beat him when he sneezes:",
-    "   He only does it to annoy,",
-    "    Because he knows it teases.’",
-    "         CHORUS.",
-    " (In which the cook and the baby joined):--",
-    "       ‘Wow! wow! wow!’",
-    "While the Duchess sang the second verse of the song, she kept tossing",
-    "the baby violently up and down, and the poor little thing howled so,",
-    "that Alice could hardly hear the words:--",
-    "   ‘I speak severely to my boy,",
-    "    I beat him when he sneezes;",
-    "   For he can thoroughly enjoy",
-    "    The pepper when he pleases!’",
-    "         CHORUS.",
-    "       ‘Wow! wow! wow!’",
-    "‘Here! you may nurse it a bit, if you like!’ the Duchess said to Alice,",
-    "flinging the baby at her as she spoke. ‘I must go and get ready to play",
-    "croquet with the Queen,’ and she hurried out of the room. The cook threw",
-    "a frying-pan after her as she went out, but it just missed her.",
-    "Alice caught the baby with some difficulty, as it was a queer-shaped",
-    "little creature, and held out its arms and legs in all directions, ‘just",
-    "like a star-fish,’ thought Alice. The poor little thing was snorting",
-    "like a steam-engine when she caught it, and kept doubling itself up and",
-    "straightening itself out again, so that altogether, for the first minute",
-    "or two, it was as much as she could do to hold it.",
-    "As soon as she had made out the proper way of nursing it, (which was to",
-    "twist it up into a sort of knot, and then keep tight hold of its right",
-    "ear and left foot, so as to prevent its undoing itself,) she carried",
-    "it out into the open air. ‘IF I don’t take this child away with me,’",
-    "thought Alice, ‘they’re sure to kill it in a day or two: wouldn’t it be",
-    "murder to leave it behind?’ She said the last words out loud, and the",
-    "little thing grunted in reply (it had left off sneezing by this time).",
-    "‘Don’t grunt,’ said Alice; ‘that’s not at all a proper way of expressing",
-    "yourself.’",
-    "The baby grunted again, and Alice looked very anxiously into its face to",
-    "see what was the matter with it. There could be no doubt that it had",
-    "a VERY turn-up nose, much more like a snout than a real nose; also its",
-    "eyes were getting extremely small for a baby: altogether Alice did not",
-    "like the look of the thing at all. ‘But perhaps it was only sobbing,’",
-    "she thought, and looked into its eyes again, to see if there were any",
-    "tears.",
-    "No, there were no tears. ‘If you’re going to turn into a pig, my dear,’",
-    "said Alice, seriously, ‘I’ll have nothing more to do with you. Mind",
-    "now!’ The poor little thing sobbed again (or grunted, it was impossible",
-    "to say which), and they went on for some while in silence.",
-    "Alice was just beginning to think to herself, ‘Now, what am I to do with",
-    "this creature when I get it home?’ when it grunted again, so violently,",
-    "that she looked down into its face in some alarm. This time there could",
-    "be NO mistake about it: it was neither more nor less than a pig, and she",
-    "felt that it would be quite absurd for her to carry it further.",
-    "So she set the little creature down, and felt quite relieved to see",
-    "it trot away quietly into the wood. ‘If it had grown up,’ she said",
-    "to herself, ‘it would have made a dreadfully ugly child: but it makes",
-    "rather a handsome pig, I think.’ And she began thinking over other",
-    "children she knew, who might do very well as pigs, and was just saying",
-    "to herself, ‘if one only knew the right way to change them--’ when she",
-    "was a little startled by seeing the Cheshire Cat sitting on a bough of a",
-    "tree a few yards off.",
-    "The Cat only grinned when it saw Alice. It looked good-natured, she",
-    "thought: still it had VERY long claws and a great many teeth, so she",
-    "felt that it ought to be treated with respect.",
-    "‘Cheshire Puss,’ she began, rather timidly, as she did not at all know",
-    "whether it would like the name: however, it only grinned a little wider.",
-    "‘Come, it’s pleased so far,’ thought Alice, and she went on. ‘Would you",
-    "tell me, please, which way I ought to go from here?’",
-    "‘That depends a good deal on where you want to get to,’ said the Cat.",
-    "‘I don’t much care where--’ said Alice.",
-    "‘Then it doesn’t matter which way you go,’ said the Cat.",
-    "‘--so long as I get SOMEWHERE,’ Alice added as an explanation.",
-    "‘Oh, you’re sure to do that,’ said the Cat, ‘if you only walk long",
-    "enough.’",
-    "Alice felt that this could not be denied, so she tried another question.",
-    "‘What sort of people live about here?’",
-    "‘In THAT direction,’ the Cat said, waving its right paw round, ‘lives",
-    "a Hatter: and in THAT direction,’ waving the other paw, ‘lives a March",
-    "Hare. Visit either you like: they’re both mad.’",
-    "‘But I don’t want to go among mad people,’ Alice remarked.",
-    "‘Oh, you can’t help that,’ said the Cat: ‘we’re all mad here. I’m mad.",
-    "You’re mad.’",
-    "‘How do you know I’m mad?’ said Alice.",
-    "‘You must be,’ said the Cat, ‘or you wouldn’t have come here.’",
-    "Alice didn’t think that proved it at all; however, she went on ‘And how",
-    "do you know that you’re mad?’",
-    "‘To begin with,’ said the Cat, ‘a dog’s not mad. You grant that?’",
-    "‘I suppose so,’ said Alice.",
-    "‘Well, then,’ the Cat went on, ‘you see, a dog growls when it’s angry,",
-    "and wags its tail when it’s pleased. Now I growl when I’m pleased, and",
-    "wag my tail when I’m angry. Therefore I’m mad.’",
-    "‘I call it purring, not growling,’ said Alice.",
-    "‘Call it what you like,’ said the Cat. ‘Do you play croquet with the",
-    "Queen to-day?’",
-    "‘I should like it very much,’ said Alice, ‘but I haven’t been invited",
-    "yet.’",
-    "‘You’ll see me there,’ said the Cat, and vanished.",
-    "Alice was not much surprised at this, she was getting so used to queer",
-    "things happening. While she was looking at the place where it had been,",
-    "it suddenly appeared again.",
-    "‘By-the-bye, what became of the baby?’ said the Cat. ‘I’d nearly",
-    "forgotten to ask.’",
-    "‘It turned into a pig,’ Alice quietly said, just as if it had come back",
-    "in a natural way.",
-    "‘I thought it would,’ said the Cat, and vanished again.",
-    "Alice waited a little, half expecting to see it again, but it did not",
-    "appear, and after a minute or two she walked on in the direction in",
-    "which the March Hare was said to live. ‘I’ve seen hatters before,’ she",
-    "said to herself; ‘the March Hare will be much the most interesting, and",
-    "perhaps as this is May it won’t be raving mad--at least not so mad as",
-    "it was in March.’ As she said this, she looked up, and there was the Cat",
-    "again, sitting on a branch of a tree.",
-    "‘Did you say pig, or fig?’ said the Cat.",
-    "‘I said pig,’ replied Alice; ‘and I wish you wouldn’t keep appearing and",
-    "vanishing so suddenly: you make one quite giddy.’",
-    "‘All right,’ said the Cat; and this time it vanished quite slowly,",
-    "beginning with the end of the tail, and ending with the grin, which",
-    "remained some time after the rest of it had gone.",
-    "‘Well! I’ve often seen a cat without a grin,’ thought Alice; ‘but a grin",
-    "without a cat! It’s the most curious thing I ever saw in my life!’",
-    "She had not gone much farther before she came in sight of the house",
-    "of the March Hare: she thought it must be the right house, because the",
-    "chimneys were shaped like ears and the roof was thatched with fur. It",
-    "was so large a house, that she did not like to go nearer till she had",
-    "nibbled some more of the lefthand bit of mushroom, and raised herself to",
-    "about two feet high: even then she walked up towards it rather timidly,",
-    "saying to herself ‘Suppose it should be raving mad after all! I almost",
-    "wish I’d gone to see the Hatter instead!’",
-    "CHAPTER VII. A Mad Tea-Party",
-    "There was a table set out under a tree in front of the house, and the",
-    "March Hare and the Hatter were having tea at it: a Dormouse was sitting",
-    "between them, fast asleep, and the other two were using it as a",
-    "cushion, resting their elbows on it, and talking over its head. ‘Very",
-    "uncomfortable for the Dormouse,’ thought Alice; ‘only, as it’s asleep, I",
-    "suppose it doesn’t mind.’",
-    "The table was a large one, but the three were all crowded together at",
-    "one corner of it: ‘No room! No room!’ they cried out when they saw Alice",
-    "coming. ‘There’s PLENTY of room!’ said Alice indignantly, and she sat",
-    "down in a large arm-chair at one end of the table.",
-    "‘Have some wine,’ the March Hare said in an encouraging tone.",
-    "Alice looked all round the table, but there was nothing on it but tea.",
-    "‘I don’t see any wine,’ she remarked.",
-    "‘There isn’t any,’ said the March Hare.",
-    "‘Then it wasn’t very civil of you to offer it,’ said Alice angrily.",
-    "‘It wasn’t very civil of you to sit down without being invited,’ said",
-    "the March Hare.",
-    "‘I didn’t know it was YOUR table,’ said Alice; ‘it’s laid for a great",
-    "many more than three.’",
-    "‘Your hair wants cutting,’ said the Hatter. He had been looking at Alice",
-    "for some time with great curiosity, and this was his first speech.",
-    "‘You should learn not to make personal remarks,’ Alice said with some",
-    "severity; ‘it’s very rude.’",
-    "The Hatter opened his eyes very wide on hearing this; but all he SAID",
-    "was, ‘Why is a raven like a writing-desk?’",
-    "‘Come, we shall have some fun now!’ thought Alice. ‘I’m glad they’ve",
-    "begun asking riddles.--I believe I can guess that,’ she added aloud.",
-    "‘Do you mean that you think you can find out the answer to it?’ said the",
-    "March Hare.",
-    "‘Exactly so,’ said Alice.",
-    "‘Then you should say what you mean,’ the March Hare went on.",
-    "‘I do,’ Alice hastily replied; ‘at least--at least I mean what I",
-    "say--that’s the same thing, you know.’",
-    "‘Not the same thing a bit!’ said the Hatter. ‘You might just as well say",
-    "that “I see what I eat” is the same thing as “I eat what I see”!’",
-    "‘You might just as well say,’ added the March Hare, ‘that “I like what I",
-    "get” is the same thing as “I get what I like”!’",
-    "‘You might just as well say,’ added the Dormouse, who seemed to be",
-    "talking in his sleep, ‘that “I breathe when I sleep” is the same thing",
-    "as “I sleep when I breathe”!’",
-    "‘It IS the same thing with you,’ said the Hatter, and here the",
-    "conversation dropped, and the party sat silent for a minute, while Alice",
-    "thought over all she could remember about ravens and writing-desks,",
-    "which wasn’t much.",
-    "The Hatter was the first to break the silence. ‘What day of the month",
-    "is it?’ he said, turning to Alice: he had taken his watch out of his",
-    "pocket, and was looking at it uneasily, shaking it every now and then,",
-    "and holding it to his ear.",
-    "Alice considered a little, and then said ‘The fourth.’",
-    "‘Two days wrong!’ sighed the Hatter. ‘I told you butter wouldn’t suit",
-    "the works!’ he added looking angrily at the March Hare.",
-    "‘It was the BEST butter,’ the March Hare meekly replied.",
-    "‘Yes, but some crumbs must have got in as well,’ the Hatter grumbled:",
-    "‘you shouldn’t have put it in with the bread-knife.’",
-    "The March Hare took the watch and looked at it gloomily: then he dipped",
-    "it into his cup of tea, and looked at it again: but he could think of",
-    "nothing better to say than his first remark, ‘It was the BEST butter,",
-    "you know.’",
-    "Alice had been looking over his shoulder with some curiosity. ‘What a",
-    "funny watch!’ she remarked. ‘It tells the day of the month, and doesn’t",
-    "tell what o’clock it is!’",
-    "‘Why should it?’ muttered the Hatter. ‘Does YOUR watch tell you what",
-    "year it is?’",
-    "‘Of course not,’ Alice replied very readily: ‘but that’s because it",
-    "stays the same year for such a long time together.’",
-    "‘Which is just the case with MINE,’ said the Hatter.",
-    "Alice felt dreadfully puzzled. The Hatter’s remark seemed to have no",
-    "sort of meaning in it, and yet it was certainly English. ‘I don’t quite",
-    "understand you,’ she said, as politely as she could.",
-    "‘The Dormouse is asleep again,’ said the Hatter, and he poured a little",
-    "hot tea upon its nose.",
-    "The Dormouse shook its head impatiently, and said, without opening its",
-    "eyes, ‘Of course, of course; just what I was going to remark myself.’",
-    "‘Have you guessed the riddle yet?’ the Hatter said, turning to Alice",
-    "again.",
-    "‘No, I give it up,’ Alice replied: ‘what’s the answer?’",
-    "‘I haven’t the slightest idea,’ said the Hatter.",
-    "‘Nor I,’ said the March Hare.",
-    "Alice sighed wearily. ‘I think you might do something better with the",
-    "time,’ she said, ‘than waste it in asking riddles that have no answers.’",
-    "‘If you knew Time as well as I do,’ said the Hatter, ‘you wouldn’t talk",
-    "about wasting IT. It’s HIM.’",
-    "‘I don’t know what you mean,’ said Alice.",
-    "‘Of course you don’t!’ the Hatter said, tossing his head contemptuously.",
-    "‘I dare say you never even spoke to Time!’",
-    "‘Perhaps not,’ Alice cautiously replied: ‘but I know I have to beat time",
-    "when I learn music.’",
-    "‘Ah! that accounts for it,’ said the Hatter. ‘He won’t stand beating.",
-    "Now, if you only kept on good terms with him, he’d do almost anything",
-    "you liked with the clock. For instance, suppose it were nine o’clock in",
-    "the morning, just time to begin lessons: you’d only have to whisper a",
-    "hint to Time, and round goes the clock in a twinkling! Half-past one,",
-    "time for dinner!’",
-    "[‘I only wish it was,’ the March Hare said to itself in a whisper.)",
-    "‘That would be grand, certainly,’ said Alice thoughtfully: ‘but then--I",
-    "shouldn’t be hungry for it, you know.’",
-    "‘Not at first, perhaps,’ said the Hatter: ‘but you could keep it to",
-    "half-past one as long as you liked.’",
-    "‘Is that the way YOU manage?’ Alice asked.",
-    "The Hatter shook his head mournfully. ‘Not I!’ he replied. ‘We",
-    "quarrelled last March--just before HE went mad, you know--’ (pointing",
-    "with his tea spoon at the March Hare,) ‘--it was at the great concert",
-    "given by the Queen of Hearts, and I had to sing",
-    "     “Twinkle, twinkle, little bat!",
-    "     How I wonder what you’re at!”",
-    "You know the song, perhaps?’",
-    "‘I’ve heard something like it,’ said Alice.",
-    "‘It goes on, you know,’ the Hatter continued, ‘in this way:--",
-    "     “Up above the world you fly,",
-    "     Like a tea-tray in the sky.",
-    "         Twinkle, twinkle--“’",
-    "Here the Dormouse shook itself, and began singing in its sleep ‘Twinkle,",
-    "twinkle, twinkle, twinkle--’ and went on so long that they had to pinch",
-    "it to make it stop.",
-    "‘Well, I’d hardly finished the first verse,’ said the Hatter, ‘when the",
-    "Queen jumped up and bawled out, “He’s murdering the time! Off with his",
-    "head!”’",
-    "‘How dreadfully savage!’ exclaimed Alice.",
-    "‘And ever since that,’ the Hatter went on in a mournful tone, ‘he won’t",
-    "do a thing I ask! It’s always six o’clock now.’",
-    "A bright idea came into Alice’s head. ‘Is that the reason so many",
-    "tea-things are put out here?’ she asked.",
-    "‘Yes, that’s it,’ said the Hatter with a sigh: ‘it’s always tea-time,",
-    "and we’ve no time to wash the things between whiles.’",
-    "‘Then you keep moving round, I suppose?’ said Alice.",
-    "‘Exactly so,’ said the Hatter: ‘as the things get used up.’",
-    "‘But what happens when you come to the beginning again?’ Alice ventured",
-    "to ask.",
-    "‘Suppose we change the subject,’ the March Hare interrupted, yawning.",
-    "‘I’m getting tired of this. I vote the young lady tells us a story.’",
-    "‘I’m afraid I don’t know one,’ said Alice, rather alarmed at the",
-    "proposal.",
-    "‘Then the Dormouse shall!’ they both cried. ‘Wake up, Dormouse!’ And",
-    "they pinched it on both sides at once.",
-    "The Dormouse slowly opened his eyes. ‘I wasn’t asleep,’ he said in a",
-    "hoarse, feeble voice: ‘I heard every word you fellows were saying.’",
-    "‘Tell us a story!’ said the March Hare.",
-    "‘Yes, please do!’ pleaded Alice.",
-    "‘And be quick about it,’ added the Hatter, ‘or you’ll be asleep again",
-    "before it’s done.’",
-    "‘Once upon a time there were three little sisters,’ the Dormouse began",
-    "in a great hurry; ‘and their names were Elsie, Lacie, and Tillie; and",
-    "they lived at the bottom of a well--’",
-    "‘What did they live on?’ said Alice, who always took a great interest in",
-    "questions of eating and drinking.",
-    "‘They lived on treacle,’ said the Dormouse, after thinking a minute or",
-    "two.",
-    "‘They couldn’t have done that, you know,’ Alice gently remarked; ‘they’d",
-    "have been ill.’",
-    "‘So they were,’ said the Dormouse; ‘VERY ill.’",
-    "Alice tried to fancy to herself what such an extraordinary ways of",
-    "living would be like, but it puzzled her too much, so she went on: ‘But",
-    "why did they live at the bottom of a well?’",
-    "‘Take some more tea,’ the March Hare said to Alice, very earnestly.",
-    "‘I’ve had nothing yet,’ Alice replied in an offended tone, ‘so I can’t",
-    "take more.’",
-    "‘You mean you can’t take LESS,’ said the Hatter: ‘it’s very easy to take",
-    "MORE than nothing.’",
-    "‘Nobody asked YOUR opinion,’ said Alice.",
-    "‘Who’s making personal remarks now?’ the Hatter asked triumphantly.",
-    "Alice did not quite know what to say to this: so she helped herself",
-    "to some tea and bread-and-butter, and then turned to the Dormouse, and",
-    "repeated her question. ‘Why did they live at the bottom of a well?’",
-    "The Dormouse again took a minute or two to think about it, and then",
-    "said, ‘It was a treacle-well.’",
-    "‘There’s no such thing!’ Alice was beginning very angrily, but the",
-    "Hatter and the March Hare went ‘Sh! sh!’ and the Dormouse sulkily",
-    "remarked, ‘If you can’t be civil, you’d better finish the story for",
-    "yourself.’",
-    "‘No, please go on!’ Alice said very humbly; ‘I won’t interrupt again. I",
-    "dare say there may be ONE.’",
-    "‘One, indeed!’ said the Dormouse indignantly. However, he consented to",
-    "go on. ‘And so these three little sisters--they were learning to draw,",
-    "you know--’",
-    "‘What did they draw?’ said Alice, quite forgetting her promise.",
-    "‘Treacle,’ said the Dormouse, without considering at all this time.",
-    "‘I want a clean cup,’ interrupted the Hatter: ‘let’s all move one place",
-    "on.’",
-    "He moved on as he spoke, and the Dormouse followed him: the March Hare",
-    "moved into the Dormouse’s place, and Alice rather unwillingly took",
-    "the place of the March Hare. The Hatter was the only one who got any",
-    "advantage from the change: and Alice was a good deal worse off than",
-    "before, as the March Hare had just upset the milk-jug into his plate.",
-    "Alice did not wish to offend the Dormouse again, so she began very",
-    "cautiously: ‘But I don’t understand. Where did they draw the treacle",
-    "from?’",
-    "‘You can draw water out of a water-well,’ said the Hatter; ‘so I should",
-    "think you could draw treacle out of a treacle-well--eh, stupid?’",
-    "‘But they were IN the well,’ Alice said to the Dormouse, not choosing to",
-    "notice this last remark.",
-    "‘Of course they were’, said the Dormouse; ‘--well in.’",
-    "This answer so confused poor Alice, that she let the Dormouse go on for",
-    "some time without interrupting it.",
-    "‘They were learning to draw,’ the Dormouse went on, yawning and rubbing",
-    "its eyes, for it was getting very sleepy; ‘and they drew all manner of",
-    "things--everything that begins with an M--’",
-    "‘Why with an M?’ said Alice.",
-    "‘Why not?’ said the March Hare.",
-    "Alice was silent.",
-    "The Dormouse had closed its eyes by this time, and was going off into",
-    "a doze; but, on being pinched by the Hatter, it woke up again with",
-    "a little shriek, and went on: ‘--that begins with an M, such as",
-    "mouse-traps, and the moon, and memory, and muchness--you know you say",
-    "things are “much of a muchness”--did you ever see such a thing as a",
-    "drawing of a muchness?’",
-    "‘Really, now you ask me,’ said Alice, very much confused, ‘I don’t",
-    "think--’",
-    "‘Then you shouldn’t talk,’ said the Hatter.",
-    "This piece of rudeness was more than Alice could bear: she got up in",
-    "great disgust, and walked off; the Dormouse fell asleep instantly, and",
-    "neither of the others took the least notice of her going, though she",
-    "looked back once or twice, half hoping that they would call after her:",
-    "the last time she saw them, they were trying to put the Dormouse into",
-    "the teapot.",
-    "‘At any rate I’ll never go THERE again!’ said Alice as she picked her",
-    "way through the wood. ‘It’s the stupidest tea-party I ever was at in all",
-    "my life!’",
-    "Just as she said this, she noticed that one of the trees had a door",
-    "leading right into it. ‘That’s very curious!’ she thought. ‘But",
-    "everything’s curious today. I think I may as well go in at once.’ And in",
-    "she went.",
-    "Once more she found herself in the long hall, and close to the little",
-    "glass table. ‘Now, I’ll manage better this time,’ she said to herself,",
-    "and began by taking the little golden key, and unlocking the door that",
-    "led into the garden. Then she went to work nibbling at the mushroom (she",
-    "had kept a piece of it in her pocket) till she was about a foot high:",
-    "then she walked down the little passage: and THEN--she found herself at",
-    "last in the beautiful garden, among the bright flower-beds and the cool",
-    "fountains.",
-    "CHAPTER VIII. The Queen’s Croquet-Ground",
-    "A large rose-tree stood near the entrance of the garden: the roses",
-    "growing on it were white, but there were three gardeners at it, busily",
-    "painting them red. Alice thought this a very curious thing, and she went",
-    "nearer to watch them, and just as she came up to them she heard one of",
-    "them say, ‘Look out now, Five! Don’t go splashing paint over me like",
-    "that!’",
-    "‘I couldn’t help it,’ said Five, in a sulky tone; ‘Seven jogged my",
-    "elbow.’",
-    "On which Seven looked up and said, ‘That’s right, Five! Always lay the",
-    "blame on others!’",
-    "‘YOU’D better not talk!’ said Five. ‘I heard the Queen say only",
-    "yesterday you deserved to be beheaded!’",
-    "‘What for?’ said the one who had spoken first.",
-    "‘That’s none of YOUR business, Two!’ said Seven.",
-    "‘Yes, it IS his business!’ said Five, ‘and I’ll tell him--it was for",
-    "bringing the cook tulip-roots instead of onions.’",
-    "Seven flung down his brush, and had just begun ‘Well, of all the unjust",
-    "things--’ when his eye chanced to fall upon Alice, as she stood watching",
-    "them, and he checked himself suddenly: the others looked round also, and",
-    "all of them bowed low.",
-    "‘Would you tell me,’ said Alice, a little timidly, ‘why you are painting",
-    "those roses?’",
-    "Five and Seven said nothing, but looked at Two. Two began in a low",
-    "voice, ‘Why the fact is, you see, Miss, this here ought to have been a",
-    "RED rose-tree, and we put a white one in by mistake; and if the Queen",
-    "was to find it out, we should all have our heads cut off, you know.",
-    "So you see, Miss, we’re doing our best, afore she comes, to--’ At this",
-    "moment Five, who had been anxiously looking across the garden, called",
-    "out ‘The Queen! The Queen!’ and the three gardeners instantly threw",
-    "themselves flat upon their faces. There was a sound of many footsteps,",
-    "and Alice looked round, eager to see the Queen.",
-    "First came ten soldiers carrying clubs; these were all shaped like",
-    "the three gardeners, oblong and flat, with their hands and feet at the",
-    "corners: next the ten courtiers; these were ornamented all over with",
-    "diamonds, and walked two and two, as the soldiers did. After these came",
-    "the royal children; there were ten of them, and the little dears came",
-    "jumping merrily along hand in hand, in couples: they were all ornamented",
-    "with hearts. Next came the guests, mostly Kings and Queens, and among",
-    "them Alice recognised the White Rabbit: it was talking in a hurried",
-    "nervous manner, smiling at everything that was said, and went by without",
-    "noticing her. Then followed the Knave of Hearts, carrying the King’s",
-    "crown on a crimson velvet cushion; and, last of all this grand",
-    "procession, came THE KING AND QUEEN OF HEARTS.",
-    "Alice was rather doubtful whether she ought not to lie down on her face",
-    "like the three gardeners, but she could not remember ever having heard",
-    "of such a rule at processions; ‘and besides, what would be the use of",
-    "a procession,’ thought she, ‘if people had all to lie down upon their",
-    "faces, so that they couldn’t see it?’ So she stood still where she was,",
-    "and waited.",
-    "When the procession came opposite to Alice, they all stopped and looked",
-    "at her, and the Queen said severely ‘Who is this?’ She said it to the",
-    "Knave of Hearts, who only bowed and smiled in reply.",
-    "‘Idiot!’ said the Queen, tossing her head impatiently; and, turning to",
-    "Alice, she went on, ‘What’s your name, child?’",
-    "‘My name is Alice, so please your Majesty,’ said Alice very politely;",
-    "but she added, to herself, ‘Why, they’re only a pack of cards, after",
-    "all. I needn’t be afraid of them!’",
-    "‘And who are THESE?’ said the Queen, pointing to the three gardeners who",
-    "were lying round the rosetree; for, you see, as they were lying on their",
-    "faces, and the pattern on their backs was the same as the rest of the",
-    "pack, she could not tell whether they were gardeners, or soldiers, or",
-    "courtiers, or three of her own children.",
-    "‘How should I know?’ said Alice, surprised at her own courage. ‘It’s no",
-    "business of MINE.’",
-    "The Queen turned crimson with fury, and, after glaring at her for a",
-    "moment like a wild beast, screamed ‘Off with her head! Off--’",
-    "‘Nonsense!’ said Alice, very loudly and decidedly, and the Queen was",
-    "silent.",
-    "The King laid his hand upon her arm, and timidly said ‘Consider, my",
-    "dear: she is only a child!’",
-    "The Queen turned angrily away from him, and said to the Knave ‘Turn them",
-    "over!’",
-    "The Knave did so, very carefully, with one foot.",
-    "‘Get up!’ said the Queen, in a shrill, loud voice, and the three",
-    "gardeners instantly jumped up, and began bowing to the King, the Queen,",
-    "the royal children, and everybody else.",
-    "‘Leave off that!’ screamed the Queen. ‘You make me giddy.’ And then,",
-    "turning to the rose-tree, she went on, ‘What HAVE you been doing here?’",
-    "‘May it please your Majesty,’ said Two, in a very humble tone, going",
-    "down on one knee as he spoke, ‘we were trying--’",
-    "‘I see!’ said the Queen, who had meanwhile been examining the roses.",
-    "‘Off with their heads!’ and the procession moved on, three of the",
-    "soldiers remaining behind to execute the unfortunate gardeners, who ran",
-    "to Alice for protection.",
-    "‘You shan’t be beheaded!’ said Alice, and she put them into a large",
-    "flower-pot that stood near. The three soldiers wandered about for a",
-    "minute or two, looking for them, and then quietly marched off after the",
-    "others.",
-    "‘Are their heads off?’ shouted the Queen.",
-    "‘Their heads are gone, if it please your Majesty!’ the soldiers shouted",
-    "in reply.",
-    "‘That’s right!’ shouted the Queen. ‘Can you play croquet?’",
-    "The soldiers were silent, and looked at Alice, as the question was",
-    "evidently meant for her.",
-    "‘Yes!’ shouted Alice.",
-    "‘Come on, then!’ roared the Queen, and Alice joined the procession,",
-    "wondering very much what would happen next.",
-    "‘It’s--it’s a very fine day!’ said a timid voice at her side. She was",
-    "walking by the White Rabbit, who was peeping anxiously into her face.",
-    "‘Very,’ said Alice: ‘--where’s the Duchess?’",
-    "‘Hush! Hush!’ said the Rabbit in a low, hurried tone. He looked",
-    "anxiously over his shoulder as he spoke, and then raised himself upon",
-    "tiptoe, put his mouth close to her ear, and whispered ‘She’s under",
-    "sentence of execution.’",
-    "‘What for?’ said Alice.",
-    "‘Did you say “What a pity!”?’ the Rabbit asked.",
-    "‘No, I didn’t,’ said Alice: ‘I don’t think it’s at all a pity. I said",
-    "“What for?”’",
-    "‘She boxed the Queen’s ears--’ the Rabbit began. Alice gave a little",
-    "scream of laughter. ‘Oh, hush!’ the Rabbit whispered in a frightened",
-    "tone. ‘The Queen will hear you! You see, she came rather late, and the",
-    "Queen said--’",
-    "‘Get to your places!’ shouted the Queen in a voice of thunder, and",
-    "people began running about in all directions, tumbling up against each",
-    "other; however, they got settled down in a minute or two, and the game",
-    "began. Alice thought she had never seen such a curious croquet-ground in",
-    "her life; it was all ridges and furrows; the balls were live hedgehogs,",
-    "the mallets live flamingoes, and the soldiers had to double themselves",
-    "up and to stand on their hands and feet, to make the arches.",
-    "The chief difficulty Alice found at first was in managing her flamingo:",
-    "she succeeded in getting its body tucked away, comfortably enough, under",
-    "her arm, with its legs hanging down, but generally, just as she had got",
-    "its neck nicely straightened out, and was going to give the hedgehog a",
-    "blow with its head, it WOULD twist itself round and look up in her face,",
-    "with such a puzzled expression that she could not help bursting out",
-    "laughing: and when she had got its head down, and was going to begin",
-    "again, it was very provoking to find that the hedgehog had unrolled",
-    "itself, and was in the act of crawling away: besides all this, there was",
-    "generally a ridge or furrow in the way wherever she wanted to send the",
-    "hedgehog to, and, as the doubled-up soldiers were always getting up",
-    "and walking off to other parts of the ground, Alice soon came to the",
-    "conclusion that it was a very difficult game indeed.",
-    "The players all played at once without waiting for turns, quarrelling",
-    "all the while, and fighting for the hedgehogs; and in a very short",
-    "time the Queen was in a furious passion, and went stamping about, and",
-    "shouting ‘Off with his head!’ or ‘Off with her head!’ about once in a",
-    "minute.",
-    "Alice began to feel very uneasy: to be sure, she had not as yet had any",
-    "dispute with the Queen, but she knew that it might happen any minute,",
-    "‘and then,’ thought she, ‘what would become of me? They’re dreadfully",
-    "fond of beheading people here; the great wonder is, that there’s any one",
-    "left alive!’",
-    "She was looking about for some way of escape, and wondering whether she",
-    "could get away without being seen, when she noticed a curious appearance",
-    "in the air: it puzzled her very much at first, but, after watching it",
-    "a minute or two, she made it out to be a grin, and she said to herself",
-    "‘It’s the Cheshire Cat: now I shall have somebody to talk to.’",
-    "‘How are you getting on?’ said the Cat, as soon as there was mouth",
-    "enough for it to speak with.",
-    "Alice waited till the eyes appeared, and then nodded. ‘It’s no use",
-    "speaking to it,’ she thought, ‘till its ears have come, or at least one",
-    "of them.’ In another minute the whole head appeared, and then Alice put",
-    "down her flamingo, and began an account of the game, feeling very glad",
-    "she had someone to listen to her. The Cat seemed to think that there was",
-    "enough of it now in sight, and no more of it appeared.",
-    "‘I don’t think they play at all fairly,’ Alice began, in rather a",
-    "complaining tone, ‘and they all quarrel so dreadfully one can’t hear",
-    "oneself speak--and they don’t seem to have any rules in particular;",
-    "at least, if there are, nobody attends to them--and you’ve no idea how",
-    "confusing it is all the things being alive; for instance, there’s the",
-    "arch I’ve got to go through next walking about at the other end of the",
-    "ground--and I should have croqueted the Queen’s hedgehog just now, only",
-    "it ran away when it saw mine coming!’",
-    "‘How do you like the Queen?’ said the Cat in a low voice.",
-    "‘Not at all,’ said Alice: ‘she’s so extremely--’ Just then she noticed",
-    "that the Queen was close behind her, listening: so she went on,",
-    "‘--likely to win, that it’s hardly worth while finishing the game.’",
-    "The Queen smiled and passed on.",
-    "‘Who ARE you talking to?’ said the King, going up to Alice, and looking",
-    "at the Cat’s head with great curiosity.",
-    "‘It’s a friend of mine--a Cheshire Cat,’ said Alice: ‘allow me to",
-    "introduce it.’",
-    "‘I don’t like the look of it at all,’ said the King: ‘however, it may",
-    "kiss my hand if it likes.’",
-    "‘I’d rather not,’ the Cat remarked.",
-    "‘Don’t be impertinent,’ said the King, ‘and don’t look at me like that!’",
-    "He got behind Alice as he spoke.",
-    "‘A cat may look at a king,’ said Alice. ‘I’ve read that in some book,",
-    "but I don’t remember where.’",
-    "‘Well, it must be removed,’ said the King very decidedly, and he called",
-    "the Queen, who was passing at the moment, ‘My dear! I wish you would",
-    "have this cat removed!’",
-    "The Queen had only one way of settling all difficulties, great or small.",
-    "‘Off with his head!’ she said, without even looking round.",
-    "‘I’ll fetch the executioner myself,’ said the King eagerly, and he",
-    "hurried off.",
-    "Alice thought she might as well go back, and see how the game was going",
-    "on, as she heard the Queen’s voice in the distance, screaming with",
-    "passion. She had already heard her sentence three of the players to be",
-    "executed for having missed their turns, and she did not like the look",
-    "of things at all, as the game was in such confusion that she never knew",
-    "whether it was her turn or not. So she went in search of her hedgehog.",
-    "The hedgehog was engaged in a fight with another hedgehog, which seemed",
-    "to Alice an excellent opportunity for croqueting one of them with the",
-    "other: the only difficulty was, that her flamingo was gone across to the",
-    "other side of the garden, where Alice could see it trying in a helpless",
-    "sort of way to fly up into a tree.",
-    "By the time she had caught the flamingo and brought it back, the fight",
-    "was over, and both the hedgehogs were out of sight: ‘but it doesn’t",
-    "matter much,’ thought Alice, ‘as all the arches are gone from this side",
-    "of the ground.’ So she tucked it away under her arm, that it might not",
-    "escape again, and went back for a little more conversation with her",
-    "friend.",
-    "When she got back to the Cheshire Cat, she was surprised to find quite a",
-    "large crowd collected round it: there was a dispute going on between",
-    "the executioner, the King, and the Queen, who were all talking at once,",
-    "while all the rest were quite silent, and looked very uncomfortable.",
-    "The moment Alice appeared, she was appealed to by all three to settle",
-    "the question, and they repeated their arguments to her, though, as they",
-    "all spoke at once, she found it very hard indeed to make out exactly",
-    "what they said.",
-    "The executioner’s argument was, that you couldn’t cut off a head unless",
-    "there was a body to cut it off from: that he had never had to do such a",
-    "thing before, and he wasn’t going to begin at HIS time of life.",
-    "The King’s argument was, that anything that had a head could be",
-    "beheaded, and that you weren’t to talk nonsense.",
-    "The Queen’s argument was, that if something wasn’t done about it in less",
-    "than no time she’d have everybody executed, all round. (It was this last",
-    "remark that had made the whole party look so grave and anxious.)",
-    "Alice could think of nothing else to say but ‘It belongs to the Duchess:",
-    "you’d better ask HER about it.’",
-    "‘She’s in prison,’ the Queen said to the executioner: ‘fetch her here.’",
-    "And the executioner went off like an arrow.",
-    " The Cat’s head began fading away the moment he was gone, and,",
-    "by the time he had come back with the Duchess, it had entirely",
-    "disappeared; so the King and the executioner ran wildly up and down",
-    "looking for it, while the rest of the party went back to the game.",
-    "CHAPTER IX. The Mock Turtle’s Story",
-    "‘You can’t think how glad I am to see you again, you dear old thing!’",
-    "said the Duchess, as she tucked her arm affectionately into Alice’s, and",
-    "they walked off together.",
-    "Alice was very glad to find her in such a pleasant temper, and thought",
-    "to herself that perhaps it was only the pepper that had made her so",
-    "savage when they met in the kitchen.",
-    "‘When I’M a Duchess,’ she said to herself, (not in a very hopeful tone",
-    "though), ‘I won’t have any pepper in my kitchen AT ALL. Soup does very",
-    "well without--Maybe it’s always pepper that makes people hot-tempered,’",
-    "she went on, very much pleased at having found out a new kind of",
-    "rule, ‘and vinegar that makes them sour--and camomile that makes",
-    "them bitter--and--and barley-sugar and such things that make children",
-    "sweet-tempered. I only wish people knew that: then they wouldn’t be so",
-    "stingy about it, you know--’",
-    "She had quite forgotten the Duchess by this time, and was a little",
-    "startled when she heard her voice close to her ear. ‘You’re thinking",
-    "about something, my dear, and that makes you forget to talk. I can’t",
-    "tell you just now what the moral of that is, but I shall remember it in",
-    "a bit.’",
-    "‘Perhaps it hasn’t one,’ Alice ventured to remark.",
-    "‘Tut, tut, child!’ said the Duchess. ‘Everything’s got a moral, if only",
-    "you can find it.’ And she squeezed herself up closer to Alice’s side as",
-    "she spoke.",
-    "Alice did not much like keeping so close to her: first, because the",
-    "Duchess was VERY ugly; and secondly, because she was exactly the",
-    "right height to rest her chin upon Alice’s shoulder, and it was an",
-    "uncomfortably sharp chin. However, she did not like to be rude, so she",
-    "bore it as well as she could.",
-    "‘The game’s going on rather better now,’ she said, by way of keeping up",
-    "the conversation a little.",
-    "‘’Tis so,’ said the Duchess: ‘and the moral of that is--“Oh, ‘tis love,",
-    "‘tis love, that makes the world go round!”’",
-    "‘Somebody said,’ Alice whispered, ‘that it’s done by everybody minding",
-    "their own business!’",
-    "‘Ah, well! It means much the same thing,’ said the Duchess, digging her",
-    "sharp little chin into Alice’s shoulder as she added, ‘and the moral",
-    "of THAT is--“Take care of the sense, and the sounds will take care of",
-    "themselves.”’",
-    "‘How fond she is of finding morals in things!’ Alice thought to herself.",
-    "‘I dare say you’re wondering why I don’t put my arm round your waist,’",
-    "the Duchess said after a pause: ‘the reason is, that I’m doubtful about",
-    "the temper of your flamingo. Shall I try the experiment?’",
-    "‘HE might bite,’ Alice cautiously replied, not feeling at all anxious to",
-    "have the experiment tried.",
-    "‘Very true,’ said the Duchess: ‘flamingoes and mustard both bite. And",
-    "the moral of that is--“Birds of a feather flock together.”’",
-    "‘Only mustard isn’t a bird,’ Alice remarked.",
-    "‘Right, as usual,’ said the Duchess: ‘what a clear way you have of",
-    "putting things!’",
-    "‘It’s a mineral, I THINK,’ said Alice.",
-    "‘Of course it is,’ said the Duchess, who seemed ready to agree to",
-    "everything that Alice said; ‘there’s a large mustard-mine near here. And",
-    "the moral of that is--“The more there is of mine, the less there is of",
-    "yours.”’",
-    "‘Oh, I know!’ exclaimed Alice, who had not attended to this last remark,",
-    "‘it’s a vegetable. It doesn’t look like one, but it is.’",
-    "‘I quite agree with you,’ said the Duchess; ‘and the moral of that",
-    "is--“Be what you would seem to be”--or if you’d like it put more",
-    "simply--“Never imagine yourself not to be otherwise than what it might",
-    "appear to others that what you were or might have been was not otherwise",
-    "than what you had been would have appeared to them to be otherwise.”’",
-    "‘I think I should understand that better,’ Alice said very politely, ‘if",
-    "I had it written down: but I can’t quite follow it as you say it.’",
-    "‘That’s nothing to what I could say if I chose,’ the Duchess replied, in",
-    "a pleased tone.",
-    "‘Pray don’t trouble yourself to say it any longer than that,’ said",
-    "Alice.",
-    "‘Oh, don’t talk about trouble!’ said the Duchess. ‘I make you a present",
-    "of everything I’ve said as yet.’",
-    "‘A cheap sort of present!’ thought Alice. ‘I’m glad they don’t give",
-    "birthday presents like that!’ But she did not venture to say it out",
-    "loud.",
-    "‘Thinking again?’ the Duchess asked, with another dig of her sharp",
-    "little chin.",
-    "‘I’ve a right to think,’ said Alice sharply, for she was beginning to",
-    "feel a little worried.",
-    "‘Just about as much right,’ said the Duchess, ‘as pigs have to fly; and",
-    "the m--’",
-    "But here, to Alice’s great surprise, the Duchess’s voice died away, even",
-    "in the middle of her favourite word ‘moral,’ and the arm that was linked",
-    "into hers began to tremble. Alice looked up, and there stood the Queen",
-    "in front of them, with her arms folded, frowning like a thunderstorm.",
-    "‘A fine day, your Majesty!’ the Duchess began in a low, weak voice.",
-    "‘Now, I give you fair warning,’ shouted the Queen, stamping on the",
-    "ground as she spoke; ‘either you or your head must be off, and that in",
-    "about half no time! Take your choice!’",
-    "The Duchess took her choice, and was gone in a moment.",
-    "‘Let’s go on with the game,’ the Queen said to Alice; and Alice was",
-    "too much frightened to say a word, but slowly followed her back to the",
-    "croquet-ground.",
-    "The other guests had taken advantage of the Queen’s absence, and were",
-    "resting in the shade: however, the moment they saw her, they hurried",
-    "back to the game, the Queen merely remarking that a moment’s delay would",
-    "cost them their lives.",
-    "All the time they were playing the Queen never left off quarrelling with",
-    "the other players, and shouting ‘Off with his head!’ or ‘Off with her",
-    "head!’ Those whom she sentenced were taken into custody by the soldiers,",
-    "who of course had to leave off being arches to do this, so that by",
-    "the end of half an hour or so there were no arches left, and all the",
-    "players, except the King, the Queen, and Alice, were in custody and",
-    "under sentence of execution.",
-    "Then the Queen left off, quite out of breath, and said to Alice, ‘Have",
-    "you seen the Mock Turtle yet?’",
-    "‘No,’ said Alice. ‘I don’t even know what a Mock Turtle is.’",
-    "‘It’s the thing Mock Turtle Soup is made from,’ said the Queen.",
-    "‘I never saw one, or heard of one,’ said Alice.",
-    "‘Come on, then,’ said the Queen, ‘and he shall tell you his history,’",
-    "As they walked off together, Alice heard the King say in a low voice,",
-    "to the company generally, ‘You are all pardoned.’ ‘Come, THAT’S a good",
-    "thing!’ she said to herself, for she had felt quite unhappy at the",
-    "number of executions the Queen had ordered.",
-    "They very soon came upon a Gryphon, lying fast asleep in the sun.",
-    "(IF you don’t know what a Gryphon is, look at the picture.) ‘Up, lazy",
-    "thing!’ said the Queen, ‘and take this young lady to see the Mock",
-    "Turtle, and to hear his history. I must go back and see after some",
-    "executions I have ordered’; and she walked off, leaving Alice alone with",
-    "the Gryphon. Alice did not quite like the look of the creature, but on",
-    "the whole she thought it would be quite as safe to stay with it as to go",
-    "after that savage Queen: so she waited.",
-    "The Gryphon sat up and rubbed its eyes: then it watched the Queen till",
-    "she was out of sight: then it chuckled. ‘What fun!’ said the Gryphon,",
-    "half to itself, half to Alice.",
-    "‘What IS the fun?’ said Alice.",
-    "‘Why, SHE,’ said the Gryphon. ‘It’s all her fancy, that: they never",
-    "executes nobody, you know. Come on!’",
-    "‘Everybody says “come on!” here,’ thought Alice, as she went slowly",
-    "after it: ‘I never was so ordered about in all my life, never!’",
-    "They had not gone far before they saw the Mock Turtle in the distance,",
-    "sitting sad and lonely on a little ledge of rock, and, as they came",
-    "nearer, Alice could hear him sighing as if his heart would break. She",
-    "pitied him deeply. ‘What is his sorrow?’ she asked the Gryphon, and the",
-    "Gryphon answered, very nearly in the same words as before, ‘It’s all his",
-    "fancy, that: he hasn’t got no sorrow, you know. Come on!’",
-    "So they went up to the Mock Turtle, who looked at them with large eyes",
-    "full of tears, but said nothing.",
-    "‘This here young lady,’ said the Gryphon, ‘she wants for to know your",
-    "history, she do.’",
-    "‘I’ll tell it her,’ said the Mock Turtle in a deep, hollow tone: ‘sit",
-    "down, both of you, and don’t speak a word till I’ve finished.’",
-    "So they sat down, and nobody spoke for some minutes. Alice thought to",
-    "herself, ‘I don’t see how he can EVEN finish, if he doesn’t begin.’ But",
-    "she waited patiently.",
-    "‘Once,’ said the Mock Turtle at last, with a deep sigh, ‘I was a real",
-    "Turtle.’",
-    "These words were followed by a very long silence, broken only by an",
-    "occasional exclamation of ‘Hjckrrh!’ from the Gryphon, and the constant",
-    "heavy sobbing of the Mock Turtle. Alice was very nearly getting up and",
-    "saying, ‘Thank you, sir, for your interesting story,’ but she could",
-    "not help thinking there MUST be more to come, so she sat still and said",
-    "nothing.",
-    "‘When we were little,’ the Mock Turtle went on at last, more calmly,",
-    "though still sobbing a little now and then, ‘we went to school in the",
-    "sea. The master was an old Turtle--we used to call him Tortoise--’",
-    "‘Why did you call him Tortoise, if he wasn’t one?’ Alice asked.",
-    "‘We called him Tortoise because he taught us,’ said the Mock Turtle",
-    "angrily: ‘really you are very dull!’",
-    "‘You ought to be ashamed of yourself for asking such a simple question,’",
-    "added the Gryphon; and then they both sat silent and looked at poor",
-    "Alice, who felt ready to sink into the earth. At last the Gryphon said",
-    "to the Mock Turtle, ‘Drive on, old fellow! Don’t be all day about it!’",
-    "and he went on in these words:",
-    "‘Yes, we went to school in the sea, though you mayn’t believe it--’",
-    "‘I never said I didn’t!’ interrupted Alice.",
-    "‘You did,’ said the Mock Turtle.",
-    "‘Hold your tongue!’ added the Gryphon, before Alice could speak again.",
-    "The Mock Turtle went on.",
-    "‘We had the best of educations--in fact, we went to school every day--’",
-    "‘I’VE been to a day-school, too,’ said Alice; ‘you needn’t be so proud",
-    "as all that.’",
-    "‘With extras?’ asked the Mock Turtle a little anxiously.",
-    "‘Yes,’ said Alice, ‘we learned French and music.’",
-    "‘And washing?’ said the Mock Turtle.",
-    "‘Certainly not!’ said Alice indignantly.",
-    "‘Ah! then yours wasn’t a really good school,’ said the Mock Turtle in",
-    "a tone of great relief. ‘Now at OURS they had at the end of the bill,",
-    "“French, music, AND WASHING--extra.”’",
-    "‘You couldn’t have wanted it much,’ said Alice; ‘living at the bottom of",
-    "the sea.’",
-    "‘I couldn’t afford to learn it.’ said the Mock Turtle with a sigh. ‘I",
-    "only took the regular course.’",
-    "‘What was that?’ inquired Alice.",
-    "‘Reeling and Writhing, of course, to begin with,’ the Mock Turtle",
-    "replied; ‘and then the different branches of Arithmetic--Ambition,",
-    "Distraction, Uglification, and Derision.’",
-    "‘I never heard of “Uglification,”’ Alice ventured to say. ‘What is it?’",
-    "The Gryphon lifted up both its paws in surprise. ‘What! Never heard of",
-    "uglifying!’ it exclaimed. ‘You know what to beautify is, I suppose?’",
-    "‘Yes,’ said Alice doubtfully: ‘it means--to--make--anything--prettier.’",
-    "‘Well, then,’ the Gryphon went on, ‘if you don’t know what to uglify is,",
-    "you ARE a simpleton.’",
-    "Alice did not feel encouraged to ask any more questions about it, so she",
-    "turned to the Mock Turtle, and said ‘What else had you to learn?’",
-    "‘Well, there was Mystery,’ the Mock Turtle replied, counting off",
-    "the subjects on his flappers, ‘--Mystery, ancient and modern, with",
-    "Seaography: then Drawling--the Drawling-master was an old conger-eel,",
-    "that used to come once a week: HE taught us Drawling, Stretching, and",
-    "Fainting in Coils.’",
-    "‘What was THAT like?’ said Alice.",
-    "‘Well, I can’t show it you myself,’ the Mock Turtle said: ‘I’m too",
-    "stiff. And the Gryphon never learnt it.’",
-    "‘Hadn’t time,’ said the Gryphon: ‘I went to the Classics master, though.",
-    "He was an old crab, HE was.’",
-    "‘I never went to him,’ the Mock Turtle said with a sigh: ‘he taught",
-    "Laughing and Grief, they used to say.’",
-    "‘So he did, so he did,’ said the Gryphon, sighing in his turn; and both",
-    "creatures hid their faces in their paws.",
-    "‘And how many hours a day did you do lessons?’ said Alice, in a hurry to",
-    "change the subject.",
-    "‘Ten hours the first day,’ said the Mock Turtle: ‘nine the next, and so",
-    "on.’",
-    "‘What a curious plan!’ exclaimed Alice.",
-    "‘That’s the reason they’re called lessons,’ the Gryphon remarked:",
-    "‘because they lessen from day to day.’",
-    "This was quite a new idea to Alice, and she thought it over a little",
-    "before she made her next remark. ‘Then the eleventh day must have been a",
-    "holiday?’",
-    "‘Of course it was,’ said the Mock Turtle.",
-    "‘And how did you manage on the twelfth?’ Alice went on eagerly.",
-    "‘That’s enough about lessons,’ the Gryphon interrupted in a very decided",
-    "tone: ‘tell her something about the games now.’",
-    "CHAPTER X. The Lobster Quadrille",
-    "The Mock Turtle sighed deeply, and drew the back of one flapper across",
-    "his eyes. He looked at Alice, and tried to speak, but for a minute or",
-    "two sobs choked his voice. ‘Same as if he had a bone in his throat,’",
-    "said the Gryphon: and it set to work shaking him and punching him in",
-    "the back. At last the Mock Turtle recovered his voice, and, with tears",
-    "running down his cheeks, he went on again:--",
-    "‘You may not have lived much under the sea--’ [‘I haven’t,’ said",
-    "Alice)--‘and perhaps you were never even introduced to a lobster--’",
-    "(Alice began to say ‘I once tasted--’ but checked herself hastily, and",
-    "said ‘No, never’) ‘--so you can have no idea what a delightful thing a",
-    "Lobster Quadrille is!’",
-    "‘No, indeed,’ said Alice. ‘What sort of a dance is it?’",
-    "‘Why,’ said the Gryphon, ‘you first form into a line along the",
-    "sea-shore--’",
-    "‘Two lines!’ cried the Mock Turtle. ‘Seals, turtles, salmon, and so on;",
-    "then, when you’ve cleared all the jelly-fish out of the way--’",
-    "‘THAT generally takes some time,’ interrupted the Gryphon.",
-    "‘--you advance twice--’",
-    "‘Each with a lobster as a partner!’ cried the Gryphon.",
-    "‘Of course,’ the Mock Turtle said: ‘advance twice, set to partners--’",
-    "‘--change lobsters, and retire in same order,’ continued the Gryphon.",
-    "‘Then, you know,’ the Mock Turtle went on, ‘you throw the--’",
-    "‘The lobsters!’ shouted the Gryphon, with a bound into the air.",
-    "‘--as far out to sea as you can--’",
-    "‘Swim after them!’ screamed the Gryphon.",
-    "‘Turn a somersault in the sea!’ cried the Mock Turtle, capering wildly",
-    "about.",
-    "‘Change lobsters again!’ yelled the Gryphon at the top of its voice.",
-    "‘Back to land again, and that’s all the first figure,’ said the Mock",
-    "Turtle, suddenly dropping his voice; and the two creatures, who had been",
-    "jumping about like mad things all this time, sat down again very sadly",
-    "and quietly, and looked at Alice.",
-    "‘It must be a very pretty dance,’ said Alice timidly.",
-    "‘Would you like to see a little of it?’ said the Mock Turtle.",
-    "‘Very much indeed,’ said Alice.",
-    "‘Come, let’s try the first figure!’ said the Mock Turtle to the Gryphon.",
-    "‘We can do without lobsters, you know. Which shall sing?’",
-    "‘Oh, YOU sing,’ said the Gryphon. ‘I’ve forgotten the words.’",
-    "So they began solemnly dancing round and round Alice, every now and",
-    "then treading on her toes when they passed too close, and waving their",
-    "forepaws to mark the time, while the Mock Turtle sang this, very slowly",
-    "and sadly:--",
-    " ‘“Will you walk a little faster?” said a whiting to a snail.",
-    " “There’s a porpoise close behind us, and he’s treading on my tail.",
-    " See how eagerly the lobsters and the turtles all advance!",
-    " They are waiting on the shingle--will you come and join the dance?",
-    " Will you, won’t you, will you, won’t you, will you join the dance?",
-    " Will you, won’t you, will you, won’t you, won’t you join the dance?",
-    " “You can really have no notion how delightful it will be",
-    " When they take us up and throw us, with the lobsters, out to sea!”",
-    "  But the snail replied “Too far, too far!” and gave a look askance--",
-    " Said he thanked the whiting kindly, but he would not join the dance.",
-    " Would not, could not, would not, could not, would not join the dance.",
-    " Would not, could not, would not, could not, could not join the dance.",
-    " ‘“What matters it how far we go?” his scaly friend replied.",
-    " “There is another shore, you know, upon the other side.",
-    " The further off from England the nearer is to France--",
-    " Then turn not pale, beloved snail, but come and join the dance.",
-    " Will you, won’t you, will you, won’t you, will you join the dance?",
-    " Will you, won’t you, will you, won’t you, won’t you join the dance?”’",
-    "‘Thank you, it’s a very interesting dance to watch,’ said Alice, feeling",
-    "very glad that it was over at last: ‘and I do so like that curious song",
-    "about the whiting!’",
-    "‘Oh, as to the whiting,’ said the Mock Turtle, ‘they--you’ve seen them,",
-    "of course?’",
-    "‘Yes,’ said Alice, ‘I’ve often seen them at dinn--’ she checked herself",
-    "hastily.",
-    "‘I don’t know where Dinn may be,’ said the Mock Turtle, ‘but if you’ve",
-    "seen them so often, of course you know what they’re like.’",
-    "‘I believe so,’ Alice replied thoughtfully. ‘They have their tails in",
-    "their mouths--and they’re all over crumbs.’",
-    "‘You’re wrong about the crumbs,’ said the Mock Turtle: ‘crumbs would all",
-    "wash off in the sea. But they HAVE their tails in their mouths; and the",
-    "reason is--’ here the Mock Turtle yawned and shut his eyes.--‘Tell her",
-    "about the reason and all that,’ he said to the Gryphon.",
-    "‘The reason is,’ said the Gryphon, ‘that they WOULD go with the lobsters",
-    "to the dance. So they got thrown out to sea. So they had to fall a long",
-    "way. So they got their tails fast in their mouths. So they couldn’t get",
-    "them out again. That’s all.’",
-    "‘Thank you,’ said Alice, ‘it’s very interesting. I never knew so much",
-    "about a whiting before.’",
-    "‘I can tell you more than that, if you like,’ said the Gryphon. ‘Do you",
-    "know why it’s called a whiting?’",
-    "‘I never thought about it,’ said Alice. ‘Why?’",
-    "‘IT DOES THE BOOTS AND SHOES.’ the Gryphon replied very solemnly.",
-    "Alice was thoroughly puzzled. ‘Does the boots and shoes!’ she repeated",
-    "in a wondering tone.",
-    "‘Why, what are YOUR shoes done with?’ said the Gryphon. ‘I mean, what",
-    "makes them so shiny?’",
-    "Alice looked down at them, and considered a little before she gave her",
-    "answer. ‘They’re done with blacking, I believe.’",
-    "‘Boots and shoes under the sea,’ the Gryphon went on in a deep voice,",
-    "‘are done with a whiting. Now you know.’",
-    "‘And what are they made of?’ Alice asked in a tone of great curiosity.",
-    "‘Soles and eels, of course,’ the Gryphon replied rather impatiently:",
-    "‘any shrimp could have told you that.’",
-    "‘If I’d been the whiting,’ said Alice, whose thoughts were still running",
-    "on the song, ‘I’d have said to the porpoise, “Keep back, please: we",
-    "don’t want YOU with us!”’",
-    "‘They were obliged to have him with them,’ the Mock Turtle said: ‘no",
-    "wise fish would go anywhere without a porpoise.’",
-    "‘Wouldn’t it really?’ said Alice in a tone of great surprise.",
-    "‘Of course not,’ said the Mock Turtle: ‘why, if a fish came to ME, and",
-    "told me he was going a journey, I should say “With what porpoise?”’",
-    "‘Don’t you mean “purpose”?’ said Alice.",
-    "‘I mean what I say,’ the Mock Turtle replied in an offended tone. And",
-    "the Gryphon added ‘Come, let’s hear some of YOUR adventures.’",
-    "‘I could tell you my adventures--beginning from this morning,’ said",
-    "Alice a little timidly: ‘but it’s no use going back to yesterday,",
-    "because I was a different person then.’",
-    "‘Explain all that,’ said the Mock Turtle.",
-    "‘No, no! The adventures first,’ said the Gryphon in an impatient tone:",
-    "‘explanations take such a dreadful time.’",
-    "So Alice began telling them her adventures from the time when she first",
-    "saw the White Rabbit. She was a little nervous about it just at first,",
-    "the two creatures got so close to her, one on each side, and opened",
-    "their eyes and mouths so VERY wide, but she gained courage as she went",
-    "on. Her listeners were perfectly quiet till she got to the part about",
-    "her repeating ‘YOU ARE OLD, FATHER WILLIAM,’ to the Caterpillar, and the",
-    "words all coming different, and then the Mock Turtle drew a long breath,",
-    "and said ‘That’s very curious.’",
-    "‘It’s all about as curious as it can be,’ said the Gryphon.",
-    "‘It all came different!’ the Mock Turtle repeated thoughtfully. ‘I",
-    "should like to hear her try and repeat something now. Tell her to",
-    "begin.’ He looked at the Gryphon as if he thought it had some kind of",
-    "authority over Alice.",
-    "‘Stand up and repeat “‘TIS THE VOICE OF THE SLUGGARD,”’ said the",
-    "Gryphon.",
-    "‘How the creatures order one about, and make one repeat lessons!’",
-    "thought Alice; ‘I might as well be at school at once.’ However, she",
-    "got up, and began to repeat it, but her head was so full of the Lobster",
-    "Quadrille, that she hardly knew what she was saying, and the words came",
-    "very queer indeed:--",
-    "  ‘’Tis the voice of the Lobster; I heard him declare,",
-    "  “You have baked me too brown, I must sugar my hair.”",
-    "   As a duck with its eyelids, so he with his nose",
-    "  Trims his belt and his buttons, and turns out his toes.’",
-    "       [later editions continued as follows",
-    "  When the sands are all dry, he is gay as a lark,",
-    "  And will talk in contemptuous tones of the Shark,",
-    "  But, when the tide rises and sharks are around,",
-    "  His voice has a timid and tremulous sound.]",
-    "‘That’s different from what I used to say when I was a child,’ said the",
-    "Gryphon.",
-    "‘Well, I never heard it before,’ said the Mock Turtle; ‘but it sounds",
-    "uncommon nonsense.’",
-    "Alice said nothing; she had sat down with her face in her hands,",
-    "wondering if anything would EVER happen in a natural way again.",
-    "‘I should like to have it explained,’ said the Mock Turtle.",
-    "‘She can’t explain it,’ said the Gryphon hastily. ‘Go on with the next",
-    "verse.’",
-    "‘But about his toes?’ the Mock Turtle persisted. ‘How COULD he turn them",
-    "out with his nose, you know?’",
-    "‘It’s the first position in dancing.’ Alice said; but was dreadfully",
-    "puzzled by the whole thing, and longed to change the subject.",
-    "‘Go on with the next verse,’ the Gryphon repeated impatiently: ‘it",
-    "begins “I passed by his garden.”’",
-    "Alice did not dare to disobey, though she felt sure it would all come",
-    "wrong, and she went on in a trembling voice:--",
-    "  ‘I passed by his garden, and marked, with one eye,",
-    "  How the Owl and the Panther were sharing a pie--’",
-    "    [later editions continued as follows",
-    "  The Panther took pie-crust, and gravy, and meat,",
-    "  While the Owl had the dish as its share of the treat.",
-    "  When the pie was all finished, the Owl, as a boon,",
-    "  Was kindly permitted to pocket the spoon:",
-    "  While the Panther received knife and fork with a growl,",
-    "  And concluded the banquet--]",
-    "‘What IS the use of repeating all that stuff,’ the Mock Turtle",
-    "interrupted, ‘if you don’t explain it as you go on? It’s by far the most",
-    "confusing thing I ever heard!’",
-    "‘Yes, I think you’d better leave off,’ said the Gryphon: and Alice was",
-    "only too glad to do so.",
-    "‘Shall we try another figure of the Lobster Quadrille?’ the Gryphon went",
-    "on. ‘Or would you like the Mock Turtle to sing you a song?’",
-    "‘Oh, a song, please, if the Mock Turtle would be so kind,’ Alice",
-    "replied, so eagerly that the Gryphon said, in a rather offended tone,",
-    "‘Hm! No accounting for tastes! Sing her “Turtle Soup,” will you, old",
-    "fellow?’",
-    "The Mock Turtle sighed deeply, and began, in a voice sometimes choked",
-    "with sobs, to sing this:--",
-    "   ‘Beautiful Soup, so rich and green,",
-    "   Waiting in a hot tureen!",
-    "   Who for such dainties would not stoop?",
-    "   Soup of the evening, beautiful Soup!",
-    "   Soup of the evening, beautiful Soup!",
-    "     Beau--ootiful Soo--oop!",
-    "     Beau--ootiful Soo--oop!",
-    "   Soo--oop of the e--e--evening,",
-    "     Beautiful, beautiful Soup!",
-    "   ‘Beautiful Soup! Who cares for fish,",
-    "   Game, or any other dish?",
-    "   Who would not give all else for two",
-    "   Pennyworth only of beautiful Soup?",
-    "   Pennyworth only of beautiful Soup?",
-    "     Beau--ootiful Soo--oop!",
-    "     Beau--ootiful Soo--oop!",
-    "   Soo--oop of the e--e--evening,",
-    "     Beautiful, beauti--FUL SOUP!’",
-    "‘Chorus again!’ cried the Gryphon, and the Mock Turtle had just begun",
-    "to repeat it, when a cry of ‘The trial’s beginning!’ was heard in the",
-    "distance.",
-    "‘Come on!’ cried the Gryphon, and, taking Alice by the hand, it hurried",
-    "off, without waiting for the end of the song.",
-    "‘What trial is it?’ Alice panted as she ran; but the Gryphon only",
-    "answered ‘Come on!’ and ran the faster, while more and more faintly",
-    "came, carried on the breeze that followed them, the melancholy words:--",
-    "   ‘Soo--oop of the e--e--evening,",
-    "     Beautiful, beautiful Soup!’",
-    "CHAPTER XI. Who Stole the Tarts?",
-    "The King and Queen of Hearts were seated on their throne when they",
-    "arrived, with a great crowd assembled about them--all sorts of little",
-    "birds and beasts, as well as the whole pack of cards: the Knave was",
-    "standing before them, in chains, with a soldier on each side to guard",
-    "him; and near the King was the White Rabbit, with a trumpet in one hand,",
-    "and a scroll of parchment in the other. In the very middle of the court",
-    "was a table, with a large dish of tarts upon it: they looked so good,",
-    "that it made Alice quite hungry to look at them--‘I wish they’d get the",
-    "trial done,’ she thought, ‘and hand round the refreshments!’ But there",
-    "seemed to be no chance of this, so she began looking at everything about",
-    "her, to pass away the time.",
-    "Alice had never been in a court of justice before, but she had read",
-    "about them in books, and she was quite pleased to find that she knew",
-    "the name of nearly everything there. ‘That’s the judge,’ she said to",
-    "herself, ‘because of his great wig.’",
-    "The judge, by the way, was the King; and as he wore his crown over the",
-    "wig, (look at the frontispiece if you want to see how he did it,) he did",
-    "not look at all comfortable, and it was certainly not becoming.",
-    "‘And that’s the jury-box,’ thought Alice, ‘and those twelve creatures,’",
-    "(she was obliged to say ‘creatures,’ you see, because some of them were",
-    "animals, and some were birds,) ‘I suppose they are the jurors.’ She said",
-    "this last word two or three times over to herself, being rather proud of",
-    "it: for she thought, and rightly too, that very few little girls of her",
-    "age knew the meaning of it at all. However, ‘jury-men’ would have done",
-    "just as well.",
-    "The twelve jurors were all writing very busily on slates. ‘What are they",
-    "doing?’ Alice whispered to the Gryphon. ‘They can’t have anything to put",
-    "down yet, before the trial’s begun.’",
-    "‘They’re putting down their names,’ the Gryphon whispered in reply, ‘for",
-    "fear they should forget them before the end of the trial.’",
-    "‘Stupid things!’ Alice began in a loud, indignant voice, but she stopped",
-    "hastily, for the White Rabbit cried out, ‘Silence in the court!’ and the",
-    "King put on his spectacles and looked anxiously round, to make out who",
-    "was talking.",
-    "Alice could see, as well as if she were looking over their shoulders,",
-    "that all the jurors were writing down ‘stupid things!’ on their slates,",
-    "and she could even make out that one of them didn’t know how to spell",
-    "‘stupid,’ and that he had to ask his neighbour to tell him. ‘A nice",
-    "muddle their slates’ll be in before the trial’s over!’ thought Alice.",
-    "One of the jurors had a pencil that squeaked. This of course, Alice",
-    "could not stand, and she went round the court and got behind him, and",
-    "very soon found an opportunity of taking it away. She did it so quickly",
-    "that the poor little juror (it was Bill, the Lizard) could not make out",
-    "at all what had become of it; so, after hunting all about for it, he was",
-    "obliged to write with one finger for the rest of the day; and this was",
-    "of very little use, as it left no mark on the slate.",
-    "‘Herald, read the accusation!’ said the King.",
-    "On this the White Rabbit blew three blasts on the trumpet, and then",
-    "unrolled the parchment scroll, and read as follows:--",
-    "   ‘The Queen of Hearts, she made some tarts,",
-    "      All on a summer day:",
-    "    The Knave of Hearts, he stole those tarts,",
-    "      And took them quite away!’",
-    "‘Consider your verdict,’ the King said to the jury.",
-    "‘Not yet, not yet!’ the Rabbit hastily interrupted. ‘There’s a great",
-    "deal to come before that!’",
-    "‘Call the first witness,’ said the King; and the White Rabbit blew three",
-    "blasts on the trumpet, and called out, ‘First witness!’",
-    "The first witness was the Hatter. He came in with a teacup in one",
-    "hand and a piece of bread-and-butter in the other. ‘I beg pardon, your",
-    "Majesty,’ he began, ‘for bringing these in: but I hadn’t quite finished",
-    "my tea when I was sent for.’",
-    "‘You ought to have finished,’ said the King. ‘When did you begin?’",
-    "The Hatter looked at the March Hare, who had followed him into the",
-    "court, arm-in-arm with the Dormouse. ‘Fourteenth of March, I think it",
-    "was,’ he said.",
-    "‘Fifteenth,’ said the March Hare.",
-    "‘Sixteenth,’ added the Dormouse.",
-    "‘Write that down,’ the King said to the jury, and the jury eagerly",
-    "wrote down all three dates on their slates, and then added them up, and",
-    "reduced the answer to shillings and pence.",
-    "‘Take off your hat,’ the King said to the Hatter.",
-    "‘It isn’t mine,’ said the Hatter.",
-    "‘Stolen!’ the King exclaimed, turning to the jury, who instantly made a",
-    "memorandum of the fact.",
-    "‘I keep them to sell,’ the Hatter added as an explanation; ‘I’ve none of",
-    "my own. I’m a hatter.’",
-    "Here the Queen put on her spectacles, and began staring at the Hatter,",
-    "who turned pale and fidgeted.",
-    "‘Give your evidence,’ said the King; ‘and don’t be nervous, or I’ll have",
-    "you executed on the spot.’",
-    "This did not seem to encourage the witness at all: he kept shifting",
-    "from one foot to the other, looking uneasily at the Queen, and in",
-    "his confusion he bit a large piece out of his teacup instead of the",
-    "bread-and-butter.",
-    "Just at this moment Alice felt a very curious sensation, which puzzled",
-    "her a good deal until she made out what it was: she was beginning to",
-    "grow larger again, and she thought at first she would get up and leave",
-    "the court; but on second thoughts she decided to remain where she was as",
-    "long as there was room for her.",
-    "‘I wish you wouldn’t squeeze so.’ said the Dormouse, who was sitting",
-    "next to her. ‘I can hardly breathe.’",
-    "‘I can’t help it,’ said Alice very meekly: ‘I’m growing.’",
-    "‘You’ve no right to grow here,’ said the Dormouse.",
-    "‘Don’t talk nonsense,’ said Alice more boldly: ‘you know you’re growing",
-    "too.’",
-    "‘Yes, but I grow at a reasonable pace,’ said the Dormouse: ‘not in that",
-    "ridiculous fashion.’ And he got up very sulkily and crossed over to the",
-    "other side of the court.",
-    "All this time the Queen had never left off staring at the Hatter, and,",
-    "just as the Dormouse crossed the court, she said to one of the officers",
-    "of the court, ‘Bring me the list of the singers in the last concert!’ on",
-    "which the wretched Hatter trembled so, that he shook both his shoes off.",
-    "‘Give your evidence,’ the King repeated angrily, ‘or I’ll have you",
-    "executed, whether you’re nervous or not.’",
-    "‘I’m a poor man, your Majesty,’ the Hatter began, in a trembling voice,",
-    "‘--and I hadn’t begun my tea--not above a week or so--and what with the",
-    "bread-and-butter getting so thin--and the twinkling of the tea--’",
-    "‘The twinkling of the what?’ said the King.",
-    "‘It began with the tea,’ the Hatter replied.",
-    "‘Of course twinkling begins with a T!’ said the King sharply. ‘Do you",
-    "take me for a dunce? Go on!’",
-    "‘I’m a poor man,’ the Hatter went on, ‘and most things twinkled after",
-    "that--only the March Hare said--’",
-    "‘I didn’t!’ the March Hare interrupted in a great hurry.",
-    "‘You did!’ said the Hatter.",
-    "‘I deny it!’ said the March Hare.",
-    "‘He denies it,’ said the King: ‘leave out that part.’",
-    "‘Well, at any rate, the Dormouse said--’ the Hatter went on, looking",
-    "anxiously round to see if he would deny it too: but the Dormouse denied",
-    "nothing, being fast asleep.",
-    "‘After that,’ continued the Hatter, ‘I cut some more bread-and-butter--’",
-    "‘But what did the Dormouse say?’ one of the jury asked.",
-    "‘That I can’t remember,’ said the Hatter.",
-    "‘You MUST remember,’ remarked the King, ‘or I’ll have you executed.’",
-    "The miserable Hatter dropped his teacup and bread-and-butter, and went",
-    "down on one knee. ‘I’m a poor man, your Majesty,’ he began.",
-    "‘You’re a very poor speaker,’ said the King.",
-    "Here one of the guinea-pigs cheered, and was immediately suppressed by",
-    "the officers of the court. (As that is rather a hard word, I will just",
-    "explain to you how it was done. They had a large canvas bag, which tied",
-    "up at the mouth with strings: into this they slipped the guinea-pig,",
-    "head first, and then sat upon it.)",
-    "‘I’m glad I’ve seen that done,’ thought Alice. ‘I’ve so often read",
-    "in the newspapers, at the end of trials, “There was some attempts",
-    "at applause, which was immediately suppressed by the officers of the",
-    "court,” and I never understood what it meant till now.’",
-    "‘If that’s all you know about it, you may stand down,’ continued the",
-    "King.",
-    "‘I can’t go no lower,’ said the Hatter: ‘I’m on the floor, as it is.’",
-    "‘Then you may SIT down,’ the King replied.",
-    "Here the other guinea-pig cheered, and was suppressed.",
-    "‘Come, that finished the guinea-pigs!’ thought Alice. ‘Now we shall get",
-    "on better.’",
-    "‘I’d rather finish my tea,’ said the Hatter, with an anxious look at the",
-    "Queen, who was reading the list of singers.",
-    "‘You may go,’ said the King, and the Hatter hurriedly left the court,",
-    "without even waiting to put his shoes on.",
-    "‘--and just take his head off outside,’ the Queen added to one of the",
-    "officers: but the Hatter was out of sight before the officer could get",
-    "to the door.",
-    "‘Call the next witness!’ said the King.",
-    "The next witness was the Duchess’s cook. She carried the pepper-box in",
-    "her hand, and Alice guessed who it was, even before she got into the",
-    "court, by the way the people near the door began sneezing all at once.",
-    "‘Give your evidence,’ said the King.",
-    "‘Shan’t,’ said the cook.",
-    "The King looked anxiously at the White Rabbit, who said in a low voice,",
-    "‘Your Majesty must cross-examine THIS witness.’",
-    "‘Well, if I must, I must,’ the King said, with a melancholy air, and,",
-    "after folding his arms and frowning at the cook till his eyes were",
-    "nearly out of sight, he said in a deep voice, ‘What are tarts made of?’",
-    "‘Pepper, mostly,’ said the cook.",
-    "‘Treacle,’ said a sleepy voice behind her.",
-    "‘Collar that Dormouse,’ the Queen shrieked out. ‘Behead that Dormouse!",
-    "Turn that Dormouse out of court! Suppress him! Pinch him! Off with his",
-    "whiskers!’",
-    "For some minutes the whole court was in confusion, getting the Dormouse",
-    "turned out, and, by the time they had settled down again, the cook had",
-    "disappeared.",
-    "‘Never mind!’ said the King, with an air of great relief. ‘Call the next",
-    "witness.’ And he added in an undertone to the Queen, ‘Really, my dear,",
-    "YOU must cross-examine the next witness. It quite makes my forehead",
-    "ache!’",
-    "Alice watched the White Rabbit as he fumbled over the list, feeling very",
-    "curious to see what the next witness would be like, ‘--for they haven’t",
-    "got much evidence YET,’ she said to herself. Imagine her surprise, when",
-    "the White Rabbit read out, at the top of his shrill little voice, the",
-    "name ‘Alice!’",
-    "CHAPTER XII. Alice’s Evidence",
-    "‘Here!’ cried Alice, quite forgetting in the flurry of the moment how",
-    "large she had grown in the last few minutes, and she jumped up in such",
-    "a hurry that she tipped over the jury-box with the edge of her skirt,",
-    "upsetting all the jurymen on to the heads of the crowd below, and there",
-    "they lay sprawling about, reminding her very much of a globe of goldfish",
-    "she had accidentally upset the week before.",
-    "‘Oh, I BEG your pardon!’ she exclaimed in a tone of great dismay, and",
-    "began picking them up again as quickly as she could, for the accident of",
-    "the goldfish kept running in her head, and she had a vague sort of idea",
-    "that they must be collected at once and put back into the jury-box, or",
-    "they would die.",
-    "‘The trial cannot proceed,’ said the King in a very grave voice, ‘until",
-    "all the jurymen are back in their proper places--ALL,’ he repeated with",
-    "great emphasis, looking hard at Alice as he said do.",
-    "Alice looked at the jury-box, and saw that, in her haste, she had put",
-    "the Lizard in head downwards, and the poor little thing was waving its",
-    "tail about in a melancholy way, being quite unable to move. She soon got",
-    "it out again, and put it right; ‘not that it signifies much,’ she said",
-    "to herself; ‘I should think it would be QUITE as much use in the trial",
-    "one way up as the other.’",
-    "As soon as the jury had a little recovered from the shock of being",
-    "upset, and their slates and pencils had been found and handed back to",
-    "them, they set to work very diligently to write out a history of the",
-    "accident, all except the Lizard, who seemed too much overcome to do",
-    "anything but sit with its mouth open, gazing up into the roof of the",
-    "court.",
-    "‘What do you know about this business?’ the King said to Alice.",
-    "‘Nothing,’ said Alice.",
-    "‘Nothing WHATEVER?’ persisted the King.",
-    "‘Nothing whatever,’ said Alice.",
-    "‘That’s very important,’ the King said, turning to the jury. They were",
-    "just beginning to write this down on their slates, when the White Rabbit",
-    "interrupted: ‘UNimportant, your Majesty means, of course,’ he said in a",
-    "very respectful tone, but frowning and making faces at him as he spoke.",
-    "‘UNimportant, of course, I meant,’ the King hastily said, and went on",
-    "to himself in an undertone,",
-    "‘important--unimportant--unimportant--important--’ as if he were trying",
-    "which word sounded best.",
-    "Some of the jury wrote it down ‘important,’ and some ‘unimportant.’",
-    "Alice could see this, as she was near enough to look over their slates;",
-    "‘but it doesn’t matter a bit,’ she thought to herself.",
-    "At this moment the King, who had been for some time busily writing in",
-    "his note-book, cackled out ‘Silence!’ and read out from his book, ‘Rule",
-    "Forty-two. ALL PERSONS MORE THAN A MILE HIGH TO LEAVE THE COURT.’",
-    "Everybody looked at Alice.",
-    "‘I’M not a mile high,’ said Alice.",
-    "‘You are,’ said the King.",
-    "‘Nearly two miles high,’ added the Queen.",
-    "‘Well, I shan’t go, at any rate,’ said Alice: ‘besides, that’s not a",
-    "regular rule: you invented it just now.’",
-    "‘It’s the oldest rule in the book,’ said the King.",
-    "‘Then it ought to be Number One,’ said Alice.",
-    "The King turned pale, and shut his note-book hastily. ‘Consider your",
-    "verdict,’ he said to the jury, in a low, trembling voice.",
-    "‘There’s more evidence to come yet, please your Majesty,’ said the White",
-    "Rabbit, jumping up in a great hurry; ‘this paper has just been picked",
-    "up.’",
-    "‘What’s in it?’ said the Queen.",
-    "‘I haven’t opened it yet,’ said the White Rabbit, ‘but it seems to be a",
-    "letter, written by the prisoner to--to somebody.’",
-    "‘It must have been that,’ said the King, ‘unless it was written to",
-    "nobody, which isn’t usual, you know.’",
-    "‘Who is it directed to?’ said one of the jurymen.",
-    "‘It isn’t directed at all,’ said the White Rabbit; ‘in fact, there’s",
-    "nothing written on the OUTSIDE.’ He unfolded the paper as he spoke, and",
-    "added ‘It isn’t a letter, after all: it’s a set of verses.’",
-    "‘Are they in the prisoner’s handwriting?’ asked another of the jurymen.",
-    "‘No, they’re not,’ said the White Rabbit, ‘and that’s the queerest thing",
-    "about it.’ (The jury all looked puzzled.)",
-    "‘He must have imitated somebody else’s hand,’ said the King. (The jury",
-    "all brightened up again.)",
-    "‘Please your Majesty,’ said the Knave, ‘I didn’t write it, and they",
-    "can’t prove I did: there’s no name signed at the end.’",
-    "‘If you didn’t sign it,’ said the King, ‘that only makes the matter",
-    "worse. You MUST have meant some mischief, or else you’d have signed your",
-    "name like an honest man.’",
-    "There was a general clapping of hands at this: it was the first really",
-    "clever thing the King had said that day.",
-    "‘That PROVES his guilt,’ said the Queen.",
-    "‘It proves nothing of the sort!’ said Alice. ‘Why, you don’t even know",
-    "what they’re about!’",
-    "‘Read them,’ said the King.",
-    "The White Rabbit put on his spectacles. ‘Where shall I begin, please",
-    "your Majesty?’ he asked.",
-    "‘Begin at the beginning,’ the King said gravely, ‘and go on till you",
-    "come to the end: then stop.’",
-    "These were the verses the White Rabbit read:--",
-    "   ‘They told me you had been to her,",
-    "    And mentioned me to him:",
-    "   She gave me a good character,",
-    "    But said I could not swim.",
-    "   He sent them word I had not gone",
-    "    (We know it to be true):",
-    "   If she should push the matter on,",
-    "    What would become of you?",
-    "   I gave her one, they gave him two,",
-    "    You gave us three or more;",
-    "   They all returned from him to you,",
-    "    Though they were mine before.",
-    "   If I or she should chance to be",
-    "    Involved in this affair,",
-    "   He trusts to you to set them free,",
-    "    Exactly as we were.",
-    "   My notion was that you had been",
-    "    (Before she had this fit)",
-    "   An obstacle that came between",
-    "    Him, and ourselves, and it.",
-    "   Don’t let him know she liked them best,",
-    "    For this must ever be",
-    "   A secret, kept from all the rest,",
-    "    Between yourself and me.’",
-    "‘That’s the most important piece of evidence we’ve heard yet,’ said the",
-    "King, rubbing his hands; ‘so now let the jury--’",
-    "‘If any one of them can explain it,’ said Alice, (she had grown so large",
-    "in the last few minutes that she wasn’t a bit afraid of interrupting",
-    "him,) ‘I’ll give him sixpence. _I_ don’t believe there’s an atom of",
-    "meaning in it.’",
-    "The jury all wrote down on their slates, ‘SHE doesn’t believe there’s an",
-    "atom of meaning in it,’ but none of them attempted to explain the paper.",
-    "‘If there’s no meaning in it,’ said the King, ‘that saves a world of",
-    "trouble, you know, as we needn’t try to find any. And yet I don’t know,’",
-    "he went on, spreading out the verses on his knee, and looking at them",
-    "with one eye; ‘I seem to see some meaning in them, after all. “--SAID",
-    "I COULD NOT SWIM--” you can’t swim, can you?’ he added, turning to the",
-    "Knave.",
-    "The Knave shook his head sadly. ‘Do I look like it?’ he said. (Which he",
-    "certainly did NOT, being made entirely of cardboard.)",
-    "‘All right, so far,’ said the King, and he went on muttering over",
-    "the verses to himself: ‘“WE KNOW IT TO BE TRUE--” that’s the jury, of",
-    "course--“I GAVE HER ONE, THEY GAVE HIM TWO--” why, that must be what he",
-    "did with the tarts, you know--’",
-    "‘But, it goes on “THEY ALL RETURNED FROM HIM TO YOU,”’ said Alice.",
-    "‘Why, there they are!’ said the King triumphantly, pointing to the tarts",
-    "on the table. ‘Nothing can be clearer than THAT. Then again--“BEFORE SHE",
-    "HAD THIS FIT--” you never had fits, my dear, I think?’ he said to the",
-    "Queen.",
-    "‘Never!’ said the Queen furiously, throwing an inkstand at the Lizard",
-    "as she spoke. (The unfortunate little Bill had left off writing on his",
-    "slate with one finger, as he found it made no mark; but he now hastily",
-    "began again, using the ink, that was trickling down his face, as long as",
-    "it lasted.)",
-    "‘Then the words don’t FIT you,’ said the King, looking round the court",
-    "with a smile. There was a dead silence.",
-    "‘It’s a pun!’ the King added in an offended tone, and everybody laughed,",
-    "‘Let the jury consider their verdict,’ the King said, for about the",
-    "twentieth time that day.",
-    "‘No, no!’ said the Queen. ‘Sentence first--verdict afterwards.’",
-    "‘Stuff and nonsense!’ said Alice loudly. ‘The idea of having the",
-    "sentence first!’",
-    "‘Hold your tongue!’ said the Queen, turning purple.",
-    "‘I won’t!’ said Alice.",
-    "‘Off with her head!’ the Queen shouted at the top of her voice. Nobody",
-    "moved.",
-    "‘Who cares for you?’ said Alice, (she had grown to her full size by this",
-    "time.) ‘You’re nothing but a pack of cards!’",
-    "At this the whole pack rose up into the air, and came flying down upon",
-    "her: she gave a little scream, half of fright and half of anger, and",
-    "tried to beat them off, and found herself lying on the bank, with her",
-    "head in the lap of her sister, who was gently brushing away some dead",
-    "leaves that had fluttered down from the trees upon her face.",
-    "‘Wake up, Alice dear!’ said her sister; ‘Why, what a long sleep you’ve",
-    "had!’",
-    "‘Oh, I’ve had such a curious dream!’ said Alice, and she told her",
-    "sister, as well as she could remember them, all these strange Adventures",
-    "of hers that you have just been reading about; and when she had",
-    "finished, her sister kissed her, and said, ‘It WAS a curious dream,",
-    "dear, certainly: but now run in to your tea; it’s getting late.’ So",
-    "Alice got up and ran off, thinking while she ran, as well she might,",
-    "what a wonderful dream it had been.",
-    "But her sister sat still just as she left her, leaning her head on her",
-    "hand, watching the setting sun, and thinking of little Alice and all her",
-    "wonderful Adventures, till she too began dreaming after a fashion, and",
-    "this was her dream:--",
-    "First, she dreamed of little Alice herself, and once again the tiny",
-    "hands were clasped upon her knee, and the bright eager eyes were looking",
-    "up into hers--she could hear the very tones of her voice, and see that",
-    "queer little toss of her head to keep back the wandering hair that",
-    "WOULD always get into her eyes--and still as she listened, or seemed to",
-    "listen, the whole place around her became alive with the strange creatures",
-    "of her little sister’s dream.",
-    "The long grass rustled at her feet as the White Rabbit hurried by--the",
-    "frightened Mouse splashed his way through the neighbouring pool--she",
-    "could hear the rattle of the teacups as the March Hare and his friends",
-    "shared their never-ending meal, and the shrill voice of the Queen",
-    "ordering off her unfortunate guests to execution--once more the pig-baby",
-    "was sneezing on the Duchess’s knee, while plates and dishes crashed",
-    "around it--once more the shriek of the Gryphon, the squeaking of the",
-    "Lizard’s slate-pencil, and the choking of the suppressed guinea-pigs,",
-    "filled the air, mixed up with the distant sobs of the miserable Mock",
-    "Turtle.",
-    "So she sat on, with closed eyes, and half believed herself in",
-    "Wonderland, though she knew she had but to open them again, and all",
-    "would change to dull reality--the grass would be only rustling in the",
-    "wind, and the pool rippling to the waving of the reeds--the rattling",
-    "teacups would change to tinkling sheep-bells, and the Queen’s shrill",
-    "cries to the voice of the shepherd boy--and the sneeze of the baby, the",
-    "shriek of the Gryphon, and all the other queer noises, would change (she",
-    "knew) to the confused clamour of the busy farm-yard--while the lowing",
-    "of the cattle in the distance would take the place of the Mock Turtle’s",
-    "heavy sobs.",
-    "Lastly, she pictured to herself how this same little sister of hers",
-    "would, in the after-time, be herself a grown woman; and how she would",
-    "keep, through all her riper years, the simple and loving heart of her",
-    "childhood: and how she would gather about her other little children, and",
-    "make THEIR eyes bright and eager with many a strange tale, perhaps even",
-    "with the dream of Wonderland of long ago: and how she would feel with",
-    "all their simple sorrows, and find a pleasure in all their simple joys,",
-    "remembering her own child-life, and the happy summer days.",
-    "              THE END",
-    "End of Project Gutenberg’s Alice’s Adventures in Wonderland, by Lewis Carroll",
-    "*** END OF THIS PROJECT GUTENBERG EBOOK ALICE’S ADVENTURES IN WONDERLAND ***",
-    "***** This file should be named 11-0.txt or 11-0.zip *****",
-    "This and all associated files of various formats will be found in:",
-    "        http://www.gutenberg.org/1/11/",
-    "Updated editions will replace the previous one--the old editions",
-    "will be renamed.",
-    "Creating the works from public domain print editions means that no",
-    "one owns a United States copyright in these works, so the Foundation",
-    "(and you!) can copy and distribute it in the United States without",
-    "permission and without paying copyright royalties.  Special rules,",
-    "set forth in the General Terms of Use part of this license, apply to",
-    "copying and distributing Project Gutenberg-tm electronic works to",
-    "protect the PROJECT GUTENBERG-tm concept and trademark.  Project",
-    "Gutenberg is a registered trademark, and may not be used if you",
-    "charge for the eBooks, unless you receive specific permission.  If you",
-    "do not charge anything for copies of this eBook, complying with the",
-    "rules is very easy.  You may use this eBook for nearly any purpose",
-    "such as creation of derivative works, reports, performances and",
-    "research.  They may be modified and printed and given away--you may do",
-    "practically ANYTHING with public domain eBooks.  Redistribution is",
-    "subject to the trademark license, especially commercial",
-    "redistribution.",
-    "*** START: FULL LICENSE ***",
-    "THE FULL PROJECT GUTENBERG LICENSE",
-    "PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK",
-    "To protect the Project Gutenberg-tm mission of promoting the free",
-    "distribution of electronic works, by using or distributing this work",
-    "(or any other work associated in any way with the phrase “Project",
-    "Gutenberg”), you agree to comply with all the terms of the Full Project",
-    "Gutenberg-tm License (available with this file or online at",
-    "http://gutenberg.org/license).",
-    "Section 1.  General Terms of Use and Redistributing Project Gutenberg-tm",
-    "electronic works",
-    "1.A.  By reading or using any part of this Project Gutenberg-tm",
-    "electronic work, you indicate that you have read, understand, agree to",
-    "and accept all the terms of this license and intellectual property",
-    "(trademark/copyright) agreement.  If you do not agree to abide by all",
-    "the terms of this agreement, you must cease using and return or destroy",
-    "all copies of Project Gutenberg-tm electronic works in your possession.",
-    "If you paid a fee for obtaining a copy of or access to a Project",
-    "Gutenberg-tm electronic work and you do not agree to be bound by the",
-    "terms of this agreement, you may obtain a refund from the person or",
-    "entity to whom you paid the fee as set forth in paragraph 1.E.8.",
-    "1.B.  “Project Gutenberg” is a registered trademark.  It may only be",
-    "used on or associated in any way with an electronic work by people who",
-    "agree to be bound by the terms of this agreement.  There are a few",
-    "things that you can do with most Project Gutenberg-tm electronic works",
-    "even without complying with the full terms of this agreement.  See",
-    "paragraph 1.C below.  There are a lot of things you can do with Project",
-    "Gutenberg-tm electronic works if you follow the terms of this agreement",
-    "and help preserve free future access to Project Gutenberg-tm electronic",
-    "works.  See paragraph 1.E below.",
-    "1.C.  The Project Gutenberg Literary Archive Foundation (“the Foundation”",
-    " or PGLAF), owns a compilation copyright in the collection of Project",
-    "Gutenberg-tm electronic works.  Nearly all the individual works in the",
-    "collection are in the public domain in the United States.  If an",
-    "individual work is in the public domain in the United States and you are",
-    "located in the United States, we do not claim a right to prevent you from",
-    "copying, distributing, performing, displaying or creating derivative",
-    "works based on the work as long as all references to Project Gutenberg",
-    "are removed.  Of course, we hope that you will support the Project",
-    "Gutenberg-tm mission of promoting free access to electronic works by",
-    "freely sharing Project Gutenberg-tm works in compliance with the terms of",
-    "this agreement for keeping the Project Gutenberg-tm name associated with",
-    "the work.  You can easily comply with the terms of this agreement by",
-    "keeping this work in the same format with its attached full Project",
-    "Gutenberg-tm License when you share it without charge with others.",
-    "1.D.  The copyright laws of the place where you are located also govern",
-    "what you can do with this work.  Copyright laws in most countries are in",
-    "a constant state of change.  If you are outside the United States, check",
-    "the laws of your country in addition to the terms of this agreement",
-    "before downloading, copying, displaying, performing, distributing or",
-    "creating derivative works based on this work or any other Project",
-    "Gutenberg-tm work.  The Foundation makes no representations concerning",
-    "the copyright status of any work in any country outside the United",
-    "States.",
-    "1.E.  Unless you have removed all references to Project Gutenberg:",
-    "1.E.1.  The following sentence, with active links to, or other immediate",
-    "access to, the full Project Gutenberg-tm License must appear prominently",
-    "whenever any copy of a Project Gutenberg-tm work (any work on which the",
-    "phrase “Project Gutenberg” appears, or with which the phrase “Project",
-    "Gutenberg” is associated) is accessed, displayed, performed, viewed,",
-    "copied or distributed:",
-    "This eBook is for the use of anyone anywhere at no cost and with",
-    "almost no restrictions whatsoever.  You may copy it, give it away or",
-    "re-use it under the terms of the Project Gutenberg License included",
-    "with this eBook or online at www.gutenberg.org",
-    "1.E.2.  If an individual Project Gutenberg-tm electronic work is derived",
-    "from the public domain (does not contain a notice indicating that it is",
-    "posted with permission of the copyright holder), the work can be copied",
-    "and distributed to anyone in the United States without paying any fees",
-    "or charges.  If you are redistributing or providing access to a work",
-    "with the phrase “Project Gutenberg” associated with or appearing on the",
-    "work, you must comply either with the requirements of paragraphs 1.E.1",
-    "through 1.E.7 or obtain permission for the use of the work and the",
-    "Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or",
-    "1.E.9.",
-    "1.E.3.  If an individual Project Gutenberg-tm electronic work is posted",
-    "with the permission of the copyright holder, your use and distribution",
-    "must comply with both paragraphs 1.E.1 through 1.E.7 and any additional",
-    "terms imposed by the copyright holder.  Additional terms will be linked",
-    "to the Project Gutenberg-tm License for all works posted with the",
-    "permission of the copyright holder found at the beginning of this work.",
-    "1.E.4.  Do not unlink or detach or remove the full Project Gutenberg-tm",
-    "License terms from this work, or any files containing a part of this",
-    "work or any other work associated with Project Gutenberg-tm.",
-    "1.E.5.  Do not copy, display, perform, distribute or redistribute this",
-    "electronic work, or any part of this electronic work, without",
-    "prominently displaying the sentence set forth in paragraph 1.E.1 with",
-    "active links or immediate access to the full terms of the Project",
-    "Gutenberg-tm License.",
-    "1.E.6.  You may convert to and distribute this work in any binary,",
-    "compressed, marked up, nonproprietary or proprietary form, including any",
-    "word processing or hypertext form.  However, if you provide access to or",
-    "distribute copies of a Project Gutenberg-tm work in a format other than",
-    "“Plain Vanilla ASCII” or other format used in the official version",
-    "posted on the official Project Gutenberg-tm web site (www.gutenberg.org),",
-    "you must, at no additional cost, fee or expense to the user, provide a",
-    "copy, a means of exporting a copy, or a means of obtaining a copy upon",
-    "request, of the work in its original “Plain Vanilla ASCII” or other",
-    "form.  Any alternate format must include the full Project Gutenberg-tm",
-    "License as specified in paragraph 1.E.1.",
-    "1.E.7.  Do not charge a fee for access to, viewing, displaying,",
-    "performing, copying or distributing any Project Gutenberg-tm works",
-    "unless you comply with paragraph 1.E.8 or 1.E.9.",
-    "1.E.8.  You may charge a reasonable fee for copies of or providing",
-    "access to or distributing Project Gutenberg-tm electronic works provided",
-    "that",
-    "- You pay a royalty fee of 20% of the gross profits you derive from",
-    "     the use of Project Gutenberg-tm works calculated using the method",
-    "     you already use to calculate your applicable taxes.  The fee is",
-    "     owed to the owner of the Project Gutenberg-tm trademark, but he",
-    "     has agreed to donate royalties under this paragraph to the",
-    "     Project Gutenberg Literary Archive Foundation.  Royalty payments",
-    "     must be paid within 60 days following each date on which you",
-    "     prepare (or are legally required to prepare) your periodic tax",
-    "     returns.  Royalty payments should be clearly marked as such and",
-    "     sent to the Project Gutenberg Literary Archive Foundation at the",
-    "     address specified in Section 4, “Information about donations to",
-    "     the Project Gutenberg Literary Archive Foundation.”",
-    "- You provide a full refund of any money paid by a user who notifies",
-    "     you in writing (or by e-mail) within 30 days of receipt that s/he",
-    "     does not agree to the terms of the full Project Gutenberg-tm",
-    "     License.  You must require such a user to return or",
-    "     destroy all copies of the works possessed in a physical medium",
-    "     and discontinue all use of and all access to other copies of",
-    "     Project Gutenberg-tm works.",
-    "- You provide, in accordance with paragraph 1.F.3, a full refund of any",
-    "     money paid for a work or a replacement copy, if a defect in the",
-    "     electronic work is discovered and reported to you within 90 days",
-    "     of receipt of the work.",
-    "- You comply with all other terms of this agreement for free",
-    "     distribution of Project Gutenberg-tm works.",
-    "1.E.9.  If you wish to charge a fee or distribute a Project Gutenberg-tm",
-    "electronic work or group of works on different terms than are set",
-    "forth in this agreement, you must obtain permission in writing from",
-    "both the Project Gutenberg Literary Archive Foundation and Michael",
-    "Hart, the owner of the Project Gutenberg-tm trademark.  Contact the",
-    "Foundation as set forth in Section 3 below.",
-    "1.F.",
-    "1.F.1.  Project Gutenberg volunteers and employees expend considerable",
-    "effort to identify, do copyright research on, transcribe and proofread",
-    "public domain works in creating the Project Gutenberg-tm",
-    "collection.  Despite these efforts, Project Gutenberg-tm electronic",
-    "works, and the medium on which they may be stored, may contain",
-    "“Defects,” such as, but not limited to, incomplete, inaccurate or",
-    "corrupt data, transcription errors, a copyright or other intellectual",
-    "property infringement, a defective or damaged disk or other medium, a",
-    "computer virus, or computer codes that damage or cannot be read by",
-    "your equipment.",
-    "1.F.2.  LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the “Right",
-    "of Replacement or Refund” described in paragraph 1.F.3, the Project",
-    "Gutenberg Literary Archive Foundation, the owner of the Project",
-    "Gutenberg-tm trademark, and any other party distributing a Project",
-    "Gutenberg-tm electronic work under this agreement, disclaim all",
-    "liability to you for damages, costs and expenses, including legal",
-    "fees.  YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT",
-    "LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE",
-    "PROVIDED IN PARAGRAPH F3.  YOU AGREE THAT THE FOUNDATION, THE",
-    "TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE",
-    "LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR",
-    "INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH",
-    "DAMAGE.",
-    "1.F.3.  LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a",
-    "defect in this electronic work within 90 days of receiving it, you can",
-    "receive a refund of the money (if any) you paid for it by sending a",
-    "written explanation to the person you received the work from.  If you",
-    "received the work on a physical medium, you must return the medium with",
-    "your written explanation.  The person or entity that provided you with",
-    "the defective work may elect to provide a replacement copy in lieu of a",
-    "refund.  If you received the work electronically, the person or entity",
-    "providing it to you may choose to give you a second opportunity to",
-    "receive the work electronically in lieu of a refund.  If the second copy",
-    "is also defective, you may demand a refund in writing without further",
-    "opportunities to fix the problem.",
-    "1.F.4.  Except for the limited right of replacement or refund set forth",
-    "in paragraph 1.F.3, this work is provided to you ‘AS-IS’ WITH NO OTHER",
-    "WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO",
-    "WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE.",
-    "1.F.5.  Some states do not allow disclaimers of certain implied",
-    "warranties or the exclusion or limitation of certain types of damages.",
-    "If any disclaimer or limitation set forth in this agreement violates the",
-    "law of the state applicable to this agreement, the agreement shall be",
-    "interpreted to make the maximum disclaimer or limitation permitted by",
-    "the applicable state law.  The invalidity or unenforceability of any",
-    "provision of this agreement shall not void the remaining provisions.",
-    "1.F.6.  INDEMNITY - You agree to indemnify and hold the Foundation, the",
-    "trademark owner, any agent or employee of the Foundation, anyone",
-    "providing copies of Project Gutenberg-tm electronic works in accordance",
-    "with this agreement, and any volunteers associated with the production,",
-    "promotion and distribution of Project Gutenberg-tm electronic works,",
-    "harmless from all liability, costs and expenses, including legal fees,",
-    "that arise directly or indirectly from any of the following which you do",
-    "or cause to occur: (a) distribution of this or any Project Gutenberg-tm",
-    "work, (b) alteration, modification, or additions or deletions to any",
-    "Project Gutenberg-tm work, and (c) any Defect you cause.",
-    "Section  2.  Information about the Mission of Project Gutenberg-tm",
-    "Project Gutenberg-tm is synonymous with the free distribution of",
-    "electronic works in formats readable by the widest variety of computers",
-    "including obsolete, old, middle-aged and new computers.  It exists",
-    "because of the efforts of hundreds of volunteers and donations from",
-    "people in all walks of life.",
-    "Volunteers and financial support to provide volunteers with the",
-    "assistance they need, is critical to reaching Project Gutenberg-tm’s",
-    "goals and ensuring that the Project Gutenberg-tm collection will",
-    "remain freely available for generations to come.  In 2001, the Project",
-    "Gutenberg Literary Archive Foundation was created to provide a secure",
-    "and permanent future for Project Gutenberg-tm and future generations.",
-    "To learn more about the Project Gutenberg Literary Archive Foundation",
-    "and how your efforts and donations can help, see Sections 3 and 4",
-    "and the Foundation web page at http://www.pglaf.org.",
-    "Section 3.  Information about the Project Gutenberg Literary Archive",
-    "Foundation",
-    "The Project Gutenberg Literary Archive Foundation is a non profit",
-    "501(c)(3) educational corporation organized under the laws of the",
-    "state of Mississippi and granted tax exempt status by the Internal",
-    "Revenue Service.  The Foundation’s EIN or federal tax identification",
-    "number is 64-6221541.  Its 501(c)(3) letter is posted at",
-    "http://pglaf.org/fundraising.  Contributions to the Project Gutenberg",
-    "Literary Archive Foundation are tax deductible to the full extent",
-    "permitted by U.S. federal laws and your state’s laws.",
-    "The Foundation’s principal office is located at 4557 Melan Dr. S.",
-    "Fairbanks, AK, 99712., but its volunteers and employees are scattered",
-    "throughout numerous locations.  Its business office is located at",
-    "809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email",
-    "business at pglaf.org.  Email contact links and up to date contact",
-    "information can be found at the Foundation’s web site and official",
-    "page at http://pglaf.org",
-    "For additional contact information:",
-    "     Dr. Gregory B. Newby",
-    "     Chief Executive and Director",
-    "     gbnewby at pglaf.org",
-    "Section 4.  Information about Donations to the Project Gutenberg",
-    "Literary Archive Foundation",
-    "Project Gutenberg-tm depends upon and cannot survive without wide",
-    "spread public support and donations to carry out its mission of",
-    "increasing the number of public domain and licensed works that can be",
-    "freely distributed in machine readable form accessible by the widest",
-    "array of equipment including outdated equipment.  Many small donations",
-    "($1 to $5,000) are particularly important to maintaining tax exempt",
-    "status with the IRS.",
-    "The Foundation is committed to complying with the laws regulating",
-    "charities and charitable donations in all 50 states of the United",
-    "States.  Compliance requirements are not uniform and it takes a",
-    "considerable effort, much paperwork and many fees to meet and keep up",
-    "with these requirements.  We do not solicit donations in locations",
-    "where we have not received written confirmation of compliance.  To",
-    "SEND DONATIONS or determine the status of compliance for any",
-    "particular state visit http://pglaf.org",
-    "While we cannot and do not solicit contributions from states where we",
-    "have not met the solicitation requirements, we know of no prohibition",
-    "against accepting unsolicited donations from donors in such states who",
-    "approach us with offers to donate.",
-    "International donations are gratefully accepted, but we cannot make",
-    "any statements concerning tax treatment of donations received from",
-    "outside the United States.  U.S. laws alone swamp our small staff.",
-    "Please check the Project Gutenberg Web pages for current donation",
-    "methods and addresses.  Donations are accepted in a number of other",
-    "ways including checks, online payments and credit card donations.",
-    "To donate, please visit: http://pglaf.org/donate",
-    "Section 5.  General Information About Project Gutenberg-tm electronic",
-    "works.",
-    "Professor Michael S. Hart is the originator of the Project Gutenberg-tm",
-    "concept of a library of electronic works that could be freely shared",
-    "with anyone.  For thirty years, he produced and distributed Project",
-    "Gutenberg-tm eBooks with only a loose network of volunteer support.",
-    "Project Gutenberg-tm eBooks are often created from several printed",
-    "editions, all of which are confirmed as Public Domain in the U.S.",
-    "unless a copyright notice is included.  Thus, we do not necessarily",
-    "keep eBooks in compliance with any particular paper edition.",
-    "Most people start at our Web site which has the main PG search facility:",
-    "     http://www.gutenberg.org",
-    "This Web site includes information about Project Gutenberg-tm,",
-    "including how to make donations to the Project Gutenberg Literary",
-    "Archive Foundation, how to help produce our new eBooks, and how to",
-    "subscribe to our email newsletter to hear about new eBooks.",
-    ""
-};
diff --git a/deps/libcaption/format.sh b/deps/libcaption/format.sh
deleted file mode 100644
index 094312b..0000000
--- a/deps/libcaption/format.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-cd "$(dirname "$0")"
-find . \( -name '*.cpp' -o -name '*.c' -o -name '*.h' -o -name '*.hpp' -o -name '*.re2c' \) -exec astyle --style=stroustrup --attach-extern-c --break-blocks --pad-header --pad-paren-out --unpad-paren --add-brackets --keep-one-line-blocks --keep-one-line-statements --convert-tabs --align-pointer=type --align-reference=type --suffix=none --lineend=linux --max-code-length=180 {} \;
diff --git a/deps/libcaption/src/avc.c b/deps/libcaption/src/avc.c
deleted file mode 100644
index 4b46ef6..0000000
--- a/deps/libcaption/src/avc.c
+++ /dev/null
@@ -1,595 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-
-#include "avc.h"
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-////////////////////////////////////////////////////////////////////////////////
-// AVC RBSP Methods
-//  TODO move the to a avcutils file
-static size_t _find_emulation_prevention_byte (const uint8_t* data, size_t size)
-{
-    size_t offset = 2;
-
-    while (offset < size) {
-        if (0 == data[offset]) {
-            // 0 0 X 3 //; we know X is zero
-            offset += 1;
-        } else if (3 != data[offset]) {
-            // 0 0 X 0 0 3; we know X is not 0 and not 3
-            offset += 3;
-        } else if (0 != data[offset-1]) {
-            // 0 X 0 0 3
-            offset += 2;
-        } else if (0 != data[offset-2]) {
-            // X 0 0 3
-            offset += 1;
-        } else {
-            // 0 0 3
-            return offset;
-        }
-    }
-
-    return size;
-}
-
-static size_t _copy_to_rbsp (uint8_t* destData, size_t destSize, const uint8_t* sorcData, size_t sorcSize)
-{
-    size_t toCopy, totlSize = 0;
-
-    for (;;) {
-        if (destSize >= sorcSize) {
-            return 0;
-        }
-
-        // The following line IS correct! We want to look in sorcData up to destSize bytes
-        // We know destSize is smaller than sorcSize because of the previous line
-        toCopy = _find_emulation_prevention_byte (sorcData,destSize);
-        memcpy (destData, sorcData, toCopy);
-        totlSize += toCopy;
-        destData += toCopy;
-        destSize -= toCopy;
-
-        if (0 == destSize) {
-            return totlSize;
-        }
-
-        // skip the emulation prevention byte
-        totlSize += 1;
-        sorcData += toCopy + 1;
-        sorcSize -= toCopy + 1;
-    }
-
-    return 0;
-}
-////////////////////////////////////////////////////////////////////////////////
-static inline size_t _find_emulated (uint8_t* data, size_t size)
-{
-    size_t offset = 2;
-
-    while (offset < size) {
-        if (3 < data[offset]) {
-            // 0 0 X; we know X is not 0, 1, 2 or 3
-            offset += 3;
-        } else if (0 != data[offset-1]) {
-            // 0 X 0 0 1
-            offset += 2;
-        } else if (0 != data[offset-2]) {
-            // X 0 0 1
-            offset += 1;
-        } else {
-            // 0 0 0, 0 0 1
-            return offset;
-        }
-    }
-
-    return size;
-}
-
-size_t _copy_from_rbsp (uint8_t* data, uint8_t* payloadData, size_t payloadSize)
-{
-    size_t total = 0;
-
-    while (payloadSize) {
-        size_t bytes = _find_emulated (payloadData,payloadSize);
-
-        if (bytes > payloadSize) {
-            return 0;
-        }
-
-        memcpy (data, payloadData, bytes);
-
-        if (bytes == payloadSize) {
-            return total + bytes;
-        }
-
-        data[bytes] = 3; // insert emulation prevention byte
-        data += bytes + 1; total += bytes + 1;
-        payloadData += bytes; payloadSize -= bytes;
-    }
-
-    return total;
-}
-////////////////////////////////////////////////////////////////////////////////
-struct _sei_message_t {
-    size_t size;
-    sei_msgtype_t type;
-    struct _sei_message_t* next;
-};
-
-sei_message_t* sei_message_next (sei_message_t* msg) { return ( (struct _sei_message_t*) msg)->next; }
-sei_msgtype_t  sei_message_type (sei_message_t* msg) { return ( (struct _sei_message_t*) msg)->type; }
-size_t         sei_message_size (sei_message_t* msg) { return ( (struct _sei_message_t*) msg)->size; }
-uint8_t*       sei_message_data (sei_message_t* msg) { return ( (uint8_t*) msg) + sizeof (struct _sei_message_t); }
-void           sei_message_free (sei_message_t* msg) { if (msg) { free (msg); } }
-
-sei_message_t* sei_message_new (sei_msgtype_t type, uint8_t* data, size_t size)
-{
-    struct _sei_message_t* msg = (struct _sei_message_t*) malloc (sizeof (struct _sei_message_t) + size);
-    msg->next = 0; msg->type = type; msg->size = size;
-
-    if (data) {
-        memcpy (sei_message_data (msg), data, size);
-    } else {
-        memset (sei_message_data (msg), 0, size);
-    }
-
-    return (sei_message_t*) msg;
-}
-////////////////////////////////////////////////////////////////////////////////
-void sei_init (sei_t* sei)
-{
-    sei->dts = -1;
-    sei->cts = -1;
-    sei->head = 0;
-    sei->tail = 0;
-}
-
-void sei_message_append (sei_t* sei, sei_message_t* msg)
-{
-    if (0 == sei->head) {
-        sei->head = msg;
-        sei->tail = msg;
-    } else {
-        sei->tail->next = msg;
-        sei->tail = msg;
-    }
-}
-
-void sei_free (sei_t* sei)
-{
-    sei_message_t* tail;
-
-    while (sei->head) {
-        tail = sei->head->next;
-        free (sei->head);
-        sei->head = tail;
-    }
-
-    sei_init (sei);
-}
-
-void sei_dump (sei_t* sei)
-{
-    fprintf (stderr,"SEI %p\n", sei);
-    sei_dump_messages (sei->head);
-}
-
-void sei_dump_messages (sei_message_t* head)
-{
-    cea708_t cea708;
-    sei_message_t* msg;
-    cea708_init (&cea708);
-
-    for (msg = head ; msg ; msg = sei_message_next (msg)) {
-        uint8_t* data = sei_message_data (msg);
-        size_t size =  sei_message_size (msg);
-        fprintf (stderr,"-- Message %p\n-- Message Type: %d\n-- Message Size: %d\n", data, sei_message_type (msg), (int) size);
-
-        while (size) {
-            fprintf (stderr,"%02X ", *data);
-            ++data; --size;
-        }
-
-        fprintf (stderr,"\n");
-
-        if (sei_type_user_data_registered_itu_t_t35 == sei_message_type (msg)) {
-            cea708_parse (sei_message_data (msg), sei_message_size (msg), &cea708);
-            cea708_dump (&cea708);
-        }
-
-
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-size_t sei_render_size (sei_t* sei)
-{
-    size_t size = 2; // nalu_type + stop bit
-    sei_message_t* msg;
-
-    for (msg = sei_message_head (sei) ; msg ; msg = sei_message_next (msg)) {
-        size += 1 + (msg->type / 255);
-        size += 1 + (msg->size / 255);
-        size += 1 + (msg->size * 4/3);
-    }
-
-    return size;
-}
-
-// we can safely assume sei_render_size() bytes have been allocated for data
-size_t sei_render (sei_t* sei, uint8_t* data)
-{
-    size_t escaped_size, size = 2; // nalu_type + stop bit
-    sei_message_t* msg;
-    (*data) = 6; ++data;
-
-    for (msg = sei_message_head (sei) ; msg ; msg = sei_message_next (msg)) {
-        int payloadType      = sei_message_type (msg);
-        int payloadSize      = (int) sei_message_size (msg);
-        uint8_t* payloadData = sei_message_data (msg);
-
-        while (255 <= payloadType) {
-            (*data) = 255;
-            ++data; ++size;
-            payloadType -= 255;
-        }
-
-        (*data) = payloadType;
-        ++data; ++size;
-
-        while (255 <= payloadSize) {
-            (*data) = 255;
-            ++data; ++size;
-            payloadSize -= 255;
-        }
-
-        (*data) = payloadSize;
-        ++data; ++size;
-
-        if (0 >= (escaped_size = _copy_from_rbsp (data,payloadData,payloadSize))) {
-            return 0;
-        }
-
-        data += escaped_size;
-        size += escaped_size;
-    }
-
-    // write stop bit and return
-    (*data) = 0x80;
-    return size;
-}
-
-uint8_t* sei_render_alloc (sei_t* sei, size_t* size)
-{
-    size_t aloc = sei_render_size (sei);
-    uint8_t* data = malloc (aloc);
-    (*size) = sei_render (sei, data);
-    return data;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-int sei_parse_nalu (sei_t* sei, const uint8_t* data, size_t size, double dts, double cts)
-{
-    assert (0<=cts); // cant present before decode
-    sei->dts = dts;
-    sei->cts = cts;
-    int ret = 0;
-
-    if (0 == data || 0 == size) {
-        return 0;
-    }
-
-    uint8_t nal_unit_type = (*data) & 0x1F;
-    ++data; --size;
-
-    if (6 != nal_unit_type) {
-        return 0;
-    }
-
-    // SEI may contain more than one payload
-    while (1<size) {
-        int payloadType = 0;
-        int payloadSize = 0;
-
-        while (0 < size && 255 == (*data)) {
-            payloadType += 255;
-            ++data; --size;
-        }
-
-        if (0 == size) {
-            goto error;
-        }
-
-        payloadType += (*data);
-        ++data; --size;
-
-        while (0 < size && 255 == (*data)) {
-            payloadSize += 255;
-            ++data; --size;
-        }
-
-        if (0 == size) {
-            goto error;
-        }
-
-        payloadSize += (*data);
-        ++data; --size;
-
-        if (payloadSize) {
-            sei_message_t* msg = sei_message_new ( (sei_msgtype_t) payloadType, 0, payloadSize);
-            uint8_t* payloadData = sei_message_data (msg);
-            size_t bytes = _copy_to_rbsp (payloadData, payloadSize, data, size);
-            sei_message_append (sei, msg);
-
-            if ( (int) bytes < payloadSize) {
-                goto error;
-            }
-
-            data += bytes; size -= bytes;
-            ++ret;
-        }
-    }
-
-    // There should be one trailing byte, 0x80. But really, we can just ignore that fact.
-    return ret;
-error:
-    sei_init (sei);
-    return 0;
-}
-////////////////////////////////////////////////////////////////////////////////
-libcaption_stauts_t sei_to_caption_frame (sei_t* sei, caption_frame_t* frame)
-{
-    cea708_t cea708;
-    sei_message_t* msg;
-    libcaption_stauts_t status = LIBCAPTION_OK;
-
-    cea708_init (&cea708);
-
-    for (msg = sei_message_head (sei) ; msg ; msg = sei_message_next (msg)) {
-        if (sei_type_user_data_registered_itu_t_t35 == sei_message_type (msg)) {
-            cea708_parse (sei_message_data (msg), sei_message_size (msg), &cea708);
-            status = libcaption_status_update (status, cea708_to_caption_frame (frame, &cea708, sei_pts (sei)));
-        }
-    }
-
-    if (LIBCAPTION_READY == status) {
-        frame->timestamp = sei->dts + sei->cts;
-        frame->duration = 0;
-    }
-
-    return status;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-#define DEFAULT_CHANNEL 0
-
-void sei_append_708 (sei_t* sei, cea708_t* cea708)
-{
-    sei_message_t* msg = sei_message_new (sei_type_user_data_registered_itu_t_t35, 0, CEA608_MAX_SIZE);
-    msg->size = cea708_render (cea708, sei_message_data (msg), sei_message_size (msg));
-    sei_message_append (sei,msg);
-    // cea708_dump (cea708);
-    cea708_init (cea708); // will confgure using HLS compatiable defaults
-}
-
-// This should be moved to 708.c
-// This works for popon, but bad for paint on and roll up
-// Please understand this function before you try to use it, setting null values have different effects than you may assume
-void sei_encode_eia608 (sei_t* sei, cea708_t* cea708, uint16_t cc_data)
-{
-    // This one is full, flush and init a new one
-    // shoudl this be 32? I cant remember
-    if (31 == cea708->user_data.cc_count) {
-        sei_append_708 (sei,cea708);
-    }
-
-    if (0 == cea708->user_data.cc_count) { // This is a new 708 header, but a continuation of a 608 stream
-        cea708_add_cc_data (cea708, 1, cc_type_ntsc_cc_field_1, eia608_control_command (eia608_control_resume_caption_loading, DEFAULT_CHANNEL));
-    }
-
-    if (0 == cc_data) { // Finished
-        sei_encode_eia608 (sei,cea708,eia608_control_command (eia608_control_end_of_caption, DEFAULT_CHANNEL));
-        sei_append_708 (sei,cea708);
-        return;
-    }
-
-    cea708_add_cc_data (cea708, 1, cc_type_ntsc_cc_field_1, cc_data);
-}
-////////////////////////////////////////////////////////////////////////////////
-// TODO use alternate charcters instead of always using space before extended charcters
-// TODO rewrite this function with better logic
-int sei_from_caption_frame (sei_t* sei, caption_frame_t* frame)
-{
-    int r,c;
-    cea708_t cea708;
-    const char* data;
-    uint16_t prev_cc_data;
-
-    cea708_init (&cea708); // set up a new popon frame
-    cea708_add_cc_data (&cea708, 1, cc_type_ntsc_cc_field_1, eia608_control_command (eia608_control_erase_non_displayed_memory, DEFAULT_CHANNEL));
-    cea708_add_cc_data (&cea708, 1, cc_type_ntsc_cc_field_1, eia608_control_command (eia608_control_resume_caption_loading, DEFAULT_CHANNEL));
-
-    for (r=0; r<SCREEN_ROWS; ++r) {
-        // Calculate preamble
-        for (c=0; c<SCREEN_COLS && 0 == *caption_frame_read_char (frame,r,c,0,0) ; ++c) {}
-
-        // This row is blank
-        if (SCREEN_COLS == c) {
-            continue;
-        }
-
-        // Write preamble
-        sei_encode_eia608 (sei, &cea708, eia608_row_column_pramble (r,c,DEFAULT_CHANNEL,0));
-        int tab = c % 4;
-
-        if (tab) {
-            sei_encode_eia608 (sei, &cea708, eia608_tab (tab,DEFAULT_CHANNEL));
-        }
-
-        // Write the row
-        for (prev_cc_data = 0, data = caption_frame_read_char (frame,r,c,0,0) ;
-                (*data) && c < SCREEN_COLS ; ++c, data = caption_frame_read_char (frame,r,c,0,0)) {
-            uint16_t cc_data = eia608_from_utf8_1 (data,DEFAULT_CHANNEL);
-
-            if (!cc_data) {
-                // We do't want to write bad data, so just ignore it.
-            } else if (eia608_is_basicna (prev_cc_data)) {
-                if (eia608_is_basicna (cc_data)) {
-                    // previous and current chars are both basicna, combine them into current
-                    sei_encode_eia608 (sei, &cea708, eia608_from_basicna (prev_cc_data,cc_data));
-                } else if (eia608_is_westeu (cc_data)) {
-                    // extended charcters overwrite the previous charcter, so insert a dummy char thren write the extended char
-                    sei_encode_eia608 (sei, &cea708, eia608_from_basicna (prev_cc_data,eia608_from_utf8_1 (EIA608_CHAR_SPACE,DEFAULT_CHANNEL)));
-                    sei_encode_eia608 (sei, &cea708, cc_data);
-                } else {
-                    // previous was basic na, but current isnt; write previous and current
-                    sei_encode_eia608 (sei, &cea708, prev_cc_data);
-                    sei_encode_eia608 (sei, &cea708, cc_data);
-                }
-
-                prev_cc_data = 0; // previous is handled, we can forget it now
-            } else if (eia608_is_westeu (cc_data)) {
-                // extended chars overwrite the previous chars, so insert a dummy char
-                sei_encode_eia608 (sei, &cea708, eia608_from_utf8_1 (EIA608_CHAR_SPACE,DEFAULT_CHANNEL));
-                sei_encode_eia608 (sei, &cea708, cc_data);
-            } else if (eia608_is_basicna (cc_data)) {
-                prev_cc_data = cc_data;
-            } else {
-                sei_encode_eia608 (sei, &cea708, cc_data);
-            }
-
-            if (eia608_is_specialna (cc_data)) {
-                // specialna are treated as controll charcters. Duplicated controll charcters are discarded
-                // So we for a resume after a specialna as a noop to break repetition detection
-                // TODO only do this if the same charcter is repeated
-                sei_encode_eia608 (sei, &cea708, eia608_control_command (eia608_control_resume_caption_loading, DEFAULT_CHANNEL));
-            }
-        }
-
-        if (0 != prev_cc_data) {
-            sei_encode_eia608 (sei, &cea708, prev_cc_data);
-        }
-    }
-
-    sei_encode_eia608 (sei, &cea708, 0); // flush
-    sei->dts = frame->timestamp; // assumes in order frames
-    // sei_dump (sei);
-    return 1;
-}
-////////////////////////////////////////////////////////////////////////////////
-static int avc_is_start_code (const uint8_t* data, int size, int* len)
-{
-    if (3 > size) {
-        return -1;
-    }
-
-    if (1 < data[2]) {
-        return 3;
-    }
-
-    if (0 != data[1]) {
-        return 2;
-    }
-
-    if (0 == data[0]) {
-        if (1 == data[2]) {
-            *len = 3;
-            return 0;
-        }
-
-        if (4 <= size && 1 == data[3]) {
-            *len = 4;
-            return 0;
-        }
-    }
-
-    return 1;
-}
-
-
-static int avc_find_start_code (const uint8_t* data, int size, int* len)
-{
-    int pos = 0;
-
-    for (;;) {
-        // is pos pointing to a start code?
-        int isc = avc_is_start_code (data + pos, size - pos, len);
-
-        if (0 < isc) {
-            pos += isc;
-        } else if (0 > isc) {
-            // No start code found
-            return isc;
-        } else {
-            // Start code found at pos
-            return pos;
-        }
-    }
-}
-
-
-static int avc_find_start_code_increnental (const uint8_t* data, int size, int prev_size, int* len)
-{
-    int offset = (3 <= prev_size) ? (prev_size - 3) : 0;
-    int pos = avc_find_start_code (data + offset, size - offset, len);
-
-    if (0 <= pos) {
-        return pos + offset;
-    }
-
-    return pos;
-}
-
-void avcnalu_init (avcnalu_t* nalu)
-{
-    memset (nalu,0,sizeof (avcnalu_t));
-}
-
-int avcnalu_parse_annexb (avcnalu_t* nalu, const uint8_t** data, size_t* size)
-{
-    int scpos, sclen;
-    int new_size = (int) (nalu->size + (*size));
-
-    if (new_size > MAX_NALU_SIZE) {
-        (*size) = nalu->size = 0;
-        return LIBCAPTION_ERROR;
-    }
-
-    memcpy (&nalu->data[nalu->size], (*data), (*size));
-    scpos = avc_find_start_code_increnental (&nalu->data[0], new_size, (int) nalu->size, &sclen);
-
-    if (0<=scpos) {
-        (*data) += (scpos - nalu->size) + sclen;
-        (*size) -= (scpos - nalu->size) + sclen;
-        nalu->size = scpos;
-        return 0 < nalu->size ? LIBCAPTION_READY : LIBCAPTION_OK;
-    } else {
-        (*size) = 0;
-        nalu->size = new_size;
-        return LIBCAPTION_OK;
-    }
-}
diff --git a/deps/libcaption/src/caption.c b/deps/libcaption/src/caption.c
deleted file mode 100644
index 9af6a51..0000000
--- a/deps/libcaption/src/caption.c
+++ /dev/null
@@ -1,491 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "utf8.h"
-#include "xds.h"
-#include "eia608.h"
-#include "caption.h"
-#include <stdio.h>
-#include <string.h>
-////////////////////////////////////////////////////////////////////////////////
-void caption_frame_buffer_clear (caption_frame_buffer_t* buff)
-{
-    memset (buff,0,sizeof (caption_frame_buffer_t));
-}
-
-void caption_frame_state_clear (caption_frame_t* frame)
-{
-    frame->timestamp = -1;
-    frame->duration = 0;
-    frame->state = (caption_frame_state_t) {0,0,0,0,0,0,0}; // clear global state
-}
-
-void caption_frame_init (caption_frame_t* frame)
-{
-    caption_frame_state_clear (frame);
-    xds_init (&frame->xds);
-    caption_frame_buffer_clear (&frame->back);
-    caption_frame_buffer_clear (&frame->front);
-}
-////////////////////////////////////////////////////////////////////////////////
-#define CAPTION_CLEAR     0
-#define CAPTION_POP_ON    2
-#define CAPTION_PAINT_ON  3
-#define CAPTION_ROLL_UP   4
-////////////////////////////////////////////////////////////////////////////////
-// Helpers
-static caption_frame_cell_t* frame_buffer_cell (caption_frame_buffer_t* buff, int row, int col)
-{
-    return &buff->cell[row][col];
-}
-
-static caption_frame_buffer_t* frame_write_buffer (caption_frame_t* frame)
-{
-    if (CAPTION_POP_ON == frame->state.mod) {
-        return &frame->back;
-    } else if (CAPTION_PAINT_ON == frame->state.mod || CAPTION_ROLL_UP == frame->state.mod) {
-        return &frame->front;
-    } else {
-        return 0;
-    }
-}
-
-static caption_frame_cell_t* frame_cell (caption_frame_t* frame, int row, int col)
-{
-    return frame_buffer_cell (&frame->front,row,col);
-}
-
-static caption_frame_cell_t* frame_cell_get (caption_frame_t* frame)
-{
-    return frame_cell (frame, frame->state.row, frame->state.col);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-uint16_t _eia608_from_utf8 (const char* s); // function is in eia608.c.re2c
-int caption_frame_write_char (caption_frame_t* frame, int row, int col, eia608_style_t style, int underline, const char* c)
-{
-    caption_frame_buffer_t* buff = frame_write_buffer (frame);
-
-    if (!buff || ! _eia608_from_utf8 (c)) {
-        return 0;
-    }
-
-    caption_frame_cell_t* cell = frame_buffer_cell (buff,row,col);
-
-    if (utf8_char_copy (&cell->data[0],c)) {
-        cell->uln = underline;
-        cell->sty = style;
-        return 1;
-    }
-
-    return 0;
-}
-
-const utf8_char_t* caption_frame_read_char (caption_frame_t* frame, int row, int col, eia608_style_t* style, int* underline)
-{
-    caption_frame_cell_t* cell = frame_cell (frame, row, col);
-
-    if (!cell) {
-        if (style) {
-            (*style) = eia608_style_white;
-        }
-
-        if (underline) {
-            (*underline) = 0;
-        }
-
-        return EIA608_CHAR_NULL;
-    }
-
-    if (style) {
-        (*style) = cell->sty;
-    }
-
-    if (underline) {
-        (*underline) = cell->uln;
-    }
-
-    return &cell->data[0];
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Parsing
-libcaption_stauts_t caption_frame_carriage_return (caption_frame_t* frame)
-{
-    caption_frame_buffer_t* buff = frame_write_buffer (frame);
-
-    if (!buff) {
-        return LIBCAPTION_OK;
-    }
-
-    int r = frame->state.row - (frame->state.rup-1);
-
-    if (0  >= r || CAPTION_ROLL_UP != frame->state.mod) {
-        return LIBCAPTION_OK;
-    }
-
-    for (; r < SCREEN_ROWS; ++r) {
-        uint8_t* dst = (uint8_t*) frame_buffer_cell (buff,r-1,0);
-        uint8_t* src = (uint8_t*) frame_buffer_cell (buff,r-0,0);
-        memcpy (dst,src,sizeof (caption_frame_cell_t) * SCREEN_COLS);
-    }
-
-    memset (frame_buffer_cell (buff,SCREEN_ROWS-1,0), 0,sizeof (caption_frame_cell_t) * SCREEN_COLS);
-    return LIBCAPTION_OK;
-}
-////////////////////////////////////////////////////////////////////////////////
-libcaption_stauts_t eia608_write_char (caption_frame_t* frame, char* c)
-{
-    if (0 == c || 0 == c[0] ||
-            SCREEN_ROWS <= frame->state.row || 0 > frame->state.row ||
-            SCREEN_COLS <= frame->state.col || 0 > frame->state.col) {
-        // NO-OP
-    } else if (caption_frame_write_char (frame,frame->state.row,frame->state.col,frame->state.sty,frame->state.uln, c)) {
-        frame->state.col += 1;
-    }
-
-    return LIBCAPTION_OK;
-}
-
-libcaption_stauts_t caption_frame_end (caption_frame_t* frame)
-{
-    memcpy (&frame->front,&frame->back,sizeof (caption_frame_buffer_t));
-    caption_frame_state_clear (frame);
-    caption_frame_buffer_clear (&frame->back);
-    return LIBCAPTION_READY;
-}
-
-libcaption_stauts_t caption_frame_decode_preamble (caption_frame_t* frame, uint16_t cc_data)
-{
-    eia608_style_t sty;
-    int row, col, chn, uln;
-
-    if (eia608_parse_preamble (cc_data, &row, &col, &sty, &chn, &uln)) {
-        frame->state.row = row;
-        frame->state.col = col;
-        frame->state.sty = sty;
-        frame->state.uln = uln;
-    }
-
-    return LIBCAPTION_OK;
-}
-
-libcaption_stauts_t caption_frame_decode_midrowchange (caption_frame_t* frame, uint16_t cc_data)
-{
-    eia608_style_t sty;
-    int chn, unl;
-
-    if (eia608_parse_midrowchange (cc_data,&chn,&sty,&unl)) {
-        frame->state.sty = sty;
-        frame->state.uln = unl;
-    }
-
-    return LIBCAPTION_OK;
-}
-
-libcaption_stauts_t caption_frame_backspace (caption_frame_t* frame)
-{
-    // do not reverse wrap (tw 28:20)
-    frame->state.col = (0 < frame->state.col) ? (frame->state.col - 1) : 0;
-    caption_frame_write_char (frame,frame->state.row,frame->state.col,eia608_style_white,0,EIA608_CHAR_NULL);
-    return LIBCAPTION_READY;
-}
-
-libcaption_stauts_t caption_frame_decode_control (caption_frame_t* frame, uint16_t cc_data)
-{
-    int cc;
-    eia608_control_t cmd = eia608_parse_control (cc_data,&cc);
-
-    switch (cmd) {
-    // PAINT ON
-    case eia608_control_resume_direct_captioning:
-        frame->state.rup = 0;
-        frame->state.mod = CAPTION_PAINT_ON;
-        return LIBCAPTION_OK;
-
-    case eia608_control_erase_display_memory:
-        caption_frame_buffer_clear (&frame->front);
-        return LIBCAPTION_OK;
-
-    // ROLL-UP
-    case eia608_control_roll_up_2:
-        frame->state.rup = 1;
-        frame->state.mod = CAPTION_ROLL_UP;
-        return LIBCAPTION_OK;
-
-    case eia608_control_roll_up_3:
-        frame->state.rup = 2;
-        frame->state.mod = CAPTION_ROLL_UP;
-        return LIBCAPTION_OK;
-
-    case eia608_control_roll_up_4:
-        frame->state.rup = 3;
-        frame->state.mod = CAPTION_ROLL_UP;
-        return LIBCAPTION_OK;
-
-    case eia608_control_carriage_return:
-        return caption_frame_carriage_return (frame);
-
-    // Corrections (Is this only valid as part of paint on?)
-    case eia608_control_backspace:
-        return caption_frame_backspace (frame);
-
-    case eia608_control_delete_to_end_of_row: {
-        int c;
-
-        for (c = frame->state.col ; c < SCREEN_COLS ; ++c) {
-            caption_frame_write_char (frame,frame->state.row,c,eia608_style_white,0,EIA608_CHAR_NULL);
-        }
-    }
-
-    return LIBCAPTION_READY;
-
-    // POP ON
-    case eia608_control_resume_caption_loading:
-        frame->state.rup = 0;
-        frame->state.mod = CAPTION_POP_ON;
-        return LIBCAPTION_OK;
-
-    case eia608_control_erase_non_displayed_memory:
-        caption_frame_buffer_clear (&frame->back);
-        return LIBCAPTION_OK;
-
-    case eia608_control_end_of_caption:
-        return caption_frame_end (frame);
-
-    // cursor positioning
-    case eia608_tab_offset_0:
-    case eia608_tab_offset_1:
-    case eia608_tab_offset_2:
-    case eia608_tab_offset_3:
-        frame->state.col += (cmd - eia608_tab_offset_0);
-        return LIBCAPTION_OK;
-
-    // Unhandled
-    default:
-    case eia608_control_alarm_off:
-    case eia608_control_alarm_on:
-    case eia608_control_text_restart:
-    case eia608_control_text_resume_text_display:
-        return LIBCAPTION_OK;
-    }
-}
-
-libcaption_stauts_t caption_frame_decode_text (caption_frame_t* frame, uint16_t cc_data)
-{
-    int chan;
-    char char1[5], char2[5];
-    size_t chars = eia608_to_utf8 (cc_data, &chan, &char1[0], &char2[0]);
-
-    if (eia608_is_westeu (cc_data)) {
-        // Extended charcters replace the previous charcter for back compatibility
-        caption_frame_backspace (frame);
-    }
-
-    if (0 < chars) {
-        eia608_write_char (frame,char1);
-    }
-
-    if (1 < chars) {
-        eia608_write_char (frame,char2);
-    }
-
-    return LIBCAPTION_OK;
-}
-
-libcaption_stauts_t caption_frame_decode (caption_frame_t* frame, uint16_t cc_data, double timestamp)
-{
-    libcaption_stauts_t status = LIBCAPTION_OK;
-
-    if (!eia608_parity_varify (cc_data)) {
-        return LIBCAPTION_ERROR;
-    }
-
-    if (eia608_is_padding (cc_data)) {
-        return LIBCAPTION_OK;
-    }
-
-    // skip duplicate controll commands. We also skip duplicate specialna to match the behaviour of iOS/vlc
-    if ( (eia608_is_specialna (cc_data) || eia608_is_control (cc_data)) && cc_data == frame->state.cc_data) {
-        return LIBCAPTION_OK;
-    }
-
-    if (0 > frame->timestamp && 0 < timestamp) {
-        frame->timestamp = timestamp;
-    }
-
-    frame->state.cc_data = cc_data;
-
-    if (frame->xds.state) {
-        status = xds_decode (&frame->xds,cc_data);
-    } else if (eia608_is_xds (cc_data)) {
-        status = xds_decode (&frame->xds,cc_data);
-    } else if (eia608_is_control (cc_data)) {
-        status = caption_frame_decode_control (frame,cc_data);
-    } else if (eia608_is_basicna (cc_data) ||
-               eia608_is_specialna (cc_data) ||
-               eia608_is_westeu (cc_data)) {
-
-        // Don't decode text if we dont know what mode we are in.
-        if (CAPTION_CLEAR == frame->state.mod) {
-            return LIBCAPTION_OK;
-        }
-
-        status = caption_frame_decode_text (frame,cc_data);
-
-        // If we are in paint on mode, display immiditally
-        if (1 == status && (CAPTION_PAINT_ON == frame->state.mod || CAPTION_ROLL_UP == frame->state.mod)) {
-            status = LIBCAPTION_READY;
-        }
-    } else if (eia608_is_preamble (cc_data)) {
-        status = caption_frame_decode_preamble (frame,cc_data);
-    } else if (eia608_is_midrowchange (cc_data)) {
-        status = caption_frame_decode_midrowchange (frame,cc_data);
-    }
-
-    return status;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-int caption_frame_from_text (caption_frame_t* frame, const utf8_char_t* data)
-{
-    int r, c, chan = 0;
-    ssize_t size = (ssize_t) strlen (data);
-    size_t char_count, char_length, line_length = 0, trimmed_length = 0;
-    caption_frame_init (frame);
-    frame->state.mod = CAPTION_POP_ON;
-
-    for (r = 0 ; 0 < size && SCREEN_ROWS > r ; ++r) {
-        const utf8_char_t* cap_data = data;
-        line_length = utf8_line_length (cap_data);
-        trimmed_length = utf8_trimmed_length (cap_data,line_length);
-        char_count = utf8_char_count (cap_data,trimmed_length);
-
-        // If char_count is greater than one line can display, split it.
-        if (SCREEN_COLS < char_count) {
-            char_count = utf8_wrap_length (cap_data,SCREEN_COLS);
-            line_length = utf8_string_length (cap_data,char_count+1);
-        }
-
-        // Write the line
-        for (c = 0 ; c < (int) char_count ; ++c) {
-            caption_frame_write_char (frame,r,c,eia608_style_white,0,&cap_data[0]);
-            char_length = utf8_char_length (cap_data);
-            cap_data += char_length;
-        }
-
-        data += line_length;
-        size -= (ssize_t) line_length;
-    }
-
-    caption_frame_end (frame);
-    return 0;
-}
-////////////////////////////////////////////////////////////////////////////////
-void caption_frame_to_text (caption_frame_t* frame, utf8_char_t* data)
-{
-    int r, c, x, s, uln;
-    eia608_style_t sty;
-
-    data[0] = 0;
-
-    for (r = 0 ; r < SCREEN_ROWS ; ++r) {
-        for (c = 0, x = 0 ; c < SCREEN_COLS ; ++c) {
-            const char* chr  = caption_frame_read_char (frame, r, c, &sty, &uln);
-
-            if (0 < (s = (int) utf8_char_copy (data,chr))) {
-                ++x; data += s;
-            }
-        }
-
-        if (x) {
-            strcpy ( (char*) data,"\r\n");
-            data += 2;
-        }
-    }
-}
-////////////////////////////////////////////////////////////////////////////////
-size_t caption_frame_dump_buffer (caption_frame_t* frame, utf8_char_t* buf)
-{
-    int r, c;
-    size_t bytes, total = 0;
-    bytes = sprintf (buf, "   row: %d\tcol: %d\n   mode: %s\troll-up: %d\n",
-                     frame->state.row, frame->state.col,
-                     eia608_mode_map[frame->state.mod],frame->state.rup?1+frame->state.rup:0);
-    total += bytes; buf += bytes;
-    bytes = sprintf (buf, "   00000000001111111111222222222233\n   01234567890123456789012345678901\n  %s--------------------------------%s\n",
-                     EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT, EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT);
-    total += bytes; buf += bytes;
-
-    for (r = 0 ; r < SCREEN_ROWS ; ++r) {
-        bytes = sprintf (buf, "%02d%s", r, EIA608_CHAR_VERTICAL_LINE);
-        total += bytes; buf += bytes;
-
-        for (c = 0 ; c < SCREEN_COLS ; ++c) {
-            caption_frame_cell_t* cell = frame_cell (frame,r,c);
-            bytes = utf8_char_copy (buf, (0==cell->data[0]) ?EIA608_CHAR_SPACE:&cell->data[0]);
-            total += bytes; buf += bytes;
-        }
-
-        bytes = sprintf (buf, "%s\n", EIA608_CHAR_VERTICAL_LINE);
-        total += bytes; buf += bytes;
-    }
-
-    bytes = sprintf (buf, "  %s--------------------------------%s\n",
-                     EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT, EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT);
-    total += bytes; buf += bytes;
-    return total;
-}
-
-void caption_frame_dump (caption_frame_t* frame)
-{
-    utf8_char_t buff[CAPTION_FRAME_DUMP_BUF_SIZE];
-    size_t size = caption_frame_dump_buffer (frame, buff);
-    fprintf (stderr,"%s\n", buff);
-}
-
-size_t caption_frame_json (caption_frame_t* frame, utf8_char_t* buf)
-{
-    size_t bytes, total = 0;
-    int r,c,count = 0;
-    bytes = sprintf (buf, "{\"format\":\"eia608\",\"mode\":\"%s\",\"rollUp\":%d,\"data\":[",
-                     eia608_mode_map[frame->state.mod],frame->state.rup?1+frame->state.rup:0);
-    total += bytes; buf += bytes;
-
-    for (r = 0 ; r < SCREEN_ROWS ; ++r) {
-        for (c = 0 ; c < SCREEN_COLS ; ++c) {
-            caption_frame_cell_t* cell = frame_cell (frame,r,c);
-
-            if (0 != cell->data[0]) {
-                const char* data = ('"' == cell->data[0]) ?"\\\"": (const char*) &cell->data[0]; //escape quote
-                bytes = sprintf (buf, "%s\n{\"row\":%d,\"col\":%d,\"char\":\"%s\",\"style\":\"%s\"}",
-                                 (0<count?",":""),r,c,data,eia608_style_map[cell->sty]);
-                total += bytes; buf += bytes; ++count;
-            }
-        }
-    }
-
-    bytes = sprintf (buf, "\n]}\n");
-    total += bytes; buf += bytes;
-    return total;
-}
diff --git a/deps/libcaption/src/cea708.c b/deps/libcaption/src/cea708.c
deleted file mode 100644
index 8eb7068..0000000
--- a/deps/libcaption/src/cea708.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "cea708.h"
-#include <memory.h>
-
-int cea708_cc_count (user_data_t* data)
-{
-    return data->cc_count;
-}
-
-uint16_t cea708_cc_data (user_data_t* data, int index, int* valid, cea708_cc_type_t* type)
-{
-    (*valid) = data->cc_data[index].cc_valid;
-    (*type) = data->cc_data[index].cc_type;
-    return data->cc_data[index].cc_data;
-}
-
-
-int cea708_init (cea708_t* cea708)
-{
-    memset (cea708,0,sizeof (cea708_t));
-    cea708->country = country_united_states;
-    cea708->provider = t35_provider_atsc;
-    cea708->user_identifier = ('G'<<24) | ('A'<<16) | ('9'<<8) | ('4');
-    cea708->atsc1_data_user_data_type_code = 3; //what does 3 mean here?
-    cea708->directv_user_data_length = 0;
-    ///////////
-    cea708->user_data.process_em_data_flag = 0;
-    cea708->user_data.process_cc_data_flag = 1;
-    cea708->user_data.additional_data_flag = 0;
-    cea708->user_data.cc_count = 0;
-    return 1;
-}
-
-// 00 00 00  06 C1  FF FC 34 B9 FF : onCaptionInfo.
-int cea708_parse (uint8_t* data, size_t size, cea708_t* cea708)
-{
-    int i;
-    cea708->country = (itu_t_t35_country_code_t) (data[0]);
-    cea708->provider = (itu_t_t35_provider_code_t) ( (data[1] <<8) | data[2]);
-    cea708->atsc1_data_user_data_type_code = 0;
-    cea708->user_identifier = 0;
-    data += 3; size -= 3;
-
-    if (t35_provider_atsc == cea708->provider) {
-        // GA94
-        cea708->user_identifier = (data[0] <<24) | (data[1] <<16) | (data[2] <<8) | data[3];
-        data += 4; size -= 4;
-    }
-
-    // Im not sure what this extra byt is. It sonly seesm to come up in onCaptionInfo
-    // where country and provider are zero
-    if (0 == cea708->provider) {
-        data += 1; size -= 1;
-    } else if (t35_provider_atsc == cea708->provider || t35_provider_direct_tv == cea708->provider) {
-        cea708->atsc1_data_user_data_type_code = data[0];
-        data += 1; size -= 1;
-    }
-
-    if (t35_provider_direct_tv == cea708->provider) {
-        cea708->directv_user_data_length = data[0];
-        data += 1; size -= 1;
-    }
-
-    // TODO I believe this is condational on the above.
-    cea708->user_data.process_em_data_flag = !! (data[0]&0x80);
-    cea708->user_data.process_cc_data_flag = !! (data[0]&0x40);
-    cea708->user_data.additional_data_flag = !! (data[0]&0x20);
-    cea708->user_data.cc_count             = (data[0]&0x1F);
-    cea708->user_data.em_data              = data[1];
-    data += 2; size -= 2;
-
-    if (size < 3 * cea708->user_data.cc_count) {
-        cea708_init (cea708);
-        return 0;
-    }
-
-    for (i = 0 ; i < (int) cea708->user_data.cc_count ; ++i) {
-        cea708->user_data.cc_data[i].marker_bits = data[0]>>3;
-        cea708->user_data.cc_data[i].cc_valid    = data[0]>>2;
-        cea708->user_data.cc_data[i].cc_type     = data[0]>>0;
-        cea708->user_data.cc_data[i].cc_data     = data[1]<<8|data[2];
-        data += 3; size -= 3;
-    }
-
-    return 1;
-}
-
-int cea708_add_cc_data (cea708_t* cea708, int valid, cea708_cc_type_t type, uint16_t cc_data)
-{
-    if (31 <= cea708->user_data.cc_count) {
-        return 0;
-    }
-
-    cea708->user_data.cc_data[cea708->user_data.cc_count].marker_bits = 0x1F;
-    cea708->user_data.cc_data[cea708->user_data.cc_count].cc_valid = valid;
-    cea708->user_data.cc_data[cea708->user_data.cc_count].cc_type = type;
-    cea708->user_data.cc_data[cea708->user_data.cc_count].cc_data = cc_data;
-    ++cea708->user_data.cc_count;
-    return 1;
-}
-
-int cea708_render (cea708_t* cea708, uint8_t* data, size_t size)
-{
-    int i;    size_t total = 0;
-    data[0] = cea708->country;
-    data[1] = cea708->provider>>8;
-    data[2] = cea708->provider>>0;
-    total += 3; data += 3; size -= 3;
-
-    if (t35_provider_atsc == cea708->provider) {
-
-        data[0] = cea708->user_identifier >> 24;
-        data[1] = cea708->user_identifier >> 16;
-        data[2] = cea708->user_identifier >> 8;
-        data[3] = cea708->user_identifier >> 0;
-        total += 4; data += 4; size -= 4;
-    }
-
-    if (t35_provider_atsc == cea708->provider || t35_provider_direct_tv == cea708->provider) {
-        data[0] = cea708->atsc1_data_user_data_type_code;
-        total += 1; data += 1; size -= 1;
-    }
-
-    if (t35_provider_direct_tv == cea708->provider) {
-        data[0] = cea708->directv_user_data_length;
-        total += 1; data += 1; size -= 1;
-    }
-
-    data[1] = cea708->user_data.em_data;
-    data[0] = (cea708->user_data.process_em_data_flag?0x80:0x00)
-              | (cea708->user_data.process_cc_data_flag?0x40:0x00)
-              | (cea708->user_data.additional_data_flag?0x20:0x00)
-              | (cea708->user_data.cc_count & 0x1F);
-
-    total += 2; data += 2; size -= 2;
-
-    for (i = 0 ; i < (int) cea708->user_data.cc_count ; ++i) {
-        data[0] = (cea708->user_data.cc_data[i].marker_bits<<3)
-                  | (data[0] = cea708->user_data.cc_data[i].cc_valid<<2)
-                  | (data[0] = cea708->user_data.cc_data[i].cc_type);
-        data[1] = cea708->user_data.cc_data[i].cc_data>>8;
-        data[2] = cea708->user_data.cc_data[i].cc_data>>0;
-        total += 3; data += 3; size -= 3;
-    }
-
-    data[0] = 0xFF;
-    return (int) (total + 1);
-}
-
-cc_data_t cea708_encode_cc_data (int cc_valid, cea708_cc_type_t type, uint16_t cc_data)
-{
-    cc_data_t data = { 0x1F, cc_valid,type,cc_data};
-    return data;
-}
-
-void cea708_dump (cea708_t* cea708)
-{
-    int i;
-
-    for (i = 0 ; i < (int) cea708->user_data.cc_count ; ++i) {
-        cea708_cc_type_t type; int valid;
-        uint16_t cc_data = cea708_cc_data (&cea708->user_data, i, &valid, &type);
-
-        if (valid && cc_type_ntsc_cc_field_1 == type) {
-            eia608_dump (cc_data);
-        }
-    }
-}
-
-libcaption_stauts_t cea708_to_caption_frame (caption_frame_t* frame, cea708_t* cea708, double pts)
-{
-    int i, count = cea708_cc_count (&cea708->user_data);
-    libcaption_stauts_t status = LIBCAPTION_OK;
-
-    for (i = 0 ; i < count ; ++i) {
-        cea708_cc_type_t type; int valid;
-        uint16_t cc_data = cea708_cc_data (&cea708->user_data, i, &valid, &type);
-
-        if (valid && cc_type_ntsc_cc_field_1 == type) {
-            status = libcaption_status_update (status,caption_frame_decode (frame,cc_data, pts));
-        }
-    }
-
-    return status;
-}
diff --git a/deps/libcaption/src/eia608.c b/deps/libcaption/src/eia608.c
deleted file mode 100644
index 26add0d..0000000
--- a/deps/libcaption/src/eia608.c
+++ /dev/null
@@ -1,754 +0,0 @@
-/* Generated by re2c 0.15.3 on Tue Nov 22 15:42:35 2016 */
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "eia608.h"
-#include <string.h>
-#include <stdio.h>
-
-////////////////////////////////////////////////////////////////////////////////
-int eia608_row_map[] = {10, -1, 0, 1, 2, 3, 11, 12, 13, 14, 4, 5, 6, 7, 8, 9};
-int eia608_reverse_row_map[] = {2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 0, 6, 7, 8, 9, 1};
-
-const char* eia608_mode_map[] = {
-    "clear",
-    "loading",
-    "popOn",
-    "paintOn",
-    "rollUp",
-};
-
-const char* eia608_style_map[] = {
-    "white",
-    "green",
-    "blue",
-    "cyan",
-    "red",
-    "yellow",
-    "magenta",
-    "italics",
-};
-
-static inline uint16_t eia608_row_pramble (int row, int chan, int x, int underline)
-{
-    row = eia608_reverse_row_map[row&0x0F];
-    return eia608_parity (0x1040 | (chan?0x0800:0x0000) | ( (row<<7) &0x0700) | ( (row<<5) &0x0020)) | ( (x<<1) &0x001E) | (underline?0x0001:0x0000);
-}
-
-uint16_t eia608_row_column_pramble (int row, int col, int chan, int underline) { return eia608_row_pramble (row,chan,0x10| (col/4),underline); }
-uint16_t eia608_row_style_pramble (int row, eia608_style_t style, int chan, int underline) { return eia608_row_pramble (row,chan,style,underline); }
-
-int eia608_parse_preamble (uint16_t cc_data, int* row, int* col, eia608_style_t* style, int* chan, int* underline)
-{
-    (*row) = eia608_row_map[ ( (0x0700 & cc_data) >> 7) | ( (0x0020 & cc_data) >> 5)];
-    (*chan) = !! (0x0800 & cc_data);
-    (*underline) = 0x0001 & cc_data;
-
-    if (0x0010 & cc_data) {
-        (*style) = eia608_style_white;
-        (*col) = 4* ( (0x000E & cc_data) >> 1);
-    } else {
-        (*style) = (0x000E & cc_data) >> 1;
-        (*col) = 0;
-    }
-
-    return 1;
-}
-
-int eia608_parse_midrowchange (uint16_t cc_data, int* chan, eia608_style_t* style, int* underline)
-{
-    (*chan) = !! (0x0800 & cc_data);
-
-    if (0x1120 == (0x7770 & cc_data)) {
-        (*style) = (0x000E & cc_data) >> 1;
-        (*underline) = 0x0001 & cc_data;
-    }
-
-    return 1;
-}
-////////////////////////////////////////////////////////////////////////////////
-// control command
-eia608_control_t eia608_parse_control (uint16_t cc_data, int* cc)
-{
-    if (0x0200&cc_data) {
-        (*cc) = (cc_data&0x0800?0x01:0x00);
-        return (eia608_control_t) (0x177F & cc_data);
-    } else {
-        (*cc) = (cc_data&0x0800?0x01:0x00) | (cc_data&0x0100?0x02:0x00);
-        return (eia608_control_t) (0x167F & cc_data);
-    }
-}
-
-uint16_t eia608_control_command (eia608_control_t cmd, int cc)
-{
-    uint16_t c = (cc&0x01) ?0x0800:0x0000;
-    uint16_t f = (cc&0x02) ?0x0100:0x0000;
-
-    if (eia608_tab_offset_0 == (eia608_control_t) (cmd&0xFFC0)) {
-        return (eia608_control_t) eia608_parity (cmd|c);
-    } else {
-        return (eia608_control_t) eia608_parity (cmd|c|f);
-    }
-}
-////////////////////////////////////////////////////////////////////////////////
-// text
-static const char* utf8_from_index (int idx) { return (0<=idx && EIA608_CHAR_COUNT>idx) ? eia608_char_map[idx] : ""; }
-static int eia608_to_index (uint16_t cc_data, int* chan, int* c1, int* c2)
-{
-    (*c1) = (*c2) = -1; (*chan) = 0;
-    cc_data &= 0x7F7F; // strip off parity bits
-
-    // Handle Basic NA BEFORE we strip the channel bit
-    if (eia608_is_basicna (cc_data)) {
-        // we got first char, yes. But what about second char?
-        (*c1) = (cc_data>>8) - 0x20;
-        cc_data &= 0x00FF;
-
-        if (0x0020<=cc_data && 0x0080>cc_data) {
-            (*c2) = cc_data - 0x20;
-            return 2;
-        }
-
-        return 1;
-    }
-
-    // Check then strip second channel toggle
-    (*chan) = cc_data & 0x0800;
-    cc_data = cc_data & 0xF7FF;
-
-    if (eia608_is_specialna (cc_data)) {
-        // Special North American character
-        (*c1) = cc_data - 0x1130 + 0x60;
-        return 1;
-    }
-
-    if (0x1220<=cc_data && 0x1240>cc_data) {
-        // Extended Western European character set, Spanish/Miscellaneous/French
-        (*c1) = cc_data - 0x1220 + 0x70;
-        return 1;
-    }
-
-    if (0x1320<=cc_data && 0x1340>cc_data) {
-        // Extended Western European character set, Portuguese/German/Danish
-        (*c1) = cc_data - 0x1320 + 0x90;
-        return 1;
-    }
-
-    return 0;
-}
-
-
-int eia608_to_utf8 (uint16_t c, int* chan, char* str1,  char* str2)
-{
-    int c1, c2;
-    size_t size = eia608_to_index (c,chan,&c1,&c2);
-    strncpy (str1, utf8_from_index (c1),5);
-    strncpy (str2, utf8_from_index (c2),5);
-    return (int)size;
-}
-
-uint16_t eia608_from_basicna (uint16_t bna1, uint16_t bna2)
-{
-    if (! eia608_is_basicna (bna1) || ! eia608_is_basicna (bna2)) {
-        return 0;
-    }
-
-    return eia608_parity ( ( (0xFF00&bna1) >>0) | ( (0xFF00&bna2) >>8));
-}
-
-// prototype for re2c generated function
-uint16_t _eia608_from_utf8 (const utf8_char_t* s);
-uint16_t eia608_from_utf8_1 (const utf8_char_t* c, int chan)
-{
-    uint16_t cc_data = _eia608_from_utf8 (c);
-
-    if (0 == cc_data) {
-        return cc_data;
-    }
-
-    if (chan && ! eia608_is_basicna (cc_data)) {
-        cc_data |= 0x0800;
-    }
-
-    return eia608_parity (cc_data);
-}
-
-uint16_t eia608_from_utf8_2 (const utf8_char_t* c1, const utf8_char_t* c2)
-{
-    uint16_t cc1 = _eia608_from_utf8 (c1);
-    uint16_t cc2 = _eia608_from_utf8 (c2);
-    return eia608_from_basicna (cc1,cc2);
-}
-////////////////////////////////////////////////////////////////////////////////
-void eia608_dump (uint16_t cc_data)
-{
-    eia608_style_t style;
-    const char* text = 0;
-    char char1[5], char2[5];
-    char1[0] = char2[0] = 0;
-    int row, col, chan, underline;
-
-    if (!eia608_parity_varify (cc_data)) {
-        text = "parity failed";
-    } else if (0 == eia608_parity_strip (cc_data)) {
-        text = "pad";
-    } else if (eia608_is_basicna (cc_data)) {
-        text = "basicna";
-        eia608_to_utf8 (cc_data,&chan,&char1[0],&char2[0]);
-    } else if (eia608_is_specialna (cc_data)) {
-        text = "specialna";
-        eia608_to_utf8 (cc_data,&chan,&char1[0],&char2[0]);
-    } else if (eia608_is_westeu (cc_data)) {
-        text = "westeu";
-        eia608_to_utf8 (cc_data,&chan,&char1[0],&char2[0]);
-    } else if (eia608_is_xds (cc_data)) {
-        text = "xds";
-    } else if (eia608_is_midrowchange (cc_data)) {
-        text = "midrowchange";
-    } else if (eia608_is_norpak (cc_data)) {
-        text = "norpak";
-    } else if (eia608_is_preamble (cc_data)) {
-        text = "preamble";
-        eia608_parse_preamble (cc_data, &row, &col, &style, &chan, &underline);
-        fprintf (stderr,"preamble %d %d %d %d %d\n", row, col, style, chan, underline);
-
-    } else if (eia608_is_control (cc_data)) {
-        switch (eia608_parse_control (cc_data,&chan)) {
-
-        default: text = "unknown_control"; break;
-
-        case eia608_tab_offset_0: text = "eia608_tab_offset_0"; break;
-
-        case eia608_tab_offset_1: text = "eia608_tab_offset_1"; break;
-
-        case eia608_tab_offset_2:text = "eia608_tab_offset_2"; break;
-
-        case eia608_tab_offset_3: text = "eia608_tab_offset_3"; break;
-
-        case eia608_control_resume_caption_loading: text = "eia608_control_resume_caption_loading"; break;
-
-        case eia608_control_backspace: text = "eia608_control_backspace"; break;
-
-        case eia608_control_alarm_off: text = "eia608_control_alarm_off"; break;
-
-        case eia608_control_alarm_on: text = "eia608_control_alarm_on"; break;
-
-        case eia608_control_delete_to_end_of_row: text = "eia608_control_delete_to_end_of_row"; break;
-
-        case eia608_control_roll_up_2: text = "eia608_control_roll_up_2"; break;
-
-        case eia608_control_roll_up_3: text = "eia608_control_roll_up_3"; break;
-
-        case eia608_control_roll_up_4: text = "eia608_control_roll_up_4"; break;
-
-        case eia608_control_resume_direct_captioning: text = "eia608_control_resume_direct_captioning"; break;
-
-        case eia608_control_text_restart: text = "eia608_control_text_restart"; break;
-
-        case eia608_control_text_resume_text_display: text = "eia608_control_text_resume_text_display"; break;
-
-        case eia608_control_erase_display_memory: text = "eia608_control_erase_display_memory"; break;
-
-        case eia608_control_carriage_return: text = "eia608_control_carriage_return"; break;
-
-        case eia608_control_erase_non_displayed_memory:text = "eia608_control_erase_non_displayed_memory"; break;
-
-        case eia608_control_end_of_caption: text = "eia608_control_end_of_caption"; break;
-        }
-    } else {
-        text = "unhandled";
-    }
-
-    fprintf (stderr,"cc %04X (%04X) '%s' '%s' (%s)\n", cc_data, eia608_parity_strip (cc_data), char1, char2, text);
-}
-////////////////////////////////////////////////////////////////////////////////
-// below this line is re2c
-uint16_t _eia608_from_utf8 (const utf8_char_t* s)
-{
-    const unsigned char* YYMARKER; // needed by default rule
-    const unsigned char* YYCURSOR = (const unsigned char*) s;
-
-    if (0==s) { return 0x0000;}
-
-    
-{
-    unsigned char yych;
-    yych = *YYCURSOR;
-    if (yych <= '`') {
-        if (yych <= '*') {
-            if (yych <= '&') {
-                if (yych <= 0x00) goto yy2;
-                if (yych <= 0x1F) goto yy32;
-                goto yy26;
-            } else {
-                if (yych <= '\'') goto yy4;
-                if (yych <= ')') goto yy26;
-                goto yy6;
-            }
-        } else {
-            if (yych <= ']') {
-                if (yych == '\\') goto yy8;
-                goto yy26;
-            } else {
-                if (yych <= '^') goto yy10;
-                if (yych <= '_') goto yy12;
-                goto yy14;
-            }
-        }
-    } else {
-        if (yych <= 0x7F) {
-            if (yych <= '|') {
-                if (yych <= 'z') goto yy26;
-                if (yych <= '{') goto yy16;
-                goto yy18;
-            } else {
-                if (yych <= '}') goto yy20;
-                if (yych <= '~') goto yy22;
-                goto yy24;
-            }
-        } else {
-            if (yych <= 0xC3) {
-                if (yych <= 0xC1) goto yy32;
-                if (yych <= 0xC2) goto yy31;
-                goto yy28;
-            } else {
-                if (yych == 0xE2) goto yy30;
-                goto yy32;
-            }
-        }
-    }
-yy2:
-    ++YYCURSOR;
-    { /*NULL*/ return 0x0000; }
-yy4:
-    ++YYCURSOR;
-    { /*APOSTROPHE -> RIGHT_SINGLE_QUOTATION_MARK*/ return 0x1229; }
-yy6:
-    ++YYCURSOR;
-    { /*ASTERISK*/ return 0x1228; }
-yy8:
-    ++YYCURSOR;
-    { /*REVERSE_SOLIDUS*/ return 0x132B; }
-yy10:
-    ++YYCURSOR;
-    { /*CIRCUMFLEX_ACCENT*/ return 0x132C; }
-yy12:
-    ++YYCURSOR;
-    { /*LOW_LINE*/ return 0x132D; }
-yy14:
-    ++YYCURSOR;
-    { /*GRAVE_ACCENT, No equivalent return 0x0000; return 1;*/ /*LEFT_SINGLE_QUOTATION_MARK*/ return 0x1226; }
-yy16:
-    ++YYCURSOR;
-    { /*LEFT_CURLY_BRACKET*/ return 0x1329; }
-yy18:
-    ++YYCURSOR;
-    { /*VERTICAL_LINE*/ return 0x132E; }
-yy20:
-    ++YYCURSOR;
-    { /*RIGHT_CURLY_BRACKET*/ return 0x132A; }
-yy22:
-    ++YYCURSOR;
-    { /*TILDE*/ return 0x132F; }
-yy24:
-    ++YYCURSOR;
-    { /*DEL/BACKSPACE. Need to set bits 9 and 12! return 0x1421;*/ return 0x0000; }
-yy26:
-    ++YYCURSOR;
-    { /*ASCII range*/ return (s[0]<<8) &0xFF00; }
-yy28:
-    ++YYCURSOR;
-    switch ((yych = *YYCURSOR)) {
-    case 0x80:    goto yy157;
-    case 0x81:    goto yy169;
-    case 0x82:    goto yy155;
-    case 0x83:    goto yy129;
-    case 0x84:    goto yy111;
-    case 0x85:    goto yy101;
-    case 0x87:    goto yy153;
-    case 0x88:    goto yy151;
-    case 0x89:    goto yy167;
-    case 0x8A:    goto yy149;
-    case 0x8B:    goto yy147;
-    case 0x8C:    goto yy123;
-    case 0x8D:    goto yy125;
-    case 0x8E:    goto yy143;
-    case 0x8F:    goto yy141;
-    case 0x91:    goto yy187;
-    case 0x92:    goto yy119;
-    case 0x93:    goto yy165;
-    case 0x94:    goto yy137;
-    case 0x95:    goto yy115;
-    case 0x96:    goto yy107;
-    case 0x98:    goto yy97;
-    case 0x99:    goto yy135;
-    case 0x9A:    goto yy163;
-    case 0x9B:    goto yy131;
-    case 0x9C:    goto yy161;
-    case 0x9F:    goto yy103;
-    case 0xA0:    goto yy183;
-    case 0xA1:    goto yy201;
-    case 0xA2:    goto yy179;
-    case 0xA3:    goto yy127;
-    case 0xA4:    goto yy109;
-    case 0xA5:    goto yy99;
-    case 0xA7:    goto yy191;
-    case 0xA8:    goto yy181;
-    case 0xA9:    goto yy199;
-    case 0xAA:    goto yy177;
-    case 0xAB:    goto yy145;
-    case 0xAC:    goto yy121;
-    case 0xAD:    goto yy197;
-    case 0xAE:    goto yy175;
-    case 0xAF:    goto yy139;
-    case 0xB1:    goto yy185;
-    case 0xB2:    goto yy117;
-    case 0xB3:    goto yy195;
-    case 0xB4:    goto yy173;
-    case 0xB5:    goto yy113;
-    case 0xB6:    goto yy105;
-    case 0xB7:    goto yy189;
-    case 0xB8:    goto yy95;
-    case 0xB9:    goto yy133;
-    case 0xBA:    goto yy193;
-    case 0xBB:    goto yy171;
-    case 0xBC:    goto yy159;
-    default:    goto yy29;
-    }
-yy29:
-    { /*DEFAULT_RULE*/ return 0x0000; }
-yy30:
-    yych = *(YYMARKER = ++YYCURSOR);
-    switch (yych) {
-    case 0x80:    goto yy63;
-    case 0x84:    goto yy64;
-    case 0x94:    goto yy61;
-    case 0x96:    goto yy66;
-    case 0x99:    goto yy65;
-    default:    goto yy29;
-    }
-yy31:
-    yych = *++YYCURSOR;
-    switch (yych) {
-    case 0xA0:    goto yy47;
-    case 0xA1:    goto yy45;
-    case 0xA2:    goto yy51;
-    case 0xA3:    goto yy49;
-    case 0xA4:    goto yy35;
-    case 0xA5:    goto yy37;
-    case 0xA6:    goto yy33;
-    case 0xA9:    goto yy43;
-    case 0xAB:    goto yy41;
-    case 0xAE:    goto yy59;
-    case 0xB0:    goto yy57;
-    case 0xBB:    goto yy39;
-    case 0xBD:    goto yy55;
-    case 0xBF:    goto yy53;
-    default:    goto yy29;
-    }
-yy32:
-    yych = *++YYCURSOR;
-    goto yy29;
-yy33:
-    ++YYCURSOR;
-    { /*BROKEN_BAR*/ return 0x1337; }
-yy35:
-    ++YYCURSOR;
-    { /*CURRENCY_SIGN*/ return 0x1336; }
-yy37:
-    ++YYCURSOR;
-    { /*YEN_SIGN*/ return 0x1335; }
-yy39:
-    ++YYCURSOR;
-    { /*RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK*/ return 0x123F; }
-yy41:
-    ++YYCURSOR;
-    { /*LEFT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK*/ return 0x123E; }
-yy43:
-    ++YYCURSOR;
-    { /*COPYRIGHT_SIGN*/ return 0x122B; }
-yy45:
-    ++YYCURSOR;
-    { /*INVERTED_EXCLAMATION_MARK*/ return 0x1227; }
-yy47:
-    ++YYCURSOR;
-    { /*NO_BREAK_SPACE*/ return 0x1139; }
-yy49:
-    ++YYCURSOR;
-    { /*POUND_SIGN*/ return 0x1136; }
-yy51:
-    ++YYCURSOR;
-    { /*CENT_SIGN*/ return 0x1135; }
-yy53:
-    ++YYCURSOR;
-    { /*INVERTED_QUESTION_MARK*/ return 0x1133; }
-yy55:
-    ++YYCURSOR;
-    { /*VULGAR_FRACTION_ONE_HALF*/ return 0x1132; }
-yy57:
-    ++YYCURSOR;
-    { /*DEGREE_SIGN*/ return 0x1131; }
-yy59:
-    ++YYCURSOR;
-    { /*REGISTERED_SIGN*/ return 0x1130; }
-yy61:
-    yych = *++YYCURSOR;
-    switch (yych) {
-    case 0x8C:    goto yy87;
-    case 0x90:    goto yy89;
-    case 0x94:    goto yy91;
-    case 0x98:    goto yy93;
-    default:    goto yy62;
-    }
-yy62:
-    YYCURSOR = YYMARKER;
-    goto yy29;
-yy63:
-    yych = *++YYCURSOR;
-    switch (yych) {
-    case 0x94:    goto yy79;
-    case 0x98:    goto yy75;
-    case 0x99:    goto yy77;
-    case 0x9C:    goto yy83;
-    case 0x9D:    goto yy85;
-    case 0xA2:    goto yy81;
-    default:    goto yy62;
-    }
-yy64:
-    yych = *++YYCURSOR;
-    if (yych == 0xA0) goto yy73;
-    if (yych == 0xA2) goto yy71;
-    goto yy62;
-yy65:
-    yych = *++YYCURSOR;
-    if (yych == 0xAA) goto yy69;
-    goto yy62;
-yy66:
-    yych = *++YYCURSOR;
-    if (yych != 0x88) goto yy62;
-    ++YYCURSOR;
-    { /*FULL_BLOCK*/ return 0x7F00; }
-yy69:
-    ++YYCURSOR;
-    { /*EIGHTH_NOTE*/ return 0x1137; }
-yy71:
-    ++YYCURSOR;
-    { /*TRADE_MARK_SIGN*/ return 0x1134; }
-yy73:
-    ++YYCURSOR;
-    { /*SERVICE_MARK*/ return 0x122C; }
-yy75:
-    ++YYCURSOR;
-    { /*LEFT_SINGLE_QUOTATION_MARK*/ return 0x1226; }
-yy77:
-    ++YYCURSOR;
-    { /*RIGHT_SINGLE_QUOTATION_MARK -> APOSTROPHE*/ return 0x2700; }
-yy79:
-    ++YYCURSOR;
-    { /*EM_DASH*/ return 0x122A; }
-yy81:
-    ++YYCURSOR;
-    { /*BULLET*/ return 0x122D; }
-yy83:
-    ++YYCURSOR;
-    { /*LEFT_DOUBLE_QUOTATION_MARK*/ return 0x122E; }
-yy85:
-    ++YYCURSOR;
-    { /*RIGHT_DOUBLE_QUOTATION_MARK*/ return 0x122F; }
-yy87:
-    ++YYCURSOR;
-    { /*EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT*/ return 0x133C; }
-yy89:
-    ++YYCURSOR;
-    { /*EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT*/ return 0x133D; }
-yy91:
-    ++YYCURSOR;
-    { /*EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT*/ return 0x133E; }
-yy93:
-    ++YYCURSOR;
-    { /*EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT*/ return 0x133F; }
-yy95:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_O_WITH_STROKE*/ return 0x133B; }
-yy97:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_O_WITH_STROKE*/ return 0x133A; }
-yy99:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_A_WITH_RING_ABOVE*/ return 0x1339; }
-yy101:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE*/ return 0x1338; }
-yy103:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_SHARP_S*/ return 0x1334; }
-yy105:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_O_WITH_DIAERESIS*/ return 0x1333; }
-yy107:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS*/ return 0x1332; }
-yy109:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_A_WITH_DIAERESIS*/ return 0x1331; }
-yy111:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS*/ return 0x1330; }
-yy113:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_O_WITH_TILDE*/ return 0x1328; }
-yy115:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_O_WITH_TILDE*/ return 0x1327; }
-yy117:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_O_WITH_GRAVE*/ return 0x1326; }
-yy119:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_O_WITH_GRAVE*/ return 0x1325; }
-yy121:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_I_WITH_GRAVE*/ return 0x1324; }
-yy123:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_I_WITH_GRAVE*/ return 0x1323; }
-yy125:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_I_WITH_ACUTE*/ return 0x1322; }
-yy127:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_A_WITH_TILDE*/ return 0x1321; }
-yy129:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_A_WITH_TILDE*/ return 0x1320; }
-yy131:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_U_WITH_CIRCUMFLEX*/ return 0x123D; }
-yy133:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_U_WITH_GRAVE*/ return 0x123C; }
-yy135:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_U_WITH_GRAVE*/ return 0x123B; }
-yy137:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX*/ return 0x123A; }
-yy139:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_I_WITH_DIAERESIS*/ return 0x1239; }
-yy141:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS*/ return 0x1238; }
-yy143:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX*/ return 0x1237; }
-yy145:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_E_WITH_DIAERESIS*/ return 0x1236; }
-yy147:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_E_WITH_DIAERESIS*/ return 0x1235; }
-yy149:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX*/ return 0x1234; }
-yy151:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_E_WITH_GRAVE*/ return 0x1233; }
-yy153:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_C_WITH_CEDILLA*/ return 0x1232; }
-yy155:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX*/ return 0x1231; }
-yy157:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_A_WITH_GRAVE*/ return 0x1230; }
-yy159:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_U_WITH_DIAERESIS*/ return 0x1225; }
-yy161:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS*/ return 0x1224; }
-yy163:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_U_WITH_ACUTE*/ return 0x1223; }
-yy165:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_O_WITH_ACUTE*/ return 0x1222; }
-yy167:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_E_WITH_ACUTE*/ return 0x1221; }
-yy169:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_A_WITH_ACUTE*/ return 0x1220; }
-yy171:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_U_WITH_CIRCUMFLEX*/ return 0x113F; }
-yy173:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX*/ return 0x113E; }
-yy175:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_I_WITH_CIRCUMFLEX*/ return 0x113D; }
-yy177:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX*/ return 0x113C; }
-yy179:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX*/ return 0x113B; }
-yy181:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_E_WITH_GRAVE*/ return 0x113A; }
-yy183:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_A_WITH_GRAVE*/ return 0x1138; }
-yy185:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_N_WITH_TILDE*/ return 0x7E00; }
-yy187:
-    ++YYCURSOR;
-    { /*LATIN_CAPITAL_LETTER_N_WITH_TILDE*/ return 0x7D00; }
-yy189:
-    ++YYCURSOR;
-    { /*DIVISION_SIGN*/ return 0x7C00; }
-yy191:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_C_WITH_CEDILLA*/ return 0x7B00; }
-yy193:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_U_WITH_ACUTE*/ return 0x6000; }
-yy195:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_O_WITH_ACUTE*/ return 0x5F00; }
-yy197:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_I_WITH_ACUTE*/ return 0x5E00; }
-yy199:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_E_WITH_ACUTE*/ return 0x5C00; }
-yy201:
-    ++YYCURSOR;
-    { /*LATIN_SMALL_LETTER_A_WITH_ACUTE*/ return 0x2A00; }
-}
-
-}
diff --git a/deps/libcaption/src/eia608.c.re2c b/deps/libcaption/src/eia608.c.re2c
deleted file mode 100644
index 633aa9d..0000000
--- a/deps/libcaption/src/eia608.c.re2c
+++ /dev/null
@@ -1,421 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "eia608.h"
-#include <string.h>
-#include <stdio.h>
-
-////////////////////////////////////////////////////////////////////////////////
-int eia608_row_map[] = {10, -1, 0, 1, 2, 3, 11, 12, 13, 14, 4, 5, 6, 7, 8, 9};
-int eia608_reverse_row_map[] = {2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 0, 6, 7, 8, 9, 1};
-
-const char* eia608_mode_map[] = {
-    "clear",
-    "loading",
-    "popOn",
-    "paintOn",
-    "rollUp",
-};
-
-const char* eia608_style_map[] = {
-    "white",
-    "green",
-    "blue",
-    "cyan",
-    "red",
-    "yellow",
-    "magenta",
-    "italics",
-};
-
-static inline uint16_t eia608_row_pramble (int row, int chan, int x, int underline)
-{
-    row = eia608_reverse_row_map[row&0x0F];
-    return eia608_parity (0x1040 | (chan?0x0800:0x0000) | ( (row<<7) &0x0700) | ( (row<<5) &0x0020)) | ( (x<<1) &0x001E) | (underline?0x0001:0x0000);
-}
-
-uint16_t eia608_row_column_pramble (int row, int col, int chan, int underline) { return eia608_row_pramble (row,chan,0x10| (col/4),underline); }
-uint16_t eia608_row_style_pramble (int row, eia608_style_t style, int chan, int underline) { return eia608_row_pramble (row,chan,style,underline); }
-
-int eia608_parse_preamble (uint16_t cc_data, int* row, int* col, eia608_style_t* style, int* chan, int* underline)
-{
-    (*row) = eia608_row_map[ ( (0x0700 & cc_data) >> 7) | ( (0x0020 & cc_data) >> 5)];
-    (*chan) = !! (0x0800 & cc_data);
-    (*underline) = 0x0001 & cc_data;
-
-    if (0x0010 & cc_data) {
-        (*style) = eia608_style_white;
-        (*col) = 4* ( (0x000E & cc_data) >> 1);
-    } else {
-        (*style) = (0x000E & cc_data) >> 1;
-        (*col) = 0;
-    }
-
-    return 1;
-}
-
-int eia608_parse_midrowchange (uint16_t cc_data, int* chan, eia608_style_t* style, int* underline)
-{
-    (*chan) = !! (0x0800 & cc_data);
-
-    if (0x1120 == (0x7770 & cc_data)) {
-        (*style) = (0x000E & cc_data) >> 1;
-        (*underline) = 0x0001 & cc_data;
-    }
-
-    return 1;
-}
-////////////////////////////////////////////////////////////////////////////////
-// control command
-eia608_control_t eia608_parse_control (uint16_t cc_data, int* cc)
-{
-    if (0x0200&cc_data) {
-        (*cc) = (cc_data&0x0800?0x01:0x00);
-        return (eia608_control_t) (0x177F & cc_data);
-    } else {
-        (*cc) = (cc_data&0x0800?0x01:0x00) | (cc_data&0x0100?0x02:0x00);
-        return (eia608_control_t) (0x167F & cc_data);
-    }
-}
-
-uint16_t eia608_control_command (eia608_control_t cmd, int cc)
-{
-    uint16_t c = (cc&0x01) ?0x0800:0x0000;
-    uint16_t f = (cc&0x02) ?0x0100:0x0000;
-
-    if (eia608_tab_offset_0 == (eia608_control_t) (cmd&0xFFC0)) {
-        return (eia608_control_t) eia608_parity (cmd|c);
-    } else {
-        return (eia608_control_t) eia608_parity (cmd|c|f);
-    }
-}
-////////////////////////////////////////////////////////////////////////////////
-// text
-static const char* utf8_from_index (int idx) { return (0<=idx && EIA608_CHAR_COUNT>idx) ? eia608_char_map[idx] : ""; }
-static int eia608_to_index (uint16_t cc_data, int* chan, int* c1, int* c2)
-{
-    (*c1) = (*c2) = -1; (*chan) = 0;
-    cc_data &= 0x7F7F; // strip off parity bits
-
-    // Handle Basic NA BEFORE we strip the channel bit
-    if (eia608_is_basicna (cc_data)) {
-        // we got first char, yes. But what about second char?
-        (*c1) = (cc_data>>8) - 0x20;
-        cc_data &= 0x00FF;
-
-        if (0x0020<=cc_data && 0x0080>cc_data) {
-            (*c2) = cc_data - 0x20;
-            return 2;
-        }
-
-        return 1;
-    }
-
-    // Check then strip second channel toggle
-    (*chan) = cc_data & 0x0800;
-    cc_data = cc_data & 0xF7FF;
-
-    if (eia608_is_specialna (cc_data)) {
-        // Special North American character
-        (*c1) = cc_data - 0x1130 + 0x60;
-        return 1;
-    }
-
-    if (0x1220<=cc_data && 0x1240>cc_data) {
-        // Extended Western European character set, Spanish/Miscellaneous/French
-        (*c1) = cc_data - 0x1220 + 0x70;
-        return 1;
-    }
-
-    if (0x1320<=cc_data && 0x1340>cc_data) {
-        // Extended Western European character set, Portuguese/German/Danish
-        (*c1) = cc_data - 0x1320 + 0x90;
-        return 1;
-    }
-
-    return 0;
-}
-
-
-int eia608_to_utf8 (uint16_t c, int* chan, char* str1,  char* str2)
-{
-    int c1, c2;
-    int size = (int) eia608_to_index (c,chan,&c1,&c2);
-    strncpy (str1, utf8_from_index (c1),5);
-    strncpy (str2, utf8_from_index (c2),5);
-    return size;
-}
-
-uint16_t eia608_from_basicna (uint16_t bna1, uint16_t bna2)
-{
-    if (! eia608_is_basicna (bna1) || ! eia608_is_basicna (bna2)) {
-        return 0;
-    }
-
-    return eia608_parity ( ( (0xFF00&bna1) >>0) | ( (0xFF00&bna2) >>8));
-}
-
-// prototype for re2c generated function
-uint16_t _eia608_from_utf8 (const utf8_char_t* s);
-uint16_t eia608_from_utf8_1 (const utf8_char_t* c, int chan)
-{
-    uint16_t cc_data = _eia608_from_utf8 (c);
-
-    if (0 == cc_data) {
-        return cc_data;
-    }
-
-    if (chan && ! eia608_is_basicna (cc_data)) {
-        cc_data |= 0x0800;
-    }
-
-    return eia608_parity (cc_data);
-}
-
-uint16_t eia608_from_utf8_2 (const utf8_char_t* c1, const utf8_char_t* c2)
-{
-    uint16_t cc1 = _eia608_from_utf8 (c1);
-    uint16_t cc2 = _eia608_from_utf8 (c2);
-    return eia608_from_basicna (cc1,cc2);
-}
-////////////////////////////////////////////////////////////////////////////////
-void eia608_dump (uint16_t cc_data)
-{
-    eia608_style_t style;
-    const char* text = 0;
-    char char1[5], char2[5];
-    char1[0] = char2[0] = 0;
-    int row, col, chan, underline;
-
-    if (!eia608_parity_varify (cc_data)) {
-        text = "parity failed";
-    } else if (0 == eia608_parity_strip (cc_data)) {
-        text = "pad";
-    } else if (eia608_is_basicna (cc_data)) {
-        text = "basicna";
-        eia608_to_utf8 (cc_data,&chan,&char1[0],&char2[0]);
-    } else if (eia608_is_specialna (cc_data)) {
-        text = "specialna";
-        eia608_to_utf8 (cc_data,&chan,&char1[0],&char2[0]);
-    } else if (eia608_is_westeu (cc_data)) {
-        text = "westeu";
-        eia608_to_utf8 (cc_data,&chan,&char1[0],&char2[0]);
-    } else if (eia608_is_xds (cc_data)) {
-        text = "xds";
-    } else if (eia608_is_midrowchange (cc_data)) {
-        text = "midrowchange";
-    } else if (eia608_is_norpak (cc_data)) {
-        text = "norpak";
-    } else if (eia608_is_preamble (cc_data)) {
-        text = "preamble";
-        eia608_parse_preamble (cc_data, &row, &col, &style, &chan, &underline);
-        fprintf (stderr,"preamble %d %d %d %d %d\n", row, col, style, chan, underline);
-
-    } else if (eia608_is_control (cc_data)) {
-        switch (eia608_parse_control (cc_data,&chan)) {
-
-        default: text = "unknown_control"; break;
-
-        case eia608_tab_offset_0: text = "eia608_tab_offset_0"; break;
-
-        case eia608_tab_offset_1: text = "eia608_tab_offset_1"; break;
-
-        case eia608_tab_offset_2:text = "eia608_tab_offset_2"; break;
-
-        case eia608_tab_offset_3: text = "eia608_tab_offset_3"; break;
-
-        case eia608_control_resume_caption_loading: text = "eia608_control_resume_caption_loading"; break;
-
-        case eia608_control_backspace: text = "eia608_control_backspace"; break;
-
-        case eia608_control_alarm_off: text = "eia608_control_alarm_off"; break;
-
-        case eia608_control_alarm_on: text = "eia608_control_alarm_on"; break;
-
-        case eia608_control_delete_to_end_of_row: text = "eia608_control_delete_to_end_of_row"; break;
-
-        case eia608_control_roll_up_2: text = "eia608_control_roll_up_2"; break;
-
-        case eia608_control_roll_up_3: text = "eia608_control_roll_up_3"; break;
-
-        case eia608_control_roll_up_4: text = "eia608_control_roll_up_4"; break;
-
-        case eia608_control_resume_direct_captioning: text = "eia608_control_resume_direct_captioning"; break;
-
-        case eia608_control_text_restart: text = "eia608_control_text_restart"; break;
-
-        case eia608_control_text_resume_text_display: text = "eia608_control_text_resume_text_display"; break;
-
-        case eia608_control_erase_display_memory: text = "eia608_control_erase_display_memory"; break;
-
-        case eia608_control_carriage_return: text = "eia608_control_carriage_return"; break;
-
-        case eia608_control_erase_non_displayed_memory:text = "eia608_control_erase_non_displayed_memory"; break;
-
-        case eia608_control_end_of_caption: text = "eia608_control_end_of_caption"; break;
-        }
-    } else {
-        text = "unhandled";
-    }
-
-    fprintf (stderr,"cc %04X (%04X) '%s' '%s' (%s)\n", cc_data, eia608_parity_strip (cc_data), char1, char2, text);
-}
-////////////////////////////////////////////////////////////////////////////////
-// below this line is re2c
-uint16_t _eia608_from_utf8 (const utf8_char_t* s)
-{
-    const unsigned char* YYMARKER; // needed by default rule
-    const unsigned char* YYCURSOR = (const unsigned char*) s;
-
-    if (0==s) { return 0x0000;}
-
-    /*!re2c
-    re2c:yyfill:enable = 0;
-    re2c:indent:string = "    ";
-    re2c:define:YYCTYPE = "unsigned char";
-
-    /*Ascii Exceptions*/
-    "\x00" { /*NULL*/ return 0x0000; }
-    "\x27" { /*APOSTROPHE -> RIGHT_SINGLE_QUOTATION_MARK*/ return 0x1229; }
-    "\x2A" { /*ASTERISK*/ return 0x1228; }
-    "\x5C" { /*REVERSE_SOLIDUS*/ return 0x132B; }
-    "\x5E" { /*CIRCUMFLEX_ACCENT*/ return 0x132C; }
-    "\x5F" { /*LOW_LINE*/ return 0x132D; }
-    /*Lets Map this to a LEFT_SINGLE_QUOTATION_MARK, just so we have a cc_data for every printable ASCII value*/
-    "\x60" { /*GRAVE_ACCENT, No equivalent return 0x0000; return 1;*/ /*LEFT_SINGLE_QUOTATION_MARK*/ return 0x1226; }
-    "\x7B" { /*LEFT_CURLY_BRACKET*/ return 0x1329; }
-    "\x7C" { /*VERTICAL_LINE*/ return 0x132E; }
-    "\x7D" { /*RIGHT_CURLY_BRACKET*/ return 0x132A; }
-    "\x7E" { /*TILDE*/ return 0x132F; }
-    /*There is a controll equivilant. Havnt decided if we want to habcle that here, or not*/
-    "\x7F" { /*DEL/BACKSPACE. Need to set bits 9 and 12! return 0x1421;*/ return 0x0000; }
-
-    /* Rules are processed top to bottom. So All single byte chars MUST be above this line!*/
-    [\x20-\x7F] { /*ASCII range*/ return (s[0]<<8) &0xFF00; } /* Should we use yych instead of s[0]?*/
-
-    /*This is the second half of the ascii exceptions*/
-    "\xC3\xA1" { /*LATIN_SMALL_LETTER_A_WITH_ACUTE*/ return 0x2A00; }
-    "\xC3\xA9" { /*LATIN_SMALL_LETTER_E_WITH_ACUTE*/ return 0x5C00; }
-    "\xC3\xAD" { /*LATIN_SMALL_LETTER_I_WITH_ACUTE*/ return 0x5E00; }
-    "\xC3\xB3" { /*LATIN_SMALL_LETTER_O_WITH_ACUTE*/ return 0x5F00; }
-    "\xC3\xBA" { /*LATIN_SMALL_LETTER_U_WITH_ACUTE*/ return 0x6000; }
-    "\xC3\xA7" { /*LATIN_SMALL_LETTER_C_WITH_CEDILLA*/ return 0x7B00; }
-    "\xC3\xB7" { /*DIVISION_SIGN*/ return 0x7C00; }
-    "\xC3\x91" { /*LATIN_CAPITAL_LETTER_N_WITH_TILDE*/ return 0x7D00; }
-    "\xC3\xB1" { /*LATIN_SMALL_LETTER_N_WITH_TILDE*/ return 0x7E00; }
-    "\xE2\x96\x88" { /*FULL_BLOCK*/ return 0x7F00; }
-
-    /*Special North American character set*/
-    "\xC2\xAE" { /*REGISTERED_SIGN*/ return 0x1130; }
-    "\xC2\xB0" { /*DEGREE_SIGN*/ return 0x1131; }
-    "\xC2\xBD" { /*VULGAR_FRACTION_ONE_HALF*/ return 0x1132; }
-    "\xC2\xBF" { /*INVERTED_QUESTION_MARK*/ return 0x1133; }
-    "\xE2\x84\xA2" { /*TRADE_MARK_SIGN*/ return 0x1134; }
-    "\xC2\xA2" { /*CENT_SIGN*/ return 0x1135; }
-    "\xC2\xA3" { /*POUND_SIGN*/ return 0x1136; }
-    "\xE2\x99\xAA" { /*EIGHTH_NOTE*/ return 0x1137; }
-    "\xC3\xA0" { /*LATIN_SMALL_LETTER_A_WITH_GRAVE*/ return 0x1138; }
-    "\xC2\xA0" { /*NO_BREAK_SPACE*/ return 0x1139; }
-    "\xC3\xA8" { /*LATIN_SMALL_LETTER_E_WITH_GRAVE*/ return 0x113A; }
-    "\xC3\xA2" { /*LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX*/ return 0x113B; }
-    "\xC3\xAA" { /*LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX*/ return 0x113C; }
-    "\xC3\xAE" { /*LATIN_SMALL_LETTER_I_WITH_CIRCUMFLEX*/ return 0x113D; }
-    "\xC3\xB4" { /*LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX*/ return 0x113E; }
-    "\xC3\xBB" { /*LATIN_SMALL_LETTER_U_WITH_CIRCUMFLEX*/ return 0x113F; }
-
-    /*Extended Spanish/Miscellaneous*/
-    "\xC3\x81" { /*LATIN_CAPITAL_LETTER_A_WITH_ACUTE*/ return 0x1220; }
-    "\xC3\x89" { /*LATIN_CAPITAL_LETTER_E_WITH_ACUTE*/ return 0x1221; }
-    "\xC3\x93" { /*LATIN_CAPITAL_LETTER_O_WITH_ACUTE*/ return 0x1222; }
-    "\xC3\x9A" { /*LATIN_CAPITAL_LETTER_U_WITH_ACUTE*/ return 0x1223; }
-    "\xC3\x9C" { /*LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS*/ return 0x1224; }
-    "\xC3\xBC" { /*LATIN_SMALL_LETTER_U_WITH_DIAERESIS*/ return 0x1225; }
-    "\xE2\x80\x98" { /*LEFT_SINGLE_QUOTATION_MARK*/ return 0x1226; }
-    "\xC2\xA1" { /*INVERTED_EXCLAMATION_MARK*/ return 0x1227; }
-    /*ASTERISK handled in ASCII mapping*/
-    "\xE2\x80\x99" { /*RIGHT_SINGLE_QUOTATION_MARK -> APOSTROPHE*/ return 0x2700; }
-    "\xE2\x80\x94" { /*EM_DASH*/ return 0x122A; }
-    "\xC2\xA9" { /*COPYRIGHT_SIGN*/ return 0x122B; }
-    "\xE2\x84\xA0" { /*SERVICE_MARK*/ return 0x122C; }
-    "\xE2\x80\xA2" { /*BULLET*/ return 0x122D; }
-    "\xE2\x80\x9C" { /*LEFT_DOUBLE_QUOTATION_MARK*/ return 0x122E; }
-    "\xE2\x80\x9D" { /*RIGHT_DOUBLE_QUOTATION_MARK*/ return 0x122F; }
-
-    /*Extended French*/
-    "\xC3\x80" { /*LATIN_CAPITAL_LETTER_A_WITH_GRAVE*/ return 0x1230; }
-    "\xC3\x82" { /*LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX*/ return 0x1231; }
-    "\xC3\x87" { /*LATIN_CAPITAL_LETTER_C_WITH_CEDILLA*/ return 0x1232; }
-    "\xC3\x88" { /*LATIN_CAPITAL_LETTER_E_WITH_GRAVE*/ return 0x1233; }
-    "\xC3\x8A" { /*LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX*/ return 0x1234; }
-    "\xC3\x8B" { /*LATIN_CAPITAL_LETTER_E_WITH_DIAERESIS*/ return 0x1235; }
-    "\xC3\xAB" { /*LATIN_SMALL_LETTER_E_WITH_DIAERESIS*/ return 0x1236; }
-    "\xC3\x8E" { /*LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX*/ return 0x1237; }
-    "\xC3\x8F" { /*LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS*/ return 0x1238; }
-    "\xC3\xAF" { /*LATIN_SMALL_LETTER_I_WITH_DIAERESIS*/ return 0x1239; }
-    "\xC3\x94" { /*LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX*/ return 0x123A; }
-    "\xC3\x99" { /*LATIN_CAPITAL_LETTER_U_WITH_GRAVE*/ return 0x123B; }
-    "\xC3\xB9" { /*LATIN_SMALL_LETTER_U_WITH_GRAVE*/ return 0x123C; }
-    "\xC3\x9B" { /*LATIN_CAPITAL_LETTER_U_WITH_CIRCUMFLEX*/ return 0x123D; }
-    "\xC2\xAB" { /*LEFT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK*/ return 0x123E; }
-    "\xC2\xBB" { /*RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK*/ return 0x123F; }
-
-    /*Portuguese*/
-    "\xC3\x83" { /*LATIN_CAPITAL_LETTER_A_WITH_TILDE*/ return 0x1320; }
-    "\xC3\xA3" { /*LATIN_SMALL_LETTER_A_WITH_TILDE*/ return 0x1321; }
-    "\xC3\x8D" { /*LATIN_CAPITAL_LETTER_I_WITH_ACUTE*/ return 0x1322; }
-    "\xC3\x8C" { /*LATIN_CAPITAL_LETTER_I_WITH_GRAVE*/ return 0x1323; }
-    "\xC3\xAC" { /*LATIN_SMALL_LETTER_I_WITH_GRAVE*/ return 0x1324; }
-    "\xC3\x92" { /*LATIN_CAPITAL_LETTER_O_WITH_GRAVE*/ return 0x1325; }
-    "\xC3\xB2" { /*LATIN_SMALL_LETTER_O_WITH_GRAVE*/ return 0x1326; }
-    "\xC3\x95" { /*LATIN_CAPITAL_LETTER_O_WITH_TILDE*/ return 0x1327; }
-    "\xC3\xB5" { /*LATIN_SMALL_LETTER_O_WITH_TILDE*/ return 0x1328; }
-    /*LEFT_CURLY_BRACKET handled in ASCII mapping*/
-    /*RIGHT_CURLY_BRACKET handled in ASCII mapping*/
-    /*REVERSE_SOLIDUS handled in ASCII mapping*/
-    /*CIRCUMFLEX_ACCENT handled in ASCII mapping*/
-    /*LOW_LINE handled in ASCII mapping*/
-    /*VERTICAL_LINE handled in ASCII mapping*/
-    /*TILDE handled in ASCII mapping*/
-
-    /*German/Danish*/
-    "\xC3\x84" { /*LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS*/ return 0x1330; }
-    "\xC3\xA4" { /*LATIN_SMALL_LETTER_A_WITH_DIAERESIS*/ return 0x1331; }
-    "\xC3\x96" { /*LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS*/ return 0x1332; }
-    "\xC3\xB6" { /*LATIN_SMALL_LETTER_O_WITH_DIAERESIS*/ return 0x1333; }
-    "\xC3\x9F" { /*LATIN_SMALL_LETTER_SHARP_S*/ return 0x1334; }
-    "\xC2\xA5" { /*YEN_SIGN*/ return 0x1335; }
-    "\xC2\xA4" { /*CURRENCY_SIGN*/ return 0x1336; }
-    "\xC2\xA6" { /*BROKEN_BAR*/ return 0x1337; }
-    "\xC3\x85" { /*LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE*/ return 0x1338; }
-    "\xC3\xA5" { /*LATIN_SMALL_LETTER_A_WITH_RING_ABOVE*/ return 0x1339; }
-    "\xC3\x98" { /*LATIN_CAPITAL_LETTER_O_WITH_STROKE*/ return 0x133A; }
-    "\xC3\xB8" { /*LATIN_SMALL_LETTER_O_WITH_STROKE*/ return 0x133B; }
-    "\xE2\x94\x8C" { /*EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT*/ return 0x133C; }
-    "\xE2\x94\x90" { /*EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT*/ return 0x133D; }
-    "\xE2\x94\x94" { /*EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT*/ return 0x133E; }
-    "\xE2\x94\x98" { /*EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT*/ return 0x133F; }
-
-    /*Default rule*/
-    [^] { /*DEFAULT_RULE*/ return 0x0000; }
-    */
-}
diff --git a/deps/libcaption/src/eia608_charmap.c b/deps/libcaption/src/eia608_charmap.c
deleted file mode 100644
index 0c05652..0000000
--- a/deps/libcaption/src/eia608_charmap.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "eia608_charmap.h"
-// 0 - 95: Basic North American character set
-// 96 - 111: Special North American character
-// 112 - 127: Extended Western European character set : Extended Spanish/Miscellaneous
-// 128 - 143: Extended Western European character set : Extended French
-// 144 - 159: Extended Western European character set : Portuguese
-// 160 - 175: Extended Western European character set : German/Danish
-const char* eia608_char_map[] = {
-    EIA608_CHAR_SPACE, EIA608_CHAR_EXCLAMATION_MARK, EIA608_CHAR_QUOTATION_MARK, EIA608_CHAR_NUMBER_SIGN, EIA608_CHAR_DOLLAR_SIGN, EIA608_CHAR_PERCENT_SIGN, EIA608_CHAR_AMPERSAND, EIA608_CHAR_RIGHT_SINGLE_QUOTATION_MARK,
-    EIA608_CHAR_LEFT_PARENTHESIS, EIA608_CHAR_RIGHT_PARENTHESIS, EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_ACUTE, EIA608_CHAR_PLUS_SIGN, EIA608_CHAR_COMMA, EIA608_CHAR_HYPHEN_MINUS, EIA608_CHAR_FULL_STOP, EIA608_CHAR_SOLIDUS,
-    EIA608_CHAR_DIGIT_ZERO, EIA608_CHAR_DIGIT_ONE, EIA608_CHAR_DIGIT_TWO, EIA608_CHAR_DIGIT_THREE, EIA608_CHAR_DIGIT_FOUR, EIA608_CHAR_DIGIT_FIVE, EIA608_CHAR_DIGIT_SIX, EIA608_CHAR_DIGIT_SEVEN, EIA608_CHAR_DIGIT_EIGHT,
-    EIA608_CHAR_DIGIT_NINE, EIA608_CHAR_COLON, EIA608_CHAR_SEMICOLON, EIA608_CHAR_LESS_THAN_SIGN, EIA608_CHAR_EQUALS_SIGN, EIA608_CHAR_GREATER_THAN_SIGN, EIA608_CHAR_QUESTION_MARK, EIA608_CHAR_COMMERCIAL_AT,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_A, EIA608_CHAR_LATIN_CAPITAL_LETTER_B, EIA608_CHAR_LATIN_CAPITAL_LETTER_C, EIA608_CHAR_LATIN_CAPITAL_LETTER_D, EIA608_CHAR_LATIN_CAPITAL_LETTER_E, EIA608_CHAR_LATIN_CAPITAL_LETTER_F, EIA608_CHAR_LATIN_CAPITAL_LETTER_G, EIA608_CHAR_LATIN_CAPITAL_LETTER_H,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_I, EIA608_CHAR_LATIN_CAPITAL_LETTER_J, EIA608_CHAR_LATIN_CAPITAL_LETTER_K, EIA608_CHAR_LATIN_CAPITAL_LETTER_L, EIA608_CHAR_LATIN_CAPITAL_LETTER_M, EIA608_CHAR_LATIN_CAPITAL_LETTER_N, EIA608_CHAR_LATIN_CAPITAL_LETTER_O, EIA608_CHAR_LATIN_CAPITAL_LETTER_P,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_Q, EIA608_CHAR_LATIN_CAPITAL_LETTER_R, EIA608_CHAR_LATIN_CAPITAL_LETTER_S, EIA608_CHAR_LATIN_CAPITAL_LETTER_T, EIA608_CHAR_LATIN_CAPITAL_LETTER_U, EIA608_CHAR_LATIN_CAPITAL_LETTER_V, EIA608_CHAR_LATIN_CAPITAL_LETTER_W, EIA608_CHAR_LATIN_CAPITAL_LETTER_X,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_Y, EIA608_CHAR_LATIN_CAPITAL_LETTER_Z, EIA608_CHAR_LEFT_SQUARE_BRACKET, EIA608_CHAR_LATIN_SMALL_LETTER_E_WITH_ACUTE, EIA608_CHAR_RIGHT_SQUARE_BRACKET, EIA608_CHAR_LATIN_SMALL_LETTER_I_WITH_ACUTE, EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_ACUTE,
-    EIA608_CHAR_LATIN_SMALL_LETTER_U_WITH_ACUTE, EIA608_CHAR_LATIN_SMALL_LETTER_A, EIA608_CHAR_LATIN_SMALL_LETTER_B, EIA608_CHAR_LATIN_SMALL_LETTER_C, EIA608_CHAR_LATIN_SMALL_LETTER_D, EIA608_CHAR_LATIN_SMALL_LETTER_E, EIA608_CHAR_LATIN_SMALL_LETTER_F, EIA608_CHAR_LATIN_SMALL_LETTER_G, EIA608_CHAR_LATIN_SMALL_LETTER_H,
-    EIA608_CHAR_LATIN_SMALL_LETTER_I, EIA608_CHAR_LATIN_SMALL_LETTER_J, EIA608_CHAR_LATIN_SMALL_LETTER_K, EIA608_CHAR_LATIN_SMALL_LETTER_L, EIA608_CHAR_LATIN_SMALL_LETTER_M, EIA608_CHAR_LATIN_SMALL_LETTER_N, EIA608_CHAR_LATIN_SMALL_LETTER_O, EIA608_CHAR_LATIN_SMALL_LETTER_P,
-    EIA608_CHAR_LATIN_SMALL_LETTER_Q, EIA608_CHAR_LATIN_SMALL_LETTER_R, EIA608_CHAR_LATIN_SMALL_LETTER_S, EIA608_CHAR_LATIN_SMALL_LETTER_T, EIA608_CHAR_LATIN_SMALL_LETTER_U, EIA608_CHAR_LATIN_SMALL_LETTER_V, EIA608_CHAR_LATIN_SMALL_LETTER_W, EIA608_CHAR_LATIN_SMALL_LETTER_X,
-    EIA608_CHAR_LATIN_SMALL_LETTER_Y, EIA608_CHAR_LATIN_SMALL_LETTER_Z, EIA608_CHAR_LATIN_SMALL_LETTER_C_WITH_CEDILLA, EIA608_CHAR_DIVISION_SIGN, EIA608_CHAR_LATIN_CAPITAL_LETTER_N_WITH_TILDE, EIA608_CHAR_LATIN_SMALL_LETTER_N_WITH_TILDE, EIA608_CHAR_FULL_BLOCK,
-    EIA608_CHAR_REGISTERED_SIGN, EIA608_CHAR_DEGREE_SIGN, EIA608_CHAR_VULGAR_FRACTION_ONE_HALF, EIA608_CHAR_INVERTED_QUESTION_MARK, EIA608_CHAR_TRADE_MARK_SIGN, EIA608_CHAR_CENT_SIGN, EIA608_CHAR_POUND_SIGN, EIA608_CHAR_EIGHTH_NOTE,
-    EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_GRAVE, EIA608_CHAR_NO_BREAK_SPACE, EIA608_CHAR_LATIN_SMALL_LETTER_E_WITH_GRAVE, EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX, EIA608_CHAR_LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX, EIA608_CHAR_LATIN_SMALL_LETTER_I_WITH_CIRCUMFLEX, EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX, EIA608_CHAR_LATIN_SMALL_LETTER_U_WITH_CIRCUMFLEX,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_ACUTE, EIA608_CHAR_LATIN_CAPITAL_LETTER_E_WITH_ACUTE, EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_ACUTE, EIA608_CHAR_LATIN_CAPITAL_LETTER_U_WITH_ACUTE, EIA608_CHAR_LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS, EIA608_CHAR_LATIN_SMALL_LETTER_U_WITH_DIAERESIS, EIA608_CHAR_LEFT_SINGLE_QUOTATION_MARK, EIA608_CHAR_INVERTED_EXCLAMATION_MARK,
-    EIA608_CHAR_ASTERISK, EIA608_CHAR_APOSTROPHE, EIA608_CHAR_EM_DASH, EIA608_CHAR_COPYRIGHT_SIGN, EIA608_CHAR_SERVICE_MARK, EIA608_CHAR_BULLET, EIA608_CHAR_LEFT_DOUBLE_QUOTATION_MARK, EIA608_CHAR_RIGHT_DOUBLE_QUOTATION_MARK,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_GRAVE, EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX, EIA608_CHAR_LATIN_CAPITAL_LETTER_C_WITH_CEDILLA, EIA608_CHAR_LATIN_CAPITAL_LETTER_E_WITH_GRAVE, EIA608_CHAR_LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX, EIA608_CHAR_LATIN_CAPITAL_LETTER_E_WITH_DIAERESIS, EIA608_CHAR_LATIN_SMALL_LETTER_E_WITH_DIAERESIS, EIA608_CHAR_LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS, EIA608_CHAR_LATIN_SMALL_LETTER_I_WITH_DIAERESIS, EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX, EIA608_CHAR_LATIN_CAPITAL_LETTER_U_WITH_GRAVE, EIA608_CHAR_LATIN_SMALL_LETTER_U_WITH_GRAVE, EIA608_CHAR_LATIN_CAPITAL_LETTER_U_WITH_CIRCUMFLEX, EIA608_CHAR_LEFT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK, EIA608_CHAR_RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_TILDE, EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_TILDE, EIA608_CHAR_LATIN_CAPITAL_LETTER_I_WITH_ACUTE, EIA608_CHAR_LATIN_CAPITAL_LETTER_I_WITH_GRAVE, EIA608_CHAR_LATIN_SMALL_LETTER_I_WITH_GRAVE, EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_GRAVE, EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_GRAVE, EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_TILDE,
-    EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_TILDE, EIA608_CHAR_LEFT_CURLY_BRACKET, EIA608_CHAR_RIGHT_CURLY_BRACKET, EIA608_CHAR_REVERSE_SOLIDUS, EIA608_CHAR_CIRCUMFLEX_ACCENT, EIA608_CHAR_LOW_LINE, EIA608_CHAR_VERTICAL_LINE, EIA608_CHAR_TILDE,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS, EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_DIAERESIS, EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS, EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_DIAERESIS, EIA608_CHAR_LATIN_SMALL_LETTER_SHARP_S, EIA608_CHAR_YEN_SIGN, EIA608_CHAR_CURRENCY_SIGN, EIA608_CHAR_BROKEN_BAR,
-    EIA608_CHAR_LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE, EIA608_CHAR_LATIN_SMALL_LETTER_A_WITH_RING_ABOVE, EIA608_CHAR_LATIN_CAPITAL_LETTER_O_WITH_STROKE, EIA608_CHAR_LATIN_SMALL_LETTER_O_WITH_STROKE, EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT, EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT, EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT, EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT,
-};
diff --git a/deps/libcaption/src/scc.c b/deps/libcaption/src/scc.c
deleted file mode 100644
index 7b42487..0000000
--- a/deps/libcaption/src/scc.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "scc.h"
-#include "utf8.h"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#define FRAME_RATE (1000.0/30)
-#define SCCTIME2MS(HH,MM,SS,FF) (((HH*3600.0 + MM*60.0 + SS) * 1000.0) + ( FF * FRAME_RATE ))
-
-// 00:00:25:16  9420 9440 aeae ae79 ef75 2068 6176 e520 79ef 75f2 20f2 ef62 eff4 e9e3 732c 2061 6e64 2049 94fe 9723 ea75 73f4 20f7 616e f420 f4ef 2062 e520 61f7 e573 ef6d e520 e96e 2073 7061 e3e5 ae80 942c 8080 8080 942f
-
-int scc_to_608 (const char* line, double* pts, uint16_t* cc, int cc_max)
-{
-    int cc_count = 0, cc_data = 0, hh = 0, mm = 0, ss = 0, ff = 0;
-
-    // TODO if ';' use 29.79 fps, if ':' use 30 fls
-    if (4 == sscanf (line, "%2d:%2d:%2d%*1[:;]%2d", &hh, &mm, &ss, &ff)) {
-        (*pts) = SCCTIME2MS (hh,mm,ss,ff); // scc files start at one hour for some reason
-        line += 12;
-
-        while (1 == sscanf (line, "%04x ", &cc_data)) {
-            line += 5; cc[cc_count] = cc_data; ++cc_count;
-
-            if (cc_count >= cc_max) {
-                break;
-            }
-        }
-    }
-
-    return cc_count;
-}
diff --git a/deps/libcaption/src/srt.c b/deps/libcaption/src/srt.c
deleted file mode 100644
index badf5e4..0000000
--- a/deps/libcaption/src/srt.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-#include "srt.h"
-#include "utf8.h"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-
-
-srt_t* srt_new (const utf8_char_t* data, size_t size, double timestamp, srt_t* prev, srt_t** head)
-{
-    srt_t* srt = malloc (sizeof (srt_t)+size+1);
-    srt->next = 0;
-    srt->duration = 0;
-    srt->aloc = size;
-    srt->timestamp = timestamp;
-    utf8_char_t* dest = (utf8_char_t*) srt_data (srt);
-
-    if (prev) {
-        prev->next = srt;
-        prev->duration = timestamp - prev->timestamp;
-    }
-
-    if (head && 0 == (*head)) {
-        (*head) = srt;
-    }
-
-    if (data) {
-        memcpy (dest, data, size);
-    } else {
-        memset (dest, 0, size);
-    }
-
-    dest[size] = '\0';
-    return srt;
-}
-
-srt_t* srt_free_head (srt_t* head)
-{
-    srt_t* next = head->next;
-    free (head);
-    return next;
-}
-
-void srt_free (srt_t* srt)
-{
-    while (srt) {
-        srt = srt_free_head (srt);
-    }
-}
-
-#define SRTTIME2SECONDS(HH,MM,SS,MS) ((HH*3600.0) + (MM*60.0) + SS + (MS/1000.0))
-srt_t* srt_parse (const utf8_char_t* data, size_t size)
-{
-    int counter;
-    srt_t* head = 0, *prev = 0;
-    double str_pts = 0, end_pts = 0;
-    size_t line_length = 0, trimmed_length = 0;
-    int hh1, hh2, mm1, mm2, ss1, ss2, ms1, ms2;
-
-    for (;;) {
-        line_length = 0;
-
-        do {
-            data += line_length;
-            size -= line_length;
-            line_length = utf8_line_length (data);
-            trimmed_length = utf8_trimmed_length (data,line_length);
-            // Skip empty lines
-        } while (0 < line_length && 0 == trimmed_length);
-
-        // linelength cant be zero before EOF
-        if (0 == line_length) {
-            break;
-        }
-
-        counter = atoi (data);
-        // printf ("counter (%d): '%.*s'\n", line_length, (int) line_length, data);
-        data += line_length;
-        size -= line_length;
-
-        line_length = utf8_line_length (data);
-        // printf ("time (%d): '%.*s'\n", line_length, (int) line_length, data);
-
-        {
-            if (8 == sscanf (data, "%d:%2d:%2d%*1[,.]%3d --> %d:%2d:%2d%*1[,.]%3d", &hh1, &mm1, &ss1, &ms1, &hh2, &mm2, &ss2, &ms2)) {
-                str_pts = SRTTIME2SECONDS (hh1, mm1, ss1, ms1);
-                end_pts = SRTTIME2SECONDS (hh2, mm2, ss2, ms2);
-            }
-
-            data += line_length;
-            size -= line_length;
-        }
-
-        // Caption text starts here
-        const utf8_char_t* text = data;
-        size_t text_size = 0;
-        // printf ("time: '(%f --> %f)\n",srt.srt_time, srt.end_time);
-
-        do {
-            line_length = utf8_line_length (data);
-            trimmed_length = utf8_trimmed_length (data,line_length);
-            // printf ("cap (%d): '%.*s'\n", line_length, (int) trimmed_length, data);
-            data += line_length;
-            size -= line_length;
-            text_size += line_length;
-        } while (trimmed_length);
-
-        // should we trim here?
-        srt_t* srt = srt_new (text,text_size,str_pts,prev,&head);
-        srt->duration = end_pts - str_pts;
-        prev = srt;
-    }
-
-    return head;
-}
-
-int srt_to_caption_frame (srt_t* srt, caption_frame_t* frame)
-{
-    const char* data = srt_data (srt);
-    return caption_frame_from_text (frame,data);
-}
-
-srt_t* srt_from_caption_frame (caption_frame_t* frame, srt_t* prev, srt_t** head)
-{
-    // CRLF per row, plus an extra at the end
-    srt_t* srt = srt_new (0, 2+CAPTION_FRAME_TEXT_BYTES, frame->timestamp, prev, head);
-    utf8_char_t* data = srt_data (srt);
-
-    caption_frame_to_text (frame,data);
-    // srt requires an extra new line
-    strcat ( (char*) data,"\r\n");
-
-    return srt;
-}
-
-static inline void _crack_time (double tt, int* hh, int* mm, int* ss, int* ms)
-{
-    (*ms) = (int) ((int64_t) (tt * 1000.0) % 1000);
-    (*ss) = (int) ((int64_t) (tt) % 60);
-    (*mm) = (int) ((int64_t) (tt / (60.0)) % 60);
-    (*hh) = (int) ((int64_t) (tt / (60.0*60.0)));
-}
-
-static void _dump (srt_t* head, char type)
-{
-    int i;
-    srt_t* srt;
-
-    if ('v' == type) {
-        printf ("WEBVTT\r\n");
-    }
-
-    for (srt = head, i = 1; srt; srt=srt_next (srt), ++i) {
-        int hh1, hh2, mm1, mm2, ss1, ss2, ms1, ms2;
-        _crack_time (srt->timestamp, &hh1, &mm1, &ss1, &ms1);
-        _crack_time (srt->timestamp + srt->duration, &hh2, &mm2, &ss2, &ms2);
-
-        if ('s' == type) {
-            printf ("%02d\r\n%d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\r\n%s\r\n", i,
-                    hh1, mm1, ss1, ms1, hh2, mm2, ss2, ms2, srt_data (srt));
-        }
-
-        else if ('v' == type) {
-            printf ("%d:%02d:%02d.%03d --> %02d:%02d:%02d.%03d\r\n%s\r\n",
-                    hh1, mm1, ss1, ms1, hh2, mm2, ss2, ms2, srt_data (srt));
-        }
-    }
-}
-
-void srt_dump (srt_t* head) { _dump (head,'s'); }
-void vtt_dump (srt_t* head) { _dump (head,'v'); }
diff --git a/deps/libcaption/src/utf8.c b/deps/libcaption/src/utf8.c
deleted file mode 100644
index d237eb2..0000000
--- a/deps/libcaption/src/utf8.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-
-
-
-#include "utf8.h"
-#include <string.h>
-
-const utf8_char_t* utf8_char_next (const char* s)
-{
-    if (0x80 == (s[0]&0xC0)) { ++s; }
-
-    return s;
-}
-
-// returnes the length of the char in bytes
-size_t utf8_char_length (const utf8_char_t* c)
-{
-    // count null term as zero size
-    if (0x00 == c[0]) { return 0; }
-
-    if (0x00 == (c[0]&0x80)) { return 1; }
-
-    if (0xC0 == (c[0]&0xE0) && 0x80 == (c[1]&0xC0)) { return 2; }
-
-    if (0xE0 == (c[0]&0xF0) && 0x80 == (c[1]&0xC0) && 0x80 == (c[2]&0xC0)) { return 3; }
-
-    if (0xF0 == (c[0]&0xF8) && 0x80 == (c[1]&0xC0) && 0x80 == (c[2]&0xC0) && 0x80 == (c[3]&0xC0)) { return 4; }
-
-    return 0;
-}
-
-// returns length of the string in bytes
-// size is number of charcter to count (0 to count until NULL term)
-size_t utf8_string_length (const utf8_char_t* data, utf8_size_t size)
-{
-    size_t char_length, byts = 0;
-
-    if (0 == size) {
-        size = utf8_char_count (data,0);
-    }
-
-    for (; 0 < size ; --size) {
-        if (0 == (char_length = utf8_char_length (data))) {
-            break;
-        }
-
-        data += char_length;
-        byts += char_length;
-    }
-
-    return byts;
-}
-
-size_t utf8_char_copy (utf8_char_t* dst, const utf8_char_t* src)
-{
-    size_t bytes = utf8_char_length (src);
-
-    if (bytes&&dst) {
-        memcpy (dst,src,bytes);
-        dst[bytes] = '\0';
-    }
-
-    return bytes;
-}
-
-// returnes the number of utf8 charcters in a string given the number of bytes
-// to count until the a null terminator, pass 0 for size
-utf8_size_t utf8_char_count (const char* data, size_t size)
-{
-    size_t i, bytes = 0;
-    utf8_size_t count = 0;
-
-    if (0 == size) {
-        size = strlen (data);
-    }
-
-    for (i = 0 ; i < size ; ++count, i += bytes) {
-        if (0 == (bytes = utf8_char_length (&data[i]))) {
-            break;
-        }
-    }
-
-    return count;
-}
-
-// returnes the length of the line in bytes triming not printable charcters at the end
-size_t utf8_trimmed_length (const char* data, size_t size)
-{
-    for (; 0 < size && ' ' >= (uint8_t) data[size-1] ; --size) { }
-
-    return size;
-}
-
-// returns the length in bytes of the line including the new line charcter(s)
-// auto detects between windows(CRLF), unix(LF), mac(CR) and riscos (LFCR) line endings
-size_t utf8_line_length (const char* data)
-{
-    size_t len = 0;
-
-    for (len = 0; 0 != data[len]; ++len) {
-        if ('\r' == data[len]) {
-            if ('\n' == data[len+1]) {
-                return len + 2; // windows
-            } else {
-                return len + 1; // unix
-            }
-        } else if ('\n' == data[len]) {
-            if ('\r' == data[len+1]) {
-                return len + 2; // riscos
-            } else {
-                return len + 1; // macos
-            }
-        }
-    }
-
-    return len;
-}
-
-// returns number of chars to include before split
-utf8_size_t utf8_wrap_length (const utf8_char_t* data, utf8_size_t size)
-{
-    // Set split_at to size, so if a split point cna not be found, retuns the size passed in
-    size_t char_length, char_count, split_at = size;
-
-    for (char_count = 0 ; char_count <= size ; ++char_count) {
-        if (' ' >= (*data)) {
-            split_at = char_count;
-        }
-
-        char_length = utf8_char_length (data);
-        data += char_length;
-    }
-
-    return split_at;
-}
-
-int utf8_line_count (const utf8_char_t* data)
-{
-    size_t len = 0;
-    int count = 0;
-
-    do {
-        len = utf8_line_length (data);
-        data += len; ++count;
-    } while (0<len);
-
-    return count-1;
-}
diff --git a/deps/libcaption/src/xds.c b/deps/libcaption/src/xds.c
deleted file mode 100644
index 1250dac..0000000
--- a/deps/libcaption/src/xds.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/**********************************************************************************************/
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file  */
-/* except in compliance with the License. A copy of the License is located at                 */
-/*                                                                                            */
-/*     http://aws.amazon.com/apache2.0/                                                       */
-/*                                                                                            */
-/* or in the "license" file accompanying this file. This file is distributed on an "AS IS"    */
-/* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the    */
-/* License for the specific language governing permissions and limitations under the License. */
-/**********************************************************************************************/
-// http://www.theneitherworld.com/mcpoodle/SCC_TOOLS/DOCS/CC_XDS.HTML#PR
-#include "xds.h"
-#include "caption.h"
-#include <string.h>
-
-void xds_init (xds_t* xds)
-{
-    memset (xds,0,sizeof (xds_t));
-}
-
-int xds_decode (xds_t* xds, uint16_t cc)
-{
-    switch (xds->state) {
-    default:
-    case 0:
-        xds_init (xds);
-        xds->class = (cc&0x0F00) >>8;
-        xds->type = (cc&0x000F);
-        xds->state = 1;
-        return LIBCAPTION_OK;
-
-    case 1:
-        if (0x8F00 == (cc&0xFF00)) {
-            xds->checksum = (cc&0x007F);
-            xds->state = 0;
-            return LIBCAPTION_READY;
-        }
-
-        if (xds->size < 32) {
-            xds->content[xds->size+0] = (cc&0x7F00) >>8;
-            xds->content[xds->size+1] = (cc&0x007F);
-            xds->size += 2;
-            return LIBCAPTION_OK;
-        }
-    }
-
-    xds->state = 0;
-    return LIBCAPTION_ERROR;
-}
diff --git a/deps/libcaption/unit_tests/eia608_test.c b/deps/libcaption/unit_tests/eia608_test.c
deleted file mode 100644
index 9712107..0000000
--- a/deps/libcaption/unit_tests/eia608_test.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-
-#include "eia608.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-// all possible utf8 valies, including invalid ones
-void encode_utf8ish (int32_t in, char out[7])
-{
-    if (0 > in) {
-        out[0] = 0;
-        return;
-    }
-
-    // 0xxxxxxx, 7 bits
-    if (0x80 > in) {
-        out[0] = in;
-        out[1] = 0;
-        return;
-    }
-
-    // 110xxxxx   10xxxxxx, 11 bits
-    if (0x800 > in) {
-        out[0] = 0xC0 | ( (in >> (6*1)) & 0x1F);
-        out[1] = 0x80 | ( (in >> (6*0)) & 0x3F);
-        out[2] = 0;
-        return;
-    }
-
-    // 1110xxxx   10xxxxxx    10xxxxxx, 16 bits
-    if (0x10000 > in) {
-        out[0] = 0xE0 | ( (in >> (6*2)) & 0x0F);
-        out[1] = 0x80 | ( (in >> (6*1)) & 0x3F);
-        out[2] = 0x80 | ( (in >> (6*0)) & 0x3F);
-        out[3] = 0;
-        return;
-    }
-
-    // 11110xxx   10xxxxxx    10xxxxxx    10xxxxxx, 21 bits
-    if (0x200000 > in) {
-        out[0] = 0xF0 | ( (in >> (6*3)) & 0x07);
-        out[1] = 0x80 | ( (in >> (6*2)) & 0x3F);
-        out[2] = 0x80 | ( (in >> (6*1)) & 0x3F);
-        out[3] = 0x80 | ( (in >> (6*0)) & 0x3F);
-        out[4] = 0;
-        return;
-    }
-
-    // 111110xx   10xxxxxx    10xxxxxx    10xxxxxx    10xxxxxx, 26 bits
-    if (0x4000000 > in) {
-        out[0] = 0xF8 | ( (in >> (6*4)) & 0x03);
-        out[1] = 0x80 | ( (in >> (6*3)) & 0x3F);
-        out[2] = 0x80 | ( (in >> (6*2)) & 0x3F);
-        out[3] = 0x80 | ( (in >> (6*1)) & 0x3F);
-        out[4] = 0x80 | ( (in >> (6*0)) & 0x3F);
-        out[5] = 0;
-        return;
-    }
-
-    // 1111110x   10xxxxxx    10xxxxxx    10xxxxxx    10xxxxxx    10xxxxxx, 31 bits
-    if (0x80000000 > in) {
-        out[0] = 0xFC | ( (in >> (6*5)) & 0x01);
-        out[1] = 0x80 | ( (in >> (6*4)) & 0x3F);
-        out[2] = 0x80 | ( (in >> (6*3)) & 0x3F);
-        out[3] = 0x80 | ( (in >> (6*2)) & 0x3F);
-        out[4] = 0x80 | ( (in >> (6*1)) & 0x3F);
-        out[5] = 0x80 | ( (in >> (6*0)) & 0x3F);
-        out[6] = 0;
-        return;
-    }
-}
-
-void test_all_utf8()
-{
-    char s[7]; size_t size, count = 0; uint16_t code1, code2;
-
-    for (int i = 0 ; i < 0x80000000 ; ++i) {
-        encode_utf8ish (i, &s[0]);
-        code1 = eia608_from_utf8 ( (const char*) &s[0], 0, &size);
-
-        // code2 = eia608_from_utf8 ( (const char*) &s[0], 1, &size);
-        if (code1) {
-            ++count;
-            printf ("%d: string: '%s' code: %04X\n",count, &s[0],code1);
-        }
-    }
-
-    // Count must be 177
-    // 176 charcters, pile we have two mapping for left quote mark
-}
-
-#define BIN "%d%d%d%d%d%d%d%d %d%d%d%d%d%d%d%d"
-#define BIND(D) ((D)>>15)&0x01, ((D)>>14)&0x01,((D)>>13)&0x01,((D)>>12)&0x01,((D)>>11)&0x01,((D)>>10)&0x01,((D)>>9)&0x01,((D)>>8)&0x01,((D)>>7)&0x01,((D)>>6)&0x01,((D)>>5)&0x01,((D)>>4)&0x01,((D)>>3)&0x01,((D)>>2)&0x01,((D)>>1)&0x01,((D)>>0)&0x01
-
-
-void print_bin (int n)
-{
-    int mask = 0x80;
-
-    for (int mask = 0x80 ; mask ; mask >>= 1) {
-        printf ("%s", n & mask ? "1" : "0");
-    }
-
-    printf ("\n");
-}
-
-void void_test_all_possible_code_words()
-{
-    for (int i = 0 ; i <= 0x3FFF ; ++i) {
-        int16_t code = eia608_parity ( ( (i<<1) &0x7F00) | (i&0x7F));
-
-        int count =eia608_cc_data_is_extended_data_service (code)+
-                   eia608_cc_data_is_basic_north_american_character (code) +
-                   eia608_cc_data_is_special_north_american_character (code) +
-                   eia608_cc_data_is_extended_western_european_character (code) +
-                   eia608_cc_data_is_nonwestern_norpak_character (code) +
-                   eia608_cc_data_is_row_preamble (code) +
-                   eia608_cc_data_is_control_command (code);
-
-        if (1 < count) {
-            printf ("code 0x%04X matched >1\n",code&0x7F7F);
-        }
-
-        // if (0 == count) {
-        //     printf ("code 0x%04X not matched %d\n",eia608_strip_parity_bits (code), i);
-        // }
-    }
-}
-
-void print_charmap()
-{
-    for (int i = 0 ; i < EIA608_CHAR_COUNT ; ++i) {
-        printf ("%s", eia608_char_map[i]);
-    }
-
-    printf ("\n");
-}
-
-void dance()
-{
-    for (int i = 0 ; i < 100 ; ++i) {
-        const char* l = 0 == rand() % 2 ? EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT : EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT;
-        const char* r = 0 == rand() % 2 ? EIA608_CHAR_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT : EIA608_CHAR_BOX_DRAWINGS_LIGHT_UP_AND_LEFT;
-        printf ("%s %s%s%s%s%s%s%s %s ", EIA608_CHAR_EIGHTH_NOTE, l, EIA608_CHAR_LEFT_PARENTHESIS, EIA608_CHAR_EM_DASH, EIA608_CHAR_LOW_LINE, EIA608_CHAR_EM_DASH,
-                EIA608_CHAR_RIGHT_PARENTHESIS, r, EIA608_CHAR_EIGHTH_NOTE);
-    }
-
-}
-
-
-int main (int argc, const char** arg)
-{
-    // print_charmap();
-    // // return 0;
-    // srand (time (0));
-    // // test_all_utf8();
-    // // void_test_all_possible_code_words();
-    // // return 0;
-    // // print_charmap();
-    // dance();
-    // return 0;
-    for (int i = 0 ; i <= 0x3FFF ; ++i) {
-        uint16_t code1 = eia608_parity ( ( (i<<1) &0x7F00) | (i&0x7F));
-
-        switch (eia608_cc_data_type (code1)) {
-        default:
-        case EIA608_CC_DATA_UNKNOWN:
-            // printf ("Unknown code %04X\n",code);
-            break;
-
-        case EIA608_CC_DATA_CONTROL_COMMAND: {
-            int cc;
-            eia608_control_t cmd = eia608_parse_control (code1, &cc);
-            uint16_t code2 = eia608_control_command (cmd,cc);
-
-            if (code1 != code2) {
-                printf (BIN " != " BIN " (0x%04x != 0x%04x) cc: %d\n", BIND (code1), BIND (code2),code1,code2,cc);
-            }
-        } break;
-
-
-        case EIA608_CC_DATA_BASIC_NORTH_AMERICAN_CHARACTER: {
-            char char1[5], char2[5]; int chan; size_t size;
-
-            if (eia608_to_utf8 (code1, &chan, &char1[0], &char2[0])) {
-                uint16_t code2 = eia608_from_utf8_2 (&char1[0], &char2[0]);
-
-                // if the second char is invalid, mask it off, we will accept the first
-                if (0x80 < (code1 &0x007F) || 0x20 > (code1 &0x007F)) {
-                    code1 = (code1&0xFF00) |0x0080;
-                }
-
-                if (code1 == code2) {
-                    // printf ("%s " BIN " == " BIN " (0x%04x == 0x%04x)\n", &char1[0], BIND (code1), BIND (code2),code1,code2);
-                } else {
-                    printf ("%s %s " BIN " != " BIN " (0x%04x != 0x%04x)\n", &char1[0], &char2[0], BIND (code1), BIND (code2),code1,code2);
-                }
-            }
-
-        } break;
-
-        case EIA608_CC_DATA_SPECIAL_NORTH_AMERICAN_CHARACTER:
-        case EIA608_CC_DATA_EXTENDED_WESTERN_EUROPEAN_CHARACTER: {
-            char char1[5], char2[5]; int chan; size_t size;
-
-            if (eia608_to_utf8 (code1, &chan, &char1[0], &char2[0])) {
-                uint16_t code2 = eia608_from_utf8 (&char1[0], chan, &size);
-
-                if (code1 == code2) {
-                    // printf ("%s " BIN " == " BIN " (0x%04x == 0x%04x)\n", &char1[0], BIND (code1), BIND (code2),code1,code2);
-                } else {
-                    printf ("%s " BIN " != " BIN " (0x%04x != 0x%04x)\n", &char1[0], BIND (code1), BIND (code2),code1,code2);
-                }
-            }
-        } break;
-
-            // #define EIA608_CODE_ROW_PREAMBLE                        4
-            // #define EIA608_CODE_EXTENDED_DATA_SERVICE               5
-            // #define EIA608_CODE_CONTROL_COMMAND                     6
-        }
-    }
-
-    return 0;
-}
-
-
-
-
-//     for (uint16_t i  = 0 ; i < 0x4000; ++i) {
-//         int chan;
-//         char str[7];
-//         uint16_t code = ( (i<<1) &0x7F00) | (i & 0x007F);
-//
-//         if (eia608_to_utf8 (code,&chan,str)) {
-//             printf ("code: 0x%04X  str: '%s'\n", code,str);
-//         }
-//     }
-//
-//     // for(int i = 0 ; i < cie608_char_count ; ++i)
-//     // {
-//     //     cie608_char_map[i]
-//     //
-//     // }
-//
-//
-//     for (int i = 0 ; i < 128 ; ++i) {
-//         // print_bin( B7( i ) );
-//         // print_bin( eia608_parity_table[i] );
-//         printf ("%d  %d %d\n", i, 0x7F & eia608_parity_table[i], eia608_parity_table[i]);
-//         // if ( i != eia608_parity_table[i] )
-//         // {
-//         //   printf( "ERROR\n" );
-//         //
-//         // }
-//     }
-//
-// }
diff --git a/deps/libcaption/unit_tests/test_sei.c b/deps/libcaption/unit_tests/test_sei.c
deleted file mode 100644
index 0e321b3..0000000
--- a/deps/libcaption/unit_tests/test_sei.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/**********************************************************************************************/
-/* The MIT License                                                                            */
-/*                                                                                            */
-/* Copyright 2016-2016 Twitch Interactive, Inc. or its affiliates. All Rights Reserved.       */
-/*                                                                                            */
-/* Permission is hereby granted, free of charge, to any person obtaining a copy               */
-/* of this software and associated documentation files (the "Software"), to deal              */
-/* in the Software without restriction, including without limitation the rights               */
-/* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell                  */
-/* copies of the Software, and to permit persons to whom the Software is                      */
-/* furnished to do so, subject to the following conditions:                                   */
-/*                                                                                            */
-/* The above copyright notice and this permission notice shall be included in                 */
-/* all copies or substantial portions of the Software.                                        */
-/*                                                                                            */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR                 */
-/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                   */
-/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE                */
-/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                     */
-/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,              */
-/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN                  */
-/* THE SOFTWARE.                                                                              */
-/**********************************************************************************************/
-
-#include "avcsei.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-uint8_t sei1[] = { 0x06, 0x04, 0x68, 0xB5, 0x00, 0x31, 0x47, 0x41, 0x39, 0x34, 0x03, 0xDF, 0xFF, 0xFC, 0xEC, 0xE5,
-                   0xFC, 0xAE, 0x80, 0xFC, 0x94, 0x52, 0xFC, 0x97, 0xA1, 0xFC, 0x2A, 0x20, 0xFC, 0xDC, 0x20, 0xFC,
-                   0x5E, 0x20, 0xFC, 0xDF, 0x20, 0xFC, 0xE0, 0x20, 0xFC, 0x91, 0x38, 0xFC, 0x20, 0x80, 0xFC, 0x91,
-                   0xBA, 0xFC, 0x20, 0xE9, 0xFC, 0x13, 0xA4, 0xFC, 0x20, 0xEF, 0xFC, 0x13, 0x26, 0xFC, 0x20, 0x75,
-                   0xFC, 0x92, 0xBC, 0xFC, 0x94, 0xF2, 0xFC, 0x97, 0xA1, 0xFC, 0x61, 0x80, 0xFC, 0x13, 0x31, 0xFC,
-                   0x20, 0xE5, 0xFC, 0x92, 0xB6, 0xFC, 0x20, 0xE9, 0xFC, 0x92, 0xB9, 0xFC, 0x20, 0xEF, 0xFC, 0x13,
-                   0xB3, 0xFC, 0x20, 0x75, 0xFC, 0x92, 0x25, 0xFC, 0x20, 0x80, 0xFF, 0x80,
-                 };
-
-uint8_t sei2[] = { 0x06, 0x04, 0x35, 0xB5, 0x00, 0x31, 0x47, 0x41, 0x39, 0x34, 0x03, 0xCE, 0xFF, 0xFC, 0x94, 0x26,
-                   0xFC, 0x94, 0xAD, 0xFC, 0x94, 0xF2, 0xFC, 0x43, 0xC1, 0xFC, 0xD0, 0x54, 0xFC, 0x49, 0x4F, 0xFC,
-                   0xCE, 0x20, 0xFC, 0x4C, 0x49, 0xFC, 0xCE, 0x45, 0xFC, 0xD3, 0x20, 0xFC, 0x52, 0x4F, 0xFC, 0x4C,
-                   0x4C, 0xFC, 0x20, 0xD5, 0xFC, 0xD0, 0x80, 0xFF, 0x80,
-                 };
-
-
-uint8_t sei3[] = { 0x06,
-                   0x04, 0x68, 0xB5, 0x00, 0x31, 0x47, 0x41, 0x39, 0x34, 0x03, 0xDF, 0xFF, 0xFC, 0xEC, 0xE5, 0xFC,
-                   0xAE, 0x80, 0xFC, 0x94, 0x52, 0xFC, 0x97, 0xA1, 0x00, 0x00, 0x03, 0x00, 0xFC, 0xDC, 0x20, 0xFC,
-                   0x5E, 0x20, 0xFC, 0xDF, 0x20, 0xFC, 0xE0, 0x20, 0xFC, 0x91, 0x38, 0xFC, 0x20, 0x80, 0xFC, 0x91,
-                   0xBA, 0xFC, 0x20, 0xE9, 0xFC, 0x13, 0xA4, 0xFC, 0x20, 0xEF, 0xFC, 0x13, 0x26, 0xFC, 0x20, 0x75,
-                   0xFC, 0x92, 0xBC, 0xFC, 0x94, 0xF2, 0xFC, 0x97, 0xA1, 0xFC, 0x61, 0x80, 0xFC, 0x13, 0x31, 0xFC,
-                   0x20, 0xE5, 0xFC, 0x92, 0xB6, 0xFC, 0x20, 0xE9, 0xFC, 0x92, 0xB9, 0xFC, 0x20, 0xEF, 0xFC, 0x13,
-                   0xB3, 0xFC, 0x20, 0x75, 0xFC, 0x92, 0x25, 0xFC, 0x20, 0x80, 0xFF,
-
-                   0x04, 0x68, 0xB5, 0x00, 0x31, 0x47, 0x41, 0x39, 0x34, 0x03, 0xDF, 0xFF, 0xFC, 0xEC, 0xE5,
-                   0xFC, 0xAE, 0x80, 0xFC, 0x94, 0x52, 0xFC, 0x97, 0xA1, 0x00, 0x00, 0x03, 0x00, 0xFC, 0xDC, 0x20,
-                   0xFC, 0x5E, 0x20, 0xFC, 0xDF, 0x20, 0xFC, 0xE0, 0x20, 0xFC, 0x91, 0x38, 0xFC, 0x20, 0x80, 0xFC,
-                   0x91, 0xBA, 0xFC, 0x20, 0xE9, 0xFC, 0x13, 0xA4, 0xFC, 0x20, 0xEF, 0xFC, 0x13, 0x26, 0xFC, 0x20,
-                   0x75, 0xFC, 0x92, 0xBC, 0xFC, 0x94, 0xF2, 0xFC, 0x97, 0xA1, 0xFC, 0x61, 0x80, 0xFC, 0x13, 0x31,
-                   0xFC, 0x20, 0xE5, 0xFC, 0x92, 0xB6, 0xFC, 0x20, 0xE9, 0xFC, 0x92, 0xB9, 0xFC, 0x20, 0xEF, 0xFC,
-                   0x13, 0xB3, 0xFC, 0x20, 0x75, 0xFC, 0x92, 0x25, 0xFC, 0x20, 0x80, 0xFF,
-                   0x80,
-                 };
-
-
-// TODO make SEI with multiple messages
-// TODO make SEI with emupation prevention
-
-
-uint8_t* read_file (const char* file, size_t* size)
-{
-    FILE* f = fopen (file, "rb");
-
-    if (! f) {
-        return 0;
-    }
-
-    fseek (f,0,SEEK_END);
-    (*size) = ftell (f);
-    fseek (f,0,SEEK_SET);
-    uint8_t* data = (uint8_t*) malloc (*size);
-
-    for (int i = 0 ; i < (*size) ;) {
-        i += fread (&data[i], 1, *size, f);
-    }
-
-    fclose (f);
-    return data;
-}
-
-int test_emulation_byte()
-{
-    avcsei_t sei;
-    avcsei_init (&sei);
-    avcsei_parse (&sei,sei3,sizeof (sei3));
-    avcsei_dump (&sei);
-    avcsei_free (&sei);
-}
-
-
-int main (int argc, const char** argv)
-{
-    // test_emulation_byte();
-    // return 0;
-
-    size_t size;
-    avcsei_t sei;
-    cea708_t cea708;
-    eia608_screen_t screen;
-    char screen_buf[EIA608_SCREEN_DUMP_BUF_SIZE];
-    char json_buf[EIA608_SCREEN_JSON_BUF_SIZE];
-
-    // uint8_t* data =
-    for (int i = 1 ; i < argc ; ++i) {
-        avcsei_init (&sei);
-        eia608_screen_init (&screen);
-        uint8_t* data = read_file (argv[i],&size);
-        avcsei_parse (&sei,data,size);
-        free (data);
-
-        // avcsei_parse (&sei,sei1,sizeof (sei1));
-
-        for (avcsei_message_t* msg = avcsei_message_head (&sei) ; msg ; msg = avcsei_message_next (msg)) {
-            if (sei_type_user_data_registered_itu_t_t35 == avcsei_message_type (msg)) {
-                // avcsei_dump (&sei);
-                avcsei_decode_cea708 (msg,&cea708);
-                int count = cea708_cc_count (&cea708.user_data);
-
-                for (int i = 0 ; i < count ; ++i) {
-                    cea708_cc_type_t type; int valid;
-                    uint16_t cc_data = cea708_cc_data (&cea708.user_data, i, &valid, &type);
-
-                    if (valid && (cc_type_ntsc_cc_field_1 == type || cc_type_ntsc_cc_field_2 == type)) {
-                        eia608_screen_decode (&screen,cc_data);
-                    }
-                }
-
-                // eia608_screen_dump (&screen, &screen_buf[0]);
-                // printf ("screen:\n%s\n",&screen_buf[0]);
-
-                eia608_screen_json (&screen, &json_buf[0]);
-                printf ("json:\n%s\n",&json_buf[0]);
-
-            }
-        }
-
-        avcsei_free (&sei);
-    }
-}
diff --git a/deps/libcaption/unit_tests/tos.scc b/deps/libcaption/unit_tests/tos.scc
deleted file mode 100644
index 70ce99d..0000000
--- a/deps/libcaption/unit_tests/tos.scc
+++ /dev/null
@@ -1,154 +0,0 @@
-Scenarist_SCC V1.0
-
-00:00:22:10	9420 94f2 97a2 d9ef 75a7 f2e5 2061 20ea e5f2 6b2c 2054 68ef 6dae 942c 8080 8080 942f
-
-00:00:23:28	9420 947c 97a2 4cef ef6b 2043 e5ec e961 2c20 f7e5 2068 6176 e520 f4ef 20e6 efec ecef f720 ef75 f220 7061 7373 e9ef 6e73 3b80 942c 8080 8080 942f
-
-00:00:25:16	9420 9440 aeae ae79 ef75 2068 6176 e520 79ef 75f2 20f2 ef62 eff4 e9e3 732c 2061 6e64 2049 94fe 9723 ea75 73f4 20f7 616e f420 f4ef 2062 e520 61f7 e573 ef6d e520 e96e 2073 7061 e3e5 ae80 942c 8080 8080 942f
-
-00:00:29:09	9420 9440 97a1 5768 7920 64ef 6ea7 f420 79ef 7520 ea75 73f4 2061 646d e9f4 20f4 6861 f480 94fe 97a2 79ef 75a7 f2e5 20e6 f2e5 616b e564 20ef 75f4 2062 7920 6d79 20f2 ef62 eff4 2068 616e 64bf 942c 8080 8080 942f
-
-00:00:33:19	9420 94e0 49a7 6d20 6eef f420 e6f2 e561 6be5 6420 ef75 f420 6279 ad20 e9f4 a773 aeae ae80 942c 8080 8080 942f
-
-00:00:36:10	9420 94f2 9723 aeae ae61 ecf2 e967 68f4 a120 46e9 6ee5 a180 942c 8080 8080 942f
-
-00:00:36:29	9420 945e 9723 49a7 6d20 e6f2 e561 6be5 6420 ef75 f4a1 2049 2068 6176 e520 6ee9 6768 f46d 61f2 e573 94f2 f468 61f4 2049 a76d 2062 e5e9 6e67 20e3 6861 73e5 64ae aeae 942c 8080 8080 942f
-
-00:00:39:27	9420 947c 97a2 aeae ae62 7920 f468 e573 e520 67e9 616e f420 f2ef 62ef f4e9 e320 e3ec 61f7 7320 efe6 2064 e561 f468 aeae ae80 942c 8080 8080 942f
-
-00:00:40:29	9420 9452 97a2 a246 ef75 f2f4 7920 79e5 61f2 7320 ec61 f4e5 f2a2 94e0 97a2 5768 61f4 e576 e5f2 2c20 5468 ef6d ae20 57e5 a7f2 e520 64ef 6ee5 ae80 942c 8080 8080 942f
-
-00:00:49:02	9420 94fe 9723 52ef 62ef f4a7 7320 6de5 6def f279 2073 796e e3e5 6420 616e 6420 ecef e36b e564 a180 942c 8080 8080 942f
-
-00:01:00:08	9420 94f2 97a1 5468 e973 20e9 7320 70f2 e5f4 f479 20e6 f2e5 616b 79ae 942c 8080 8080 942f
-
-00:01:56:03	9420 94e0 97a2 d368 ef75 ec64 6ea7 f420 79ef 7520 62e5 2064 eff7 6e20 f468 e5f2 e5bf 942c 8080 8080 942f
-
-00:02:09:29	9420 94fe 97a2 4920 68e5 61f2 6420 79ef 7520 6775 7973 20f4 61ec 6be9 6e67 20ec 6173 f420 6ee9 6768 f4ae 942c 8080 8080 942f
-
-00:02:15:02	9420 94e0 97a2 49f4 a773 206e eff4 206d 7920 e661 75ec f42c 2079 ef75 206b 6eef f7ae 942c 8080 8080 942f
-
-00:03:10:08	9420 94f4 97a1 c1f2 e520 79ef 7520 f2e5 6164 79bf 942c 8080 8080 942f
-
-00:03:11:24	9420 947c 9723 4fe6 20e3 ef75 f273 e520 79ef 75a7 f2e5 20f2 e561 6479 2c20 79ef 75a7 f2e5 2061 20f2 efe3 6b73 f461 f2ae 942c 8080 8080 942f
-
-00:03:16:02	9420 94e0 9723 c8ef f7a7 7320 e9f4 20ec efef 6be9 6e67 2c20 c261 f2ec e579 bf80 942c 8080 8080 942f
-
-00:03:17:27	9420 94fe 97a2 57e5 2073 68ef 75ec 6420 6861 76e5 2061 62ef 75f4 20f4 e56e 206d e96e 75f4 e573 aeae ae80 942c 8080 8080 942f
-
-00:03:20:19	9420 94f2 97a2 57e5 ecec 20f4 6861 f4a7 7320 70e5 f2e6 e5e3 f4ae 942c 8080 8080 942f
-
-00:03:22:05	9420 9440 57e5 a7f2 e520 ef6e 20e9 6e20 ef6e e5a1 20c1 ecec 2073 7973 f4e5 6d73 2067 efa1 94f4 97a1 d9e5 6168 2079 ef75 2c20 67ef a180 942c 8080 8080 942f
-
-00:03:26:29	9420 94e0 97a1 c7ef a120 cdef 76e5 2079 ef75 f220 6173 73e5 73a1 20c7 ef20 67ef 2067 efa1 942c 8080 8080 942f
-
-00:03:32:03	9420 94f2 4920 ecef 76e5 20e9 f4a1 2043 ef6d e520 ef6e 2c20 67ef a180 942c 8080 8080 942f
-
-00:03:42:08	9420 94f4 97a2 5468 61f4 a773 206e e9e3 e5ae 942c 8080 8080 942f
-
-00:03:43:18	9420 94f2 ceef f468 e96e 6720 f4ef 20f7 eff2 f279 2061 62ef 75f4 ae80 942c 8080 8080 942f
-
-00:03:45:11	9420 9476 97a1 5468 ef6d ae80 942c 8080 8080 942f
-
-00:03:50:07	9420 94f4 97a1 5468 e5f2 e520 7368 e520 e973 ae80 942c 8080 8080 942f
-
-00:03:52:27	9420 9476 97a2 ceef f7ae 942c 8080 8080 942f
-
-00:03:54:06	9420 94f4 97a1 d9ef 7520 ecef 76e5 2068 e5f2 ae80 942c 8080 8080 942f
-
-00:03:56:03	9420 94f2 97a2 d368 e520 e973 2079 ef75 f220 7061 7373 e9ef 6ea1 942c 8080 8080 942f
-
-00:03:59:04	9420 94f2 9723 c2e5 20f4 e56e 64e5 f220 f4ef 2068 e5f2 ae80 942c 8080 8080 942f
-
-00:04:00:15	9420 94e0 9723 c2e5 2068 ef6e e573 f4a1 2045 68ad 2062 e520 f4e5 6e64 e5f2 ae80 942c 8080 8080 942f
-
-00:04:04:02	9420 94f2 52e5 6de9 6e64 2068 e5f2 20f7 6861 f420 ecef 76e5 20e9 73ae 942c 8080 8080 942f
-
-00:04:51:05	9420 94f4 aeae ae61 6e64 2c20 61e3 f4e9 ef6e a180 942c 8080 8080 942f
-
-00:04:55:12	9420 94e0 97a1 cde5 6def f279 20ef 76e5 f2f7 f2e9 f4e5 20e9 6e20 70f2 ef67 f2e5 7373 a180 942c 8080 8080 942f
-
-00:04:58:02	9420 94f2 97a2 d9ef 75a7 f2e5 2061 20ea e5f2 6b2c 2054 68ef 6da1 942c 8080 8080 942f
-
-00:05:01:17	9420 94f2 9723 4f68 70ad 20d3 eff2 f279 a120 d3ef f2f2 79ae 942c 8080 8080 942f
-
-00:05:15:05	9420 94f4 97a2 4cef ef6b 2043 e5ec e961 ae80 942c 8080 8080 942f
-
-00:05:16:26	9420 94e0 57e5 2068 6176 e520 f4ef 20e6 efec ecef f720 ef75 f220 7061 7373 e9ef 6e73 ae80 942c 8080 8080 942f
-
-00:05:19:28	9420 94e0 9723 d9ef 7520 6861 76e5 2079 ef75 f220 f2ef 62ef f4e9 e373 aeae ae80 942c 8080 8080 942f
-
-00:05:23:20	9420 947c 9723 aeae ae61 6e64 2049 20ea 7573 f420 f761 6ef4 20f4 ef20 62e5 2061 f7e5 73ef 6de5 20e9 6e20 7370 61e3 e5ae 942c 8080 8080 942f
-
-00:05:37:21	9420 94fe 4f6b 6179 2c20 f468 e579 a7f2 e520 e3ef 6de9 6e67 ae20 54f7 ef20 6de9 6e75 f4e5 7320 ece5 e6f4 a180 942c 8080 8080 942f
-
-00:05:42:01	9420 94f2 9723 d370 e5e5 6420 e9f4 2075 702c 2054 68ef 6da1 942c 8080 8080 942f
-
-00:05:44:04	9420 94f4 97a2 d6e9 7661 e3e9 7373 e96d efa1 942c 8080 8080 942f
-
-00:05:45:05	9420 945e 97a2 5768 7920 64ef 6ea7 f420 79ef 7520 ea75 73f4 2061 646d e9f4 20f4 6861 f420 79ef 75a7 f2e5 94e0 97a1 e6f2 e561 6be5 6420 ef75 f420 6279 206d 7920 f2ef 62ef f420 6861 6e64 bf80 942c 8080 8080 942f
-
-00:05:54:26	9420 94e0 97a2 4ce9 73f4 e56e 2043 e5ec e961 2c20 4920 f761 7320 79ef 756e 67ae aeae 942c 8080 8080 942f
-
-00:05:58:18	9420 94f4 97a1 aeae ae61 6e64 2061 2064 e9e3 6bae 942c 8080 8080 942f
-
-00:05:59:18	9420 9452 c275 f420 f468 61f4 a773 206e ef20 f2e5 6173 ef6e 20f4 ef80 94f2 9723 64e5 73f4 f2ef 7920 f468 e520 f7ef f2ec 64ae 942c 8080 8080 942f
-
-00:06:04:00	9420 94f2 97a2 5768 7920 64ef e573 2068 e520 64ef 20f4 68e9 73bf 942c 8080 8080 942f
-
-00:06:05:12	9420 94e0 9723 57e5 2061 ecf2 e561 6479 20f4 f2e9 e564 20f4 6861 f420 ef6e e5a1 942c 8080 8080 942f
-
-00:06:10:21	9420 9476 97a1 c162 eff2 f4a1 942c 8080 8080 942f
-
-00:06:12:07	9420 9476 97a2 4375 f4a1 942c 8080 8080 942f
-
-00:06:13:06	9420 9476 5768 ef61 6161 a180 942c 8080 8080 942f
-
-00:06:18:06	9420 9476 5768 ef61 6161 a180 942c 8080 8080 942f
-
-00:06:20:06	9420 9476 ceef efef efef a180 942c 8080 8080 942f
-
-00:06:21:29	9420 94f2 97a2 d9ef 7520 62f2 ef6b e520 6d79 2068 e561 f2f4 ae80 942c 8080 8080 942f
-
-00:06:25:06	9420 9476 4920 6b6e eff7 ae80 942c 8080 8080 942f
-
-00:06:25:28	9420 94f2 d9ef 7520 e6ef f267 eff4 206d e520 ef6e 20e5 61f2 f468 ae80 942c 8080 8080 942f
-
-00:06:28:06	9420 9476 4920 6b6e eff7 ae80 942c 8080 8080 942f
-
-00:06:29:13	9420 94f2 4920 7368 ef75 ec64 20ea 7573 f420 e3f2 7573 6820 79ef 75ae 942c 8080 8080 942f
-
-00:06:35:07	9420 9476 97a2 49a7 6dad 942c 8080 8080 942f
-
-00:06:46:03	9420 94f4 9723 49a7 6d20 73ef f2f2 79ae 942c 8080 8080 942f
-
-00:06:49:02	9420 94f4 97a2 c7ef ef64 2061 64ad ece9 62ae 942c 8080 8080 942f
-
-00:06:58:01	9420 94f4 97a1 ceef f420 6d79 20e6 6175 ecf4 a180 942c 8080 8080 942f
-
-00:07:01:03	9420 94f4 9723 5468 e973 20f4 e96d e5ae 942c 8080 8080 942f
-
-00:07:07:01	9420 94f4 97a1 5175 e9e5 f420 ef6e 2073 e5f4 a180 942c 8080 8080 942f
-
-00:07:08:29	9420 94f2 9723 57e5 a7f2 e520 ef75 f420 efe6 20f4 e96d e5a1 942c 8080 8080 942f
-
-00:08:12:03	9420 9476 43ef 6de5 20ef 6ea1 942c 8080 8080 942f
-
-00:08:20:29	9420 94f4 97a2 52c1 c1c1 c1c1 c1c1 c1c8 a180 942c 8080 8080 942f
-
-00:08:22:24	9420 94f2 97a1 cde5 6def f279 20ef 76e5 f2f7 f2e9 f4e5 2c20 b9b0 25ae 942c 8080 8080 942f
-
-00:08:24:22	9420 94e0 9723 4361 70f4 61e9 6ea1 2057 e520 6861 76e5 20f4 ef20 6162 eff2 f4a1 942c 8080 8080 942f
-
-00:08:36:20	9420 94e0 97a1 5468 e520 f7ef f2ec 64a7 7320 e368 616e 67e5 642c 2043 e5ec e961 aeae ae80 942c 8080 8080 942f
-
-00:08:52:24	9420 94f2 97a2 aeae ae6d 6179 62e5 20f7 e520 e361 6e20 f4ef efae 942c 8080 8080 942f
-
-00:08:56:21	9420 94e0 9723 cde5 6def f279 20ef 76e5 f2f7 f2e9 f4e5 20e3 ef6d 70ec e5f4 e5a1 942c 8080 8080 942f
-
-00:09:17:29	9420 94f4 9723 d9ef 7520 6b6e eff7 ae80 942c 8080 8080 942f
-
-00:09:20:13	9420 947c 9723 5468 e5f2 e5a7 7320 6120 ece5 7373 ef6e 20f4 ef20 62e5 20ec e561 f26e e564 20e6 f2ef 6d20 f468 e973 ae80 942c 8080 8080 942f
-
-00:09:24:24	9420 94f2 97a2 43ef 75ec 64a7 6120 67ef 6ee5 20f7 eff2 73e5 ae80 942c 8080 8080 942f
-

-- 
obs-studio packaging



More information about the pkg-multimedia-commits mailing list