From 0fea3d4ca57187f271d7580ff16f32b7ab4657df Mon Sep 17 00:00:00 2001
From: Dimitri van Heesch <dimitri@stack.nl>
Date: Thu, 7 Aug 2014 20:58:49 +0200
Subject: Introduced template directory for template and resource files and
 resource compiler & manager

---
 .gitignore                             |    3 +
 Makefile.in                            |    2 +-
 jquery/Makefile                        |   25 +-
 jquery/README                          |    5 +-
 jquery/split_jquery.pl                 |   25 -
 qtools/qcstring.h                      |    8 +-
 src/bib2xhtml.pl                       |  319 ---
 src/cite.cpp                           |   31 +-
 src/compound.xsd                       |  844 -------
 src/context.cpp                        |   13 +-
 src/doxygen.bst                        | 1388 ------------
 src/doxygen.cpp                        |    6 +-
 src/doxygen.css                        | 1440 ------------
 src/doxygen.sty                        |  478 ----
 src/dynsections.js                     |   97 -
 src/extsearch.js                       |  129 --
 src/footer.html                        |   20 -
 src/ftvhelp.cpp                        |  578 +----
 src/header.html                        |   54 -
 src/htmlgen.cpp                        |  995 +--------
 src/index.xsd                          |   66 -
 src/jquery_fx.js                       |    1 -
 src/jquery_p1.js                       |   18 -
 src/jquery_p2.js                       |   10 -
 src/jquery_p3.js                       |    3 -
 src/jquery_pt.js                       |    8 -
 src/jquery_ui.js                       |   40 -
 src/lang_cfg.py                        |    0
 src/latexgen.cpp                       |   27 +-
 src/layout_default.h                   |  194 --
 src/libdoxygen.pro.in                  |    5 +-
 src/libdoxygen.t.in                    |   92 +-
 src/navtree.css                        |  143 --
 src/navtree.js                         |  527 -----
 src/res2cc_cmd.py                      |  102 +
 src/resize.js                          |   97 -
 src/resize_js.h                        |   93 -
 src/resourcemgr.cpp                    |  183 ++
 src/resourcemgr.h                      |   63 +
 src/search.css                         |  271 ---
 src/search.js                          |  776 -------
 src/search_functions.php               |  366 ----
 src/search_opensearch.php              |  127 --
 src/searchindex.cpp                    |   35 +-
 src/svgpan.js                          |  319 ---
 src/template.cpp                       |  192 +-
 src/xmlgen.cpp                         |   86 +-
 templates/html/arrowdown.luma          |   49 +
 templates/html/arrowright.luma         |   49 +
 templates/html/bc_s.luma               |   66 +
 templates/html/bdwn.luma               |   21 +
 templates/html/bib2xhtml.pl            |  319 +++
 templates/html/close.png               |  Bin 0 -> 273 bytes
 templates/html/closed.luma             |   23 +
 templates/html/doc.luma                |   50 +
 templates/html/doxygen.bst             | 1388 ++++++++++++
 templates/html/doxygen.css             | 1440 ++++++++++++
 templates/html/doxygen.luma            |   68 +
 templates/html/dynsections.js          |   97 +
 templates/html/extsearch.js            |  129 ++
 templates/html/folderclosed.luma       |   49 +
 templates/html/folderopen.luma         |   49 +
 templates/html/footer.html             |   20 +
 templates/html/header.html             |   54 +
 templates/html/htmlallmembers.tpl      |   22 +
 templates/html/htmlannotated.tpl       |   15 +
 templates/html/htmlbase.tpl            |  216 ++
 templates/html/htmlclass.tpl           |  452 ++++
 templates/html/htmlclasses.tpl         |   21 +
 templates/html/htmlclmembers.tpl       |   20 +
 templates/html/htmlclmembersindex.tpl  |   26 +
 templates/html/htmldeclcomp.tpl        |   32 +
 templates/html/htmldir.tpl             |   78 +
 templates/html/htmldirtree.tpl         |   46 +
 templates/html/htmldyncontents.tpl     |    7 +
 templates/html/htmldynheader.tpl       |    7 +
 templates/html/htmlfile.tpl            |  256 +++
 templates/html/htmlfiles.tpl           |   15 +
 templates/html/htmlflmembers.tpl       |   20 +
 templates/html/htmlinclude.tpl         |   27 +
 templates/html/htmlindexpages.tpl      |   19 +
 templates/html/htmljsnavindex.tpl      |    7 +
 templates/html/htmljsnavtree.tpl       |   20 +
 templates/html/htmllayout.tpl          |  232 ++
 templates/html/htmlmemberindex.tpl     |   37 +
 templates/html/htmlmembersindex.tpl    |   81 +
 templates/html/htmlmembertabs.tpl      |   48 +
 templates/html/htmlmemdecl.tpl         |  214 ++
 templates/html/htmlmemdecls.tpl        |   38 +
 templates/html/htmlmemdef.tpl          |  284 +++
 templates/html/htmlmeminherit.tpl      |   20 +
 templates/html/htmlmemlist.tpl         |   15 +
 templates/html/htmlmemsummary.tpl      |    7 +
 templates/html/htmlmodule.tpl          |  310 +++
 templates/html/htmlmodules.tpl         |   15 +
 templates/html/htmlnamespace.tpl       |  206 ++
 templates/html/htmlnamespaces.tpl      |   15 +
 templates/html/htmlnavpath.tpl         |   14 +
 templates/html/htmlnavtree.tpl         |   22 +
 templates/html/htmlnsmembers.tpl       |   20 +
 templates/html/htmlnsmembersindex.tpl  |   26 +
 templates/html/htmlobjlink.tpl         |    6 +
 templates/html/htmlpage.tpl            |   14 +
 templates/html/htmlpages.tpl           |   15 +
 templates/html/htmlsource.tpl          |   37 +
 templates/html/htmltabs.tpl            |   92 +
 templates/html/htmltypeconstraints.tpl |   13 +
 templates/html/jquery.js               |   68 +
 templates/html/mag.png                 |  Bin 0 -> 524 bytes
 templates/html/mag_sel.png             |  Bin 0 -> 563 bytes
 templates/html/nav_f.lum               |   11 +
 templates/html/nav_g.png               |  Bin 0 -> 95 bytes
 templates/html/nav_h.lum               |    6 +
 templates/html/navtree.css             |  143 ++
 templates/html/navtree.js              |  523 +++++
 templates/html/open.luma               |   23 +
 templates/html/resize.js               |   97 +
 templates/html/search.css              |  271 +++
 templates/html/search.js               |  791 +++++++
 templates/html/search_functions.php    |  366 ++++
 templates/html/search_l.png            |  Bin 0 -> 604 bytes
 templates/html/search_m.png            |  Bin 0 -> 158 bytes
 templates/html/search_noidx.css        |  271 +++
 templates/html/search_opensearch.php   |  127 ++
 templates/html/search_r.png            |  Bin 0 -> 612 bytes
 templates/html/splitbar.lum            | 1028 +++++++++
 templates/html/svgpan.js               |  319 +++
 templates/html/sync_off.luma           |   54 +
 templates/html/sync_on.luma            |   54 +
 templates/html/tab_a.lum               |    8 +
 templates/html/tab_b.lum               |    8 +
 templates/html/tab_h.lum               |    8 +
 templates/html/tab_s.lum               |    8 +
 templates/html/tabs.css                |   60 +
 templates/latex/doxygen.sty            |  478 ++++
 templates/xml/compound.xsd             |  844 +++++++
 templates/xml/index.xsd                |   66 +
 winbuild/Doxygen.vcproj                | 3763 ++++++++++++++++++++++++--------
 winbuild/GenResources.rules            |   19 +
 139 files changed, 16177 insertions(+), 10499 deletions(-)
 delete mode 100644 jquery/split_jquery.pl
 delete mode 100755 src/bib2xhtml.pl
 delete mode 100644 src/compound.xsd
 delete mode 100644 src/doxygen.bst
 delete mode 100644 src/doxygen.css
 delete mode 100644 src/doxygen.sty
 delete mode 100644 src/dynsections.js
 delete mode 100644 src/extsearch.js
 delete mode 100644 src/footer.html
 delete mode 100644 src/header.html
 delete mode 100644 src/index.xsd
 delete mode 100644 src/jquery_fx.js
 delete mode 100644 src/jquery_p1.js
 delete mode 100644 src/jquery_p2.js
 delete mode 100644 src/jquery_p3.js
 delete mode 100644 src/jquery_pt.js
 delete mode 100644 src/jquery_ui.js
 mode change 100644 => 100755 src/lang_cfg.py
 delete mode 100644 src/layout_default.h
 delete mode 100644 src/navtree.css
 delete mode 100644 src/navtree.js
 create mode 100755 src/res2cc_cmd.py
 delete mode 100644 src/resize.js
 delete mode 100644 src/resize_js.h
 create mode 100644 src/resourcemgr.cpp
 create mode 100644 src/resourcemgr.h
 delete mode 100644 src/search.css
 delete mode 100644 src/search.js
 delete mode 100644 src/search_functions.php
 delete mode 100644 src/search_opensearch.php
 delete mode 100644 src/svgpan.js
 create mode 100644 templates/html/arrowdown.luma
 create mode 100644 templates/html/arrowright.luma
 create mode 100644 templates/html/bc_s.luma
 create mode 100644 templates/html/bdwn.luma
 create mode 100755 templates/html/bib2xhtml.pl
 create mode 100644 templates/html/close.png
 create mode 100644 templates/html/closed.luma
 create mode 100644 templates/html/doc.luma
 create mode 100644 templates/html/doxygen.bst
 create mode 100644 templates/html/doxygen.css
 create mode 100644 templates/html/doxygen.luma
 create mode 100644 templates/html/dynsections.js
 create mode 100644 templates/html/extsearch.js
 create mode 100644 templates/html/folderclosed.luma
 create mode 100644 templates/html/folderopen.luma
 create mode 100644 templates/html/footer.html
 create mode 100644 templates/html/header.html
 create mode 100644 templates/html/htmlallmembers.tpl
 create mode 100644 templates/html/htmlannotated.tpl
 create mode 100644 templates/html/htmlbase.tpl
 create mode 100644 templates/html/htmlclass.tpl
 create mode 100644 templates/html/htmlclasses.tpl
 create mode 100644 templates/html/htmlclmembers.tpl
 create mode 100644 templates/html/htmlclmembersindex.tpl
 create mode 100644 templates/html/htmldeclcomp.tpl
 create mode 100644 templates/html/htmldir.tpl
 create mode 100644 templates/html/htmldirtree.tpl
 create mode 100644 templates/html/htmldyncontents.tpl
 create mode 100644 templates/html/htmldynheader.tpl
 create mode 100644 templates/html/htmlfile.tpl
 create mode 100644 templates/html/htmlfiles.tpl
 create mode 100644 templates/html/htmlflmembers.tpl
 create mode 100644 templates/html/htmlinclude.tpl
 create mode 100644 templates/html/htmlindexpages.tpl
 create mode 100644 templates/html/htmljsnavindex.tpl
 create mode 100644 templates/html/htmljsnavtree.tpl
 create mode 100644 templates/html/htmllayout.tpl
 create mode 100644 templates/html/htmlmemberindex.tpl
 create mode 100644 templates/html/htmlmembersindex.tpl
 create mode 100644 templates/html/htmlmembertabs.tpl
 create mode 100644 templates/html/htmlmemdecl.tpl
 create mode 100644 templates/html/htmlmemdecls.tpl
 create mode 100644 templates/html/htmlmemdef.tpl
 create mode 100644 templates/html/htmlmeminherit.tpl
 create mode 100644 templates/html/htmlmemlist.tpl
 create mode 100644 templates/html/htmlmemsummary.tpl
 create mode 100644 templates/html/htmlmodule.tpl
 create mode 100644 templates/html/htmlmodules.tpl
 create mode 100644 templates/html/htmlnamespace.tpl
 create mode 100644 templates/html/htmlnamespaces.tpl
 create mode 100644 templates/html/htmlnavpath.tpl
 create mode 100644 templates/html/htmlnavtree.tpl
 create mode 100644 templates/html/htmlnsmembers.tpl
 create mode 100644 templates/html/htmlnsmembersindex.tpl
 create mode 100644 templates/html/htmlobjlink.tpl
 create mode 100644 templates/html/htmlpage.tpl
 create mode 100644 templates/html/htmlpages.tpl
 create mode 100644 templates/html/htmlsource.tpl
 create mode 100644 templates/html/htmltabs.tpl
 create mode 100644 templates/html/htmltypeconstraints.tpl
 create mode 100644 templates/html/jquery.js
 create mode 100644 templates/html/mag.png
 create mode 100644 templates/html/mag_sel.png
 create mode 100644 templates/html/nav_f.lum
 create mode 100644 templates/html/nav_g.png
 create mode 100644 templates/html/nav_h.lum
 create mode 100644 templates/html/navtree.css
 create mode 100644 templates/html/navtree.js
 create mode 100644 templates/html/open.luma
 create mode 100644 templates/html/resize.js
 create mode 100644 templates/html/search.css
 create mode 100644 templates/html/search.js
 create mode 100644 templates/html/search_functions.php
 create mode 100644 templates/html/search_l.png
 create mode 100644 templates/html/search_m.png
 create mode 100644 templates/html/search_noidx.css
 create mode 100644 templates/html/search_opensearch.php
 create mode 100644 templates/html/search_r.png
 create mode 100644 templates/html/splitbar.lum
 create mode 100644 templates/html/svgpan.js
 create mode 100644 templates/html/sync_off.luma
 create mode 100644 templates/html/sync_on.luma
 create mode 100644 templates/html/tab_a.lum
 create mode 100644 templates/html/tab_b.lum
 create mode 100644 templates/html/tab_h.lum
 create mode 100644 templates/html/tab_s.lum
 create mode 100644 templates/html/tabs.css
 create mode 100644 templates/latex/doxygen.sty
 create mode 100644 templates/xml/compound.xsd
 create mode 100644 templates/xml/index.xsd
 create mode 100644 winbuild/GenResources.rules

diff --git a/.gitignore b/.gitignore
index 0894b42..d97dc2e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -70,3 +70,6 @@
 /man
 /docbook
 /perlmod
+!/templates/html
+!/templates/latex
+
diff --git a/Makefile.in b/Makefile.in
index e90167c..af7a76f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -102,7 +102,7 @@ pdf: docs
 DISTFILES =  Doxyfile vhdlparser libmd5 addon tmake doc examples bin lib objects testing \
              qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
              Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \
-             VERSION README.md packages winbuild jquery
+             VERSION README.md packages winbuild jquery templates
 
 archive: clean
 	tar zcvf dx`date +%y%m%d`.tgz $(DISTFILES)
diff --git a/jquery/Makefile b/jquery/Makefile
index 2290ef9..996f472 100644
--- a/jquery/Makefile
+++ b/jquery/Makefile
@@ -3,6 +3,7 @@ JQUERY_UI_VERSION = 1.8.18
 HASHCHANGE_VERSION = 1.3
 SCROLL_VERSION = 1.4.2
 POWERTIP_VERSION = 1.2.0
+
 MINIFIER ?= /usr/local/bin/yuicompressor-2.4.7
 SCRIPTS = jquery-$(JQUERY_VERSION).js \
           jquery.ui-$(JQUERY_UI_VERSION).core.js \
@@ -12,31 +13,17 @@ SCRIPTS = jquery-$(JQUERY_VERSION).js \
           jquery.ba-$(HASHCHANGE_VERSION)-hashchange.js \
           jquery.scrollTo-$(SCROLL_VERSION).js \
 	  jquery.powertip-$(POWERTIP_VERSION).js
-RESULTS = jquery_p1.js jquery_p2.js jquery_p3.js \
-          jquery_ui.js jquery_fx.js jquery_pt.js
+RESULTS = jquery.js
 
 SCRIPTS_MIN = $(SCRIPTS:%.js=%-min.js)
 
 all: $(RESULTS)
 
 install: $(RESULTS)
-	cp $(RESULTS) ../src/
-
-jquery_ui.js: scripts
-	cat jquery.ui-$(JQUERY_UI_VERSION).core-min.js \
-            jquery.ui-$(JQUERY_UI_VERSION).widget-min.js \
-            jquery.ui-$(JQUERY_UI_VERSION).mouse-min.js \
-            jquery.ui-$(JQUERY_UI_VERSION).resizable-min.js \
-            jquery.ba-$(HASHCHANGE_VERSION)-hashchange-min.js > jquery_ui.js
-
-jquery_pt.js: scripts
-	cat jquery.powertip-$(POWERTIP_VERSION)-min.js > jquery_pt.js
-
-jquery_fx.js: scripts
-	cat jquery.scrollTo-$(SCROLL_VERSION)-min.js > jquery_fx.js
+	cp $(RESULTS) ../templates/html/
 
-jquery_p1.js jquery_p2.js jquery_p3.js: scripts
-	perl split_jquery.pl jquery-$(JQUERY_VERSION)-min.js $@
+jquery.js: scripts
+	cat $(SCRIPTS_MIN) > jquery.js
 
 scripts: $(SCRIPTS_MIN)
 
@@ -44,5 +31,5 @@ clean:
 	rm -f $(SCRIPTS_MIN) $(RESULTS)
 
 %-min.js: %.js
-	java -jar $(MINIFIER).jar --line-break 13000 $^ > $@
+	java -jar $(MINIFIER).jar $^ > $@
 
diff --git a/jquery/README b/jquery/README
index 7fd4dcd..5e385a5 100644
--- a/jquery/README
+++ b/jquery/README
@@ -11,7 +11,4 @@ packages:
 - jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo
 - jquery.powertip: 1.2.0: http://stevenbenner.github.io/jquery-powertip/
 
-The Makefile will built the jquery_*.js files used by doxygen.
-Some files are split into smaller parts to make sure Visual Studio can compile them 
-as strings.
-
+The Makefile will built the jquery.js files used by doxygen.
diff --git a/jquery/split_jquery.pl b/jquery/split_jquery.pl
deleted file mode 100644
index 3edc763..0000000
--- a/jquery/split_jquery.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# script to split file into parts of roughly 32kb
-#!/bin/perl
-my $file = shift;
-my $target = shift;
-my $count = 1;
-my $len = 0;
-$target=~/p(\d+).js/;
-my $part = $1;
-open(F,"<$file") || die ("cannot open file for reading: $!");
-open(G,">$target") || die("cannot open file for writing: $!");
-while (<F>)
-{
-  if ($part==$count)
-  {
-    print G "$_";
-  }
-  $len+=length($_);
-  if ($len>32768) 
-  {
-    $len=0;
-    $count++;
-  }
-}
-close(F);
-close(G);
diff --git a/qtools/qcstring.h b/qtools/qcstring.h
index 6930718..bc3a091 100644
--- a/qtools/qcstring.h
+++ b/qtools/qcstring.h
@@ -297,7 +297,7 @@ public:
     {
       if (!str) return *this;
       int len1 = length();
-      int len2 = strlen(str);
+      int len2 = (int)strlen(str);
       resize(len1+len2+1);
       memcpy(data()+len1,str,len2);
       return *this;
@@ -467,7 +467,7 @@ public:
         {
           if (str)
           {
-            int len = strlen(str);
+            int len = (int)strlen(str);
             u.s.isShort = len<SHORT_STR_CAPACITY;
             if (len<SHORT_STR_CAPACITY)
             {
@@ -489,7 +489,7 @@ public:
         {
           if (str && maxlen>0)
           {
-            uint len=strlen(str);
+            uint len=(uint)strlen(str);
             if (len>maxlen) len=maxlen;
             u.s.isShort = len<=SHORT_STR_MAX_LEN;
             if (u.s.isShort)
@@ -543,7 +543,7 @@ public:
           }
           if (str)
           {
-            int len = strlen(str);
+            int len = (int)strlen(str);
             u.s.isShort = len<SHORT_STR_CAPACITY;
             if (len<SHORT_STR_CAPACITY)
             {
diff --git a/src/bib2xhtml.pl b/src/bib2xhtml.pl
deleted file mode 100755
index da6dc62..0000000
--- a/src/bib2xhtml.pl
+++ /dev/null
@@ -1,319 +0,0 @@
-#
-# Below is a stripped down version of bib2xhtml used by doxygen.
-# For the full version see http://www.spinellis.gr/sw/textproc/bib2xhtml/
-#
-# Convert from bibtex to XHTML.
-#
-# (C) Copyright 1995, 1996 David Hull.
-# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)
-#
-# (C) Copyright 2002-2010 Diomidis Spinellis
-# http://www.spinellis.gr
-#
-# This program is free software.  You can redistribute it and/or modify
-# it under the terms of the GNU General Public License.  See the
-# files README and COPYING for details.
-#
-# This source code contains UTF-8 characters.  You might want to use
-# an appropriate editor, if you want to view/modify the LaTeX to Unicode
-# substitution commands.
-#
-
-use Getopt::Std;
-use open IO => ':crlf';
-$label_styles{'numbered'} = 	$LABEL_NUMBERED = 	2;
-$list_start[$LABEL_NUMBERED] = 'dl class="citelist"';
-$list_end[$LABEL_NUMBERED] = "/dl";
-@tmpfiles = ();
-sub html_ent {
-	s/\\i\b/i/g;
-	s/\\\'(\001\d+)\{([AEIOUaeiou])\1\}/&$2acute;/gs;
-	s/\\\'([AEIOUaeiou])/&$1acute;/g;
-	s/\\\`(\001\d+)\{([AEIOUaeiou])\1\}/&$2grave;/gs;
-	s/\\\`([AEIOUaeiou])/&$1grave;/g;
-	s/\\\"(\001\d+)\{([AEIOUaeiouy])\1\}/&$2uml;/gs;
-	s/\\\"([AEIOUaeiouy])/&$1uml;/g;
-	s/\\\~(\001\d+)\{([ANOano])\1\}/&$2tilde;/gs;
-	s/\\\~([ANOano])/&$1tilde;/g;
-	s/\\\^(\001\d+)\{([AEIOUaeiou])\1\}/&$2circ;/gs;
-	s/\\\^([AEIOUaeiou])/&$1circ;/g;
-	s/\\c(\001\d+)\{([Cc])\1\}/&$2cedil;/gs;
-	s/\\u(\001\d+)\{(.)\1\}/$2/gs;
-	s/\\v(\001\d+)\{(.)\1\}/$2/gs;
-	s/\\([lL])\b/$1/g;
-	s/\\\=(\001\d+)\{(.)\1\}/$2/gs;
-	s/\\\=(.)/$1/g;
-	s/\\\.(\001\d+)\{(.)\1\}/$2/gs;
-	s/\\\.(.)/$1/g;
-	s/\\([Oo])\b\s*/&$1slash;/g;
-	s/\\AA\b\s*/&Aring;/g;
-	s/\\aa\b\s*/&aring;/g;
-	s/\\AE\b\s*/&AElig;/g;
-	s/\\ae\b\s*/&aelig;/g;
-	s/\\ss\b\s*/&szlig;/g;
-	s/\\S\b\s*/&sect;/g;
-	s/\\P\b\s*/&para;/g;
-	s/\\pounds\b\s*/&pound;/g;
-	s/\?\`/&iquest;/g;
-	s/\!\`/&iexcl;/g;
-	s/\-\-\-/&mdash;/g;
-	s/([^\!])\-\-([^\>])/$1&ndash;$2/g;
-	s/\\([aA]lpha)\b/&$1;/g;
-	s/\\([bB]eta)\b/&$1;/g;
-	s/\\([gG]amma)\b/&$1;/g;
-	s/\\([dD]elta)\b/&$1;/g;
-	s/\\varepsilon\b/&epsilon;/g;
-	s/\\([eE]psilon)\b/&$1;/g;
-	s/\\([zZ]eta)\b/&$1;/g;
-	s/\\([eE]ta)\b/&$1;/g;
-	s/\\([tT]heta)\b/&$1;/g;
-	s/\\vartheta\b/&theta;/g;
-	s/\\([iI]ota)\b/&$1;/g;
-	s/\\([kK]appa)\b/&$1;/g;
-	s/\\([lL]ambda)\b/&$1;/g;
-	s/\\([mM]u)\b/&$1;/g;
-	s/\\([nN]u)\b/&$1;/g;
-	s/\\([xX]i)\b/&$1;/g;
-	s/\\([oO]micron)\b/&$1;/g;
-	s/\\([pP]i)\b/&$1;/g;
-	s/\\varpi\b/&pi;/g;
-	s/\\([rR]ho)\b/&$1;/g;
-	s/\\varrho\b/&rho;/g;
-	s/\\([sS]igma)\b/&$1;/g;
-	s/\\varsigma\b/&sigmaf;/g;
-	s/\\([tT]au)\b/&$1;/g;
-	s/\\([uU]psilon)\b/&$1;/g;
-	s/\\([pP]hi)\b/&$1;/g;
-	s/\\varphi\b/&phi;/g;
-	s/\\([cC]hi)\b/&$1;/g;
-	s/\\([pP]si)\b/&$1;/g;
-	s/\\([oO]mega)\b/&$1;/g;
-	s/\\S\b/&sect;/g;
-	s/^\\circ\b/&deg;/g;
-	s/\\infty\b/&infin;/g;
-	s/\\emptyset\b/&empty;/g;
-	s/\\pm\b/&plusmn;/g;
-	s/\\times\b/&times;/g;
-	s/\\cdot\b/&sdot;/g;
-	s/\\partial\b/&part;/g;
-	s/\\nabla\b/&nabla;/g;
-	s/\\surd\b/&radic;/g;
-	s/\\perp\b/&perp;/g;
-	s/\\sum\b/&sum;/g;
-	s/\\int\b/&int;/g;
-	s/\\prod\b/&prod;/g;
-	s/\\sim\b/&sim;/g;
-	s/\\approx\b/&asymp;/g;
-	s/\\ne\b/&ne;/g;
-	s/\\equiv\b/&equiv;/g;
-	s/\\propto\b/&prop;/g;
-	s/\\le\b/&le;/g;
-	s/\\ge\b/&ge;/g;
-	s/\\leftarrow\b/&larr;/g;
-	s/\\rightarrow\b/&rarr;/g;
-	s/\\in\b/&isin;/g;
-	s/\\notin\b/&notin;/g;
-	s/\\lceil\b/&lceil;/g;
-	s/\\rceil\b/&rceil;/g;
-	s/\\lfloor\b/&lfloor;/g;
-	s/\\rfloor\b/&rfloor;/g;
-}
-foreach (@ARGV) {
-  if (/\.bib$/) {
-    $bibfile = $_;
-    $bibfile =~ s/\.bib$//;
-    push(@bibfiles,$bibfile);
-  } else {
-    $htmlfile = $_;
-  }
-}
-exit(1) unless defined($htmlfile);
-$bibdatacmd="\\bibdata{".join(',',@bibfiles)."}";
-$label_style = $LABEL_NUMBERED;
-$bstfile = "doxygen";
-umask(077);
-open(HTMLFILE,">$htmlfile$$");
-if (open(OHTMLFILE, "$htmlfile")) {
-    $mode = (stat OHTMLFILE)[2] & 0xfff;
-} else {
-  print "Error opening $htmlfile\n";
-  exit(1);
-}
-$beginstring = "<!-- BEGIN CITATIONS -->";
-$endstring = "<!-- END CITATIONS -->";
-@citations = ();
-loop:
-while (<OHTMLFILE>) {
-  print HTMLFILE;
-  last loop if m/^$beginstring$/;
-}
-loop:
-while (<OHTMLFILE>) {
-  print HTMLFILE;
-  last loop if m/^$endstring$/;
-  push(@citations, $2) if m/^([^\\]*)?(.+\})(.*)?$/;
-}
-push(@citations, $bibdatacmd);
-$auxfile = "bib$$";
-push(@tmpfiles, "$auxfile.aux");
-open(AUXFILE, ">$auxfile" . ".aux");
-print AUXFILE "\\relax\n\\bibstyle{$bstfile}\n";
-foreach $citation (@citations) {
-  print AUXFILE "$citation\n";
-}
-close(AUXFILE);
-push(@tmpfiles, "$auxfile.blg");
-push(@tmpfiles, "$auxfile.bbl");
-`bibtex $auxfile 2>&1`;
-if ($?==-1)
-{
-  print "bibtex command failed: $!\n";
-}
-$beginstring = "<!-- BEGIN BIBLIOGRAPHY -->";
-$endstring = "<!-- END BIBLIOGRAPHY -->";
-loop:
-while (<OHTMLFILE>) {
-  last loop if m/^$beginstring$/;
-  print HTMLFILE;
-}
-loop:
-while (<OHTMLFILE>) {
-  last loop if m/^$endstring$/;
-}
-print HTMLFILE "$beginstring\n";
-$t = $auxfile . ".bbl";
-$/ = "";
-open(BBLFILE, "<$t") || die "error opening $t: $!\n";
-$nentry = 0;
-loop:
-while (<BBLFILE>) {
-    if (($nentry == 0) && (m/^#/)) {
-	if ((m/#\s*label-style:\s*(\S+)/) && (! defined $label_style)) {
-	    $label_style = $label_styles{$1};
-	    if (! defined $label_style) {
-		print STDERR "label style unknown: \n";
-		next loop;
-	    }
-	}
-	next loop;
-    }
-    $nentry++;
-    ($bcite, $blabel) = m+<dt><a name=\"([^\"]*)\">\[([^\]]*)\]</a></dt><dd>+;
-    $blabel = "$nentry";
-    $bibcite{$bcite} = $blabel;
-}
-close(BBLFILE);
-$label_style = $LABEL_DEFAULT if (! defined $label_style);
-$list_start = $list_start[$label_style];
-$list_end = $list_end[$label_style];
-print HTMLFILE "<$list_start>\n\n";
-open(BBLFILE, "<$t") || die "error opening $t: $!\n";
-$nentry = 0;
-loop:
-while (<BBLFILE>) {
-    next loop if (($nentry == 0) && (m/^#/));
-    $nentry++;
-    s/\\\{/\002/g;
-    s/\\\}/\003/g;
-    s/\\\$/\004/g;
-    {
-	local ($c, $l, $z) = (0, 0, ());
-	s/([\{\}])/join("","\001",($1 eq "\{" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;
-    }
-    s/\%\n//g;
-    s/(\.(<\/cite>|<\/a>|\')+)\./$1/g;
-    s:(<dt><a name=\"[^\"]*\">\[)[^\]]*(\]</a></dt><dd>):$1$nentry$2:;
-    while (m/(\\(cite(label)?)(\001\d+)\{([^\001]+)\4\})/) {
-	$old = $1;
-	$cmd = $2;
-	$doxref = defined($3);
-	$bcite = $5;
-	if (! defined $bibcite{$bcite}) {
-	    $blabel = " [" . $bcite . "]";
-	} elsif ($doxref) {
-	    $blabel = " <a href=\"#$bcite\">[" . $bibcite{$bcite} . "]<\/a>";
-	} else {
-	    $blabel = " [" . $bibcite{$bcite} . "]";
-	}
-	$old =~ s/(\W)/\\$1/g;
-	s/\s*$old/$blabel/g;
-    }
-    s/In (<a href=\"[^\"]*\">)([^\[]+) \[(\2)/In $1\[$2/;
-    s/\\htmladdnormallink(foot)?(\001\d+)\{([^\001]+)\2\}(\001\d+)\{([^\001]+)\4\}/<a href="$5">$3<\/a>/gs;
-    s/\&amp;/\005/g;
-    s/\\?&/&amp;/g;
-    s/\005/&amp;/g;
-    html_ent();
-    while (m/\\char([\'\"]?[0-9a-fA-F]+)/) {
-	$o = $r = $1;
-	if ($r =~ s/^\'//) {
-	    $r = oct($r);
-	} elsif ($r =~ s/^\"//) {
-	    $r = hex($r);
-	}
-	s/\\char$o\s*/&#$r;/g;
-    }
-    s/{\\etalchar\001(\d+)\{(.)}\001\1\}/$2/g;
-    s/\\par\b/<p \/>/g;
-    s/\\url(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
-    s/\\href(\001\d+)\{(.*)\1\}(\001\d+)\{([^\001]*)\3\}/<a href="$2">$4<\/a>/gs;
-    s/\\href(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
-    s/(\001\d+)\{\\rm\s+(.*)\1\}/$2/gs;
-    s/\\textrm(\001\d+)\{(.*)\1\}/$2/gs;
-    s/(\001\d+)\{\\em\s+(.*)\1\}/<em>$2<\/em>/gs;
-    s/(\001\d+)\{\\it\s+(.*)\1\}/<i>$2<\/i>/gs;
-    s/(\001\d+)\{\\bf\s+(.*)\1\}/<b>$2<\/b>/gs;
-    s/(\001\d+)\{\\tt\s+(.*)\1\}/<tt>$2<\/tt>/gs;
-    s/\\emph(\001\d+)\{(.*)\1\}/<em>$2<\/em>/gs;
-    s/\\textit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
-    s/\\textbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
-    s/\\texttt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
-    s/\\mathrm(\001\d+)\{(.*)\1\}/$2/gs;
-    s/\\mathnormal(\001\d+)\{(.*)\1\}/$2/gs;
-    s/\\mathsf(\001\d+)\{(.*)\1\}/$2/gs;
-    s/\\mathbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
-    s/\\mathcal(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
-    s/\\mathit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
-    s/\\mathtt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
-    s/\\bibxhtmlname(\001\d+)\{(.*)\1\}/$2/ges;
-    sub domath {
-      local($t) = @_;
-      $t =~ s/\^(\001\d+)\{\\circ\1\}/\&\#176;/gs;
-      $t =~ s/\^\\circ/\&\#176;/g;
-      $t =~ s/\^(\001\d+)\{(.*)\1\}/<sup>$2<\/sup>/gs;
-      $t =~ s/\^(\w)/<sup>$1<\/sup>/g;
-      $t =~ s/\_(\001\d+)\{(.*)\1\}/<sub>$2<\/sub>/gs;
-      $t =~ s/\_(\w)/<sub>$1<\/sub>/g;
-      $t;
-    }
-    s/(\$([^\$]+)\$)/&domath($2)/ge;
-    s/(\\\((([^\\]|\\[^\(\)])+)\\\))/&domath($2)/ge;
-    s/\\mbox(\001\d+)\{(.*)\1\}/$2/gs;
-    while (s/(\<a href\=\"[^"]*?)\~/$1\005/g) { ; }
-    s/([^\\])~/$1&nbsp;/g;
-    s/\\\,/&thinsp;/g;
-    s/\\ldots\b/&hellip;/g;
-    s/\\dots\b/&hellip;/g;
-    s/\005/\~/g;
-    s/\\ / /g;
-    s/\\textasciitilde\b\s*/~/g;
-    s/\\([\#\&\%\~\_\^\|])/$1/g;
-    s/\\\W//g;
-    s/\001(\d+)\{\\[A-Za-z]+\001(\d+)\{([^\001]*)\001\2\}\001\1\}/$3/g;
-    s/\\([A-Za-z]+)/ $1 /g;
-    s+In <a href=\"[^\"]*\"></a>++;
-    s/\001\d+[\{\}]//gs;
-    tr/\002\003\004/{}$/;
-    print HTMLFILE $_;
-}
-close(BBLFILE);
-print HTMLFILE "<$list_end>\n\n$endstring\n";
-while (<OHTMLFILE>) {
-  print HTMLFILE;
-}
-close (OHTMLFILE);
-close(HTMLFILE);
-chmod($mode, "$htmlfile$$");
-rename("$htmlfile$$", $htmlfile);
-unlink(@tmpfiles);
-exit(0);
diff --git a/src/cite.cpp b/src/cite.cpp
index 42374d0..f0d7d66 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -21,20 +21,11 @@
 #include "util.h"
 #include "language.h"
 #include "ftextstream.h"
+#include "resourcemgr.h"
 #include <qdir.h>
 
 //--------------------------------------------------------------------------
 
-static const char *doxygen_bst =
-#include "doxygen.bst.h"
-;
-
-static const char *bib2xhtml_pl =
-#include "bib2xhtml.pl.h"
-;
-
-//--------------------------------------------------------------------------
-
 const QCString CiteConsts::fileName("citelist");
 const QCString CiteConsts::anchorPrefix("CITEREF_");
 const QCString bibTmpFile("bibTmpFile_");
@@ -153,26 +144,12 @@ void CiteDict::generatePage() const
   f.close();
 
   // 2. generate bib2xhtml
-  QCString bib2xhtmlFile = outputDir+"/bib2xhtml.pl";
-  f.setName(bib2xhtmlFile);
-  QCString bib2xhtml = bib2xhtml_pl;
-  if (!f.open(IO_WriteOnly)) 
-  {
-    err("could not open file %s for writing\n",bib2xhtmlFile.data());
-  }
-  f.writeBlock(bib2xhtml, bib2xhtml.length());
-  f.close();
+  QCString bib2xhtmlFile  = outputDir+"/bib2xhtml.pl";
+  ResourceMgr::instance().copyResource("bib2xhtml.pl",outputDir);
 
   // 3. generate doxygen.bst
   QCString doxygenBstFile = outputDir+"/doxygen.bst";
-  QCString bstData = doxygen_bst;
-  f.setName(doxygenBstFile);
-  if (!f.open(IO_WriteOnly)) 
-  {
-    err("could not open file %s for writing\n",doxygenBstFile.data());
-  }
-  f.writeBlock(bstData, bstData.length());
-  f.close();
+  ResourceMgr::instance().copyResource("doxygen.bst",outputDir);
 
   // 4. for all formats we just copy the bib files to as special output directory
   //    so bibtex can find them without path (bibtex doesn't support paths or
diff --git a/src/compound.xsd b/src/compound.xsd
deleted file mode 100644
index be897c3..0000000
--- a/src/compound.xsd
+++ /dev/null
@@ -1,844 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <xsd:element name="doxygen" type="DoxygenType"/>
-
-  <!-- Complex types -->
-
-  <xsd:complexType name="DoxygenType">
-    <xsd:sequence maxOccurs="unbounded">
-      <xsd:element name="compounddef" type="compounddefType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="version" type="DoxVersionNumber" use="required" />
-  </xsd:complexType>
-
-  <xsd:complexType name="compounddefType">
-    <xsd:sequence>
-      <xsd:element name="compoundname" type="xsd:string"/>
-      <xsd:element name="title" type="xsd:string" minOccurs="0" />
-      <xsd:element name="basecompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="derivedcompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="includes" type="incType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="includedby" type="incType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="incdepgraph" type="graphType" minOccurs="0" />
-      <xsd:element name="invincdepgraph" type="graphType" minOccurs="0" />
-      <xsd:element name="innerdir" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innerfile" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innerclass" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innernamespace" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innerpage" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innergroup" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
-      <xsd:element name="sectiondef" type="sectiondefType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="inheritancegraph" type="graphType" minOccurs="0" />
-      <xsd:element name="collaborationgraph" type="graphType" minOccurs="0" />
-      <xsd:element name="programlisting" type="listingType" minOccurs="0" />
-      <xsd:element name="location" type="locationType" minOccurs="0" />
-      <xsd:element name="listofallmembers" type="listofallmembersType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-    <xsd:attribute name="kind" type="DoxCompoundKind" />
-    <xsd:attribute name="prot" type="DoxProtectionKind" />
-    <xsd:attribute name="final" type="DoxBool" use="optional"/>
-    <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
-    <xsd:attribute name="abstract" type="DoxBool" use="optional"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="listofallmembersType">
-    <xsd:sequence>
-      <xsd:element name="member" type="memberRefType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="memberRefType">
-    <xsd:sequence>
-      <xsd:element name="scope" />
-      <xsd:element name="name" />
-    </xsd:sequence>
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="prot" type="DoxProtectionKind" />
-    <xsd:attribute name="virt" type="DoxVirtualKind" />
-    <xsd:attribute name="ambiguityscope" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="compoundRefType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="refid" type="xsd:string" use="optional" />
-        <xsd:attribute name="prot" type="DoxProtectionKind" />
-        <xsd:attribute name="virt" type="DoxVirtualKind" />
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="reimplementType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="refid" type="xsd:string" />
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="incType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="refid" type="xsd:string" />
-        <xsd:attribute name="local" type="DoxBool" />
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="refType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="refid" type="xsd:string" />
-        <xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="refTextType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-       <xsd:attribute name="refid" type="xsd:string" />
-       <xsd:attribute name="kindref" type="DoxRefKind" />
-       <xsd:attribute name="external" type="xsd:string" use="optional"/>
-       <xsd:attribute name="tooltip" type="xsd:string" use="optional"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="sectiondefType">
-    <xsd:sequence>
-      <xsd:element name="header" type="xsd:string" minOccurs="0" />
-      <xsd:element name="description" type="descriptionType" minOccurs="0" />
-      <xsd:element name="memberdef" type="memberdefType" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="kind" type="DoxSectionKind" />
-  </xsd:complexType>
-
-  <xsd:complexType name="memberdefType">
-    <xsd:sequence>
-      <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
-      <xsd:element name="type" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="definition" minOccurs="0" />
-      <xsd:element name="argsstring" minOccurs="0" />
-      <xsd:element name="name" />
-      <xsd:element name="read" minOccurs="0" />
-      <xsd:element name="write" minOccurs="0" />
-      <xsd:element name="bitfield" minOccurs="0" />
-      <xsd:element name="reimplements" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="reimplementedby" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="enumvalue" type="enumvalueType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="exceptions" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="inbodydescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="location" type="locationType" />
-      <xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="kind" type="DoxMemberKind" />
-    <xsd:attribute name="id" type="xsd:string" />
-    <xsd:attribute name="prot" type="DoxProtectionKind" />
-    <xsd:attribute name="static" type="DoxBool" />
-    <xsd:attribute name="const" type="DoxBool" use="optional"/>
-    <xsd:attribute name="explicit" type="DoxBool" use="optional"/>
-    <xsd:attribute name="inline" type="DoxBool" use="optional"/>
-    <xsd:attribute name="virt" type="DoxVirtualKind" use="optional"/>
-    <xsd:attribute name="volatile" type="DoxBool" use="optional"/>
-    <xsd:attribute name="mutable" type="DoxBool" use="optional"/>
-    <!-- Qt property -->
-    <xsd:attribute name="readable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="writable" type="DoxBool" use="optional"/>
-    <!-- C++/CLI variable -->
-    <xsd:attribute name="initonly" type="DoxBool" use="optional"/>
-    <!-- C++/CLI and C# property -->
-    <xsd:attribute name="settable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="gettable" type="DoxBool" use="optional"/>
-    <!-- C++/CLI function -->
-    <xsd:attribute name="final" type="DoxBool" use="optional"/>
-    <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
-    <xsd:attribute name="new" type="DoxBool" use="optional"/>
-    <!-- C++/CLI event -->
-    <xsd:attribute name="add" type="DoxBool" use="optional"/>
-    <xsd:attribute name="remove" type="DoxBool" use="optional"/>
-    <xsd:attribute name="raise" type="DoxBool" use="optional"/>
-    <!-- Objective-C 2.0 protocol method -->
-    <xsd:attribute name="optional" type="DoxBool" use="optional"/>
-    <xsd:attribute name="required" type="DoxBool" use="optional"/>
-    <!-- Objective-C 2.0 property accessor -->
-    <xsd:attribute name="accessor" type="DoxAccessor" use="optional"/>
-    <!-- UNO IDL -->
-    <xsd:attribute name="attribute" type="DoxBool" use="optional"/>
-    <xsd:attribute name="property" type="DoxBool" use="optional"/>
-    <xsd:attribute name="readonly" type="DoxBool" use="optional"/>
-    <xsd:attribute name="bound" type="DoxBool" use="optional"/>
-    <xsd:attribute name="removable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="contrained" type="DoxBool" use="optional"/>
-    <xsd:attribute name="transient" type="DoxBool" use="optional"/>
-    <xsd:attribute name="maybevoid" type="DoxBool" use="optional"/>
-    <xsd:attribute name="maybedefault" type="DoxBool" use="optional"/>
-    <xsd:attribute name="maybeambiguous" type="DoxBool" use="optional"/>
-
-  </xsd:complexType>
-
-  <xsd:complexType name="descriptionType" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" minOccurs="0"/>	    
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="internal" type="docInternalType" minOccurs="0" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="enumvalueType" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="name" />
-      <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-    <xsd:attribute name="prot" type="DoxProtectionKind" />
-  </xsd:complexType>
-
-  <xsd:complexType name="templateparamlistType">
-    <xsd:sequence>
-      <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="paramType">
-    <xsd:sequence>
-      <xsd:element name="type" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="declname" minOccurs="0" />
-      <xsd:element name="defname" minOccurs="0" />
-      <xsd:element name="array" minOccurs="0" />
-      <xsd:element name="defval" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="linkedTextType" mixed="true">
-    <xsd:sequence>
-    <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="graphType">
-    <xsd:sequence>
-      <xsd:element name="node" type="nodeType" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="nodeType">
-    <xsd:sequence>
-      <xsd:element name="label" />
-      <xsd:element name="link" type="linkType" minOccurs="0" />
-      <xsd:element name="childnode" type="childnodeType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="childnodeType">
-    <xsd:sequence>
-      <xsd:element name="edgelabel" minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="relation" type="DoxGraphRelation" />
-  </xsd:complexType>
-
-  <xsd:complexType name="linkType">
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="external" type="xsd:string" use="optional"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="listingType">
-    <xsd:sequence>
-      <xsd:element name="codeline" type="codelineType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="codelineType">
-    <xsd:sequence>
-      <xsd:element name="highlight" type="highlightType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="lineno" type="xsd:integer" />
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="refkind" type="DoxRefKind" />
-    <xsd:attribute name="external" type="DoxBool" />
-  </xsd:complexType>
-
-  <xsd:complexType name="highlightType" mixed="true">
-    <xsd:choice minOccurs="0" maxOccurs="unbounded">
-      <xsd:element name="sp" />
-      <xsd:element name="ref" type="refTextType" />
-    </xsd:choice>
-    <xsd:attribute name="class" type="DoxHighlightClass" />
-  </xsd:complexType>
-
-  <xsd:complexType name="referenceType" mixed="true">
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="compoundref" type="xsd:string" use="optional" />
-    <xsd:attribute name="startline" type="xsd:integer" />
-    <xsd:attribute name="endline" type="xsd:integer" />
-  </xsd:complexType>
-
-  <xsd:complexType name="locationType">
-    <xsd:attribute name="file" type="xsd:string" />
-    <xsd:attribute name="line" type="xsd:integer" />
-    <xsd:attribute name="column" type="xsd:integer" use="optional"/>
-    <xsd:attribute name="bodyfile" type="xsd:string" />
-    <xsd:attribute name="bodystart" type="xsd:integer" />
-    <xsd:attribute name="bodyend" type="xsd:integer" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docSect1Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" />	    
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="internal" type="docInternalS1Type" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docSect2Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" />	    
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="internal" type="docInternalS2Type" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docSect3Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" />	    
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect4" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="internal" type="docInternalS3Type" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docSect4Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" />	    
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="internal" type="docInternalS4Type" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalType" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalS1Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalS2Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalS3Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect3" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalS4Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
- 
-  <xsd:group name="docTitleCmdGroup">
-    <xsd:choice>
-      <xsd:element name="ulink" type="docURLLink" />
-      <xsd:element name="bold" type="docMarkupType" />
-      <xsd:element name="emphasis" type="docMarkupType" />
-      <xsd:element name="computeroutput" type="docMarkupType" />
-      <xsd:element name="subscript" type="docMarkupType" />
-      <xsd:element name="superscript" type="docMarkupType" />
-      <xsd:element name="center" type="docMarkupType" />
-      <xsd:element name="small" type="docMarkupType" />
-      <xsd:element name="htmlonly" type="xsd:string" />
-      <xsd:element name="manonly" type="xsd:string" />
-      <xsd:element name="xmlonly" type="xsd:string" />
-      <xsd:element name="rtfonly" type="xsd:string" />
-      <xsd:element name="latexonly" type="xsd:string" />
-      <xsd:element name="dot" type="xsd:string" />
-      <xsd:element name="plantuml" type="xsd:string" />
-      <xsd:element name="anchor" type="docAnchorType" />
-      <xsd:element name="formula" type="docFormulaType" />
-      <xsd:element name="ref" type="docRefTextType" />
-      <!-- Automatically insert here the HTML entities -->
-    </xsd:choice>
-  </xsd:group>
-
-  <xsd:complexType name="docTitleType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-  </xsd:complexType>
-
-  <xsd:group name="docCmdGroup">
-    <xsd:choice>
-      <xsd:group ref="docTitleCmdGroup"/>
-      <xsd:element name="linebreak" type="docEmptyType" />
-      <xsd:element name="hruler" type="docEmptyType" />
-      <xsd:element name="preformatted" type="docMarkupType" />
-      <xsd:element name="programlisting" type="listingType" />
-      <xsd:element name="verbatim" type="xsd:string" />
-      <xsd:element name="indexentry" type="docIndexEntryType" />
-      <xsd:element name="orderedlist" type="docListType" />
-      <xsd:element name="itemizedlist" type="docListType" />
-      <xsd:element name="simplesect" type="docSimpleSectType" />
-      <xsd:element name="title" type="docTitleType" />
-      <xsd:element name="variablelist" type="docVariableListType" />
-      <xsd:element name="table" type="docTableType" />
-      <xsd:element name="heading" type="docHeadingType" />
-      <xsd:element name="image" type="docImageType" />
-      <xsd:element name="dotfile" type="docFileType" />
-      <xsd:element name="mscfile" type="docFileType" />
-      <xsd:element name="diafile" type="docFileType" />
-      <xsd:element name="toclist" type="docTocListType" />
-      <xsd:element name="language" type="docLanguageType" />
-      <xsd:element name="parameterlist" type="docParamListType" />
-      <xsd:element name="xrefsect" type="docXRefSectType" />
-      <xsd:element name="copydoc" type="docCopyType" />
-      <xsd:element name="blockquote" type="docBlockQuoteType" />
-      <xsd:element name="parblock" type="docParBlockType" />
-    </xsd:choice>
-  </xsd:group>
-
-  <xsd:complexType name="docParaType" mixed="true">
-    <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docMarkupType" mixed="true">
-    <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docURLLink" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="url" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docAnchorType" mixed="true">
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docFormulaType" mixed="true">
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docIndexEntryType">
-    <xsd:sequence>
-      <xsd:element name="primaryie" type="xsd:string" />
-      <xsd:element name="secondaryie" type="xsd:string" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docListType">
-    <xsd:sequence>
-      <xsd:element name="listitem" type="docListItemType" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docListItemType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docSimpleSectType">
-    <xsd:sequence>
-      <xsd:element name="title" type="docTitleType" minOccurs="0" />
-      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
-        <xsd:element name="para" type="docParaType" minOccurs="1" maxOccurs="unbounded" />
-      </xsd:sequence>
-    </xsd:sequence>
-    <xsd:attribute name="kind" type="DoxSimpleSectKind" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docVarListEntryType">
-    <xsd:sequence>
-      <xsd:element name="term" type="docTitleType" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:group name="docVariableListGroup">
-    <xsd:sequence>
-      <xsd:element name="varlistentry" type="docVarListEntryType" />
-      <xsd:element name="listitem" type="docListItemType" />
-    </xsd:sequence>
-  </xsd:group>
-
-  <xsd:complexType name="docVariableListType">
-    <xsd:sequence>
-      <xsd:group ref="docVariableListGroup" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docRefTextType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="kindref" type="DoxRefKind" />
-    <xsd:attribute name="external" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docTableType">
-    <xsd:sequence>
-      <xsd:element name="row" type="docRowType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="caption" type="docCaptionType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="rows" type="xsd:integer" />
-    <xsd:attribute name="cols" type="xsd:integer" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docRowType">
-    <xsd:sequence>
-      <xsd:element name="entry" type="docEntryType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docEntryType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="thead" type="DoxBool" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docCaptionType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docHeadingType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="level" type="xsd:integer" /> <!-- todo: range 1-6 -->
-  </xsd:complexType>
-
-  <xsd:complexType name="docImageType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="type" type="DoxImageKind" /> 
-    <xsd:attribute name="name" type="xsd:string" /> 
-    <xsd:attribute name="width" type="xsd:string" /> 
-    <xsd:attribute name="height" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docFileType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="name" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docTocItemType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="id" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docTocListType">
-    <xsd:sequence>
-      <xsd:element name="tocitem" type="docTocItemType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docLanguageType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="langid" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamListType">
-    <xsd:sequence>
-      <xsd:element name="parameteritem" type="docParamListItem" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="kind" type="DoxParamListKind" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamListItem">
-    <xsd:sequence>
-      <xsd:element name="parameternamelist" type="docParamNameList" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="parameterdescription" type="descriptionType" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamNameList">
-    <xsd:sequence>
-      <xsd:element name="parametertype" type="docParamType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamType" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamName" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
-    </xsd:sequence>
-    <xsd:attribute name="direction" type="DoxParamDir" use="optional" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docXRefSectType">
-    <xsd:sequence>
-      <xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="xrefdescription" type="descriptionType" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docCopyType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="internal" type="docInternalType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="link" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docBlockQuoteType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docParBlockType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docEmptyType"/>
-
-  <!-- Simple types -->
-
-  <xsd:simpleType name="DoxBool">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="yes" />
-      <xsd:enumeration value="no" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxGraphRelation">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="include" />
-      <xsd:enumeration value="usage" />
-      <xsd:enumeration value="template-instance" />
-      <xsd:enumeration value="public-inheritance" />
-      <xsd:enumeration value="protected-inheritance" />
-      <xsd:enumeration value="private-inheritance" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxRefKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="compound" />
-      <xsd:enumeration value="member" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxMemberKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="define" />
-      <xsd:enumeration value="property" />
-      <xsd:enumeration value="event" />
-      <xsd:enumeration value="variable" />
-      <xsd:enumeration value="typedef" />
-      <xsd:enumeration value="enum" />
-      <xsd:enumeration value="function" />
-      <xsd:enumeration value="signal" />
-      <xsd:enumeration value="prototype" />
-      <xsd:enumeration value="friend" />
-      <xsd:enumeration value="dcop" />
-      <xsd:enumeration value="slot" />
-      <xsd:enumeration value="interface" />
-      <xsd:enumeration value="service" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxProtectionKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="public" />
-      <xsd:enumeration value="protected" />
-      <xsd:enumeration value="private" />
-      <xsd:enumeration value="package" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxVirtualKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="non-virtual" />
-      <xsd:enumeration value="virtual" />
-      <xsd:enumeration value="pure-virtual" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxCompoundKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="class" />
-      <xsd:enumeration value="struct" />
-      <xsd:enumeration value="union" />
-      <xsd:enumeration value="interface" />
-      <xsd:enumeration value="protocol" />
-      <xsd:enumeration value="category" />
-      <xsd:enumeration value="exception" />
-      <xsd:enumeration value="service" />
-      <xsd:enumeration value="singleton" />
-      <xsd:enumeration value="module" />
-      <xsd:enumeration value="type" />
-      <xsd:enumeration value="file" />
-      <xsd:enumeration value="namespace" />
-      <xsd:enumeration value="group" />
-      <xsd:enumeration value="page" />
-      <xsd:enumeration value="example" />
-      <xsd:enumeration value="dir" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxSectionKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="user-defined" />
-      <xsd:enumeration value="public-type" />
-      <xsd:enumeration value="public-func" />
-      <xsd:enumeration value="public-attrib" />
-      <xsd:enumeration value="public-slot" />
-      <xsd:enumeration value="signal" />
-      <xsd:enumeration value="dcop-func" />
-      <xsd:enumeration value="property" />
-      <xsd:enumeration value="event" />
-      <xsd:enumeration value="public-static-func" />
-      <xsd:enumeration value="public-static-attrib" />
-      <xsd:enumeration value="protected-type" />
-      <xsd:enumeration value="protected-func" />
-      <xsd:enumeration value="protected-attrib" />
-      <xsd:enumeration value="protected-slot" />
-      <xsd:enumeration value="protected-static-func" />
-      <xsd:enumeration value="protected-static-attrib" />
-      <xsd:enumeration value="package-type" />
-      <xsd:enumeration value="package-func" />
-      <xsd:enumeration value="package-attrib" />
-      <xsd:enumeration value="package-static-func" />
-      <xsd:enumeration value="package-static-attrib" />
-      <xsd:enumeration value="private-type" />
-      <xsd:enumeration value="private-func" />
-      <xsd:enumeration value="private-attrib" />
-      <xsd:enumeration value="private-slot" />
-      <xsd:enumeration value="private-static-func" />
-      <xsd:enumeration value="private-static-attrib" />
-      <xsd:enumeration value="friend" />
-      <xsd:enumeration value="related" />
-      <xsd:enumeration value="define" />
-      <xsd:enumeration value="prototype" />
-      <xsd:enumeration value="typedef" />
-      <xsd:enumeration value="enum" />
-      <xsd:enumeration value="func" />
-      <xsd:enumeration value="var" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxHighlightClass">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="comment" />
-      <xsd:enumeration value="normal" />
-      <xsd:enumeration value="preprocessor" />
-      <xsd:enumeration value="keyword" />
-      <xsd:enumeration value="keywordtype" />
-      <xsd:enumeration value="keywordflow" />
-      <xsd:enumeration value="stringliteral" />
-      <xsd:enumeration value="charliteral" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxSimpleSectKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="see" />
-      <xsd:enumeration value="return" />
-      <xsd:enumeration value="author" />
-      <xsd:enumeration value="authors" />
-      <xsd:enumeration value="version" />
-      <xsd:enumeration value="since" />
-      <xsd:enumeration value="date" />
-      <xsd:enumeration value="note" />
-      <xsd:enumeration value="warning" />
-      <xsd:enumeration value="pre" />
-      <xsd:enumeration value="post" />
-      <xsd:enumeration value="copyright" />
-      <xsd:enumeration value="invariant" />
-      <xsd:enumeration value="remark" />
-      <xsd:enumeration value="attention" />
-      <xsd:enumeration value="par" />
-      <xsd:enumeration value="rcs" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxVersionNumber">
-    <xsd:restriction base="xsd:string">
-      <xsd:pattern value="\d+\.\d+.*" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxImageKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="html" />
-      <xsd:enumeration value="latex" />
-      <xsd:enumeration value="rtf" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxParamListKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="param" />
-      <xsd:enumeration value="retval" />
-      <xsd:enumeration value="exception" />
-      <xsd:enumeration value="templateparam" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxCharRange">
-    <xsd:restriction base="xsd:string">
-      <xsd:pattern value="[aeiouncAEIOUNC]" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxParamDir">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="in"/>
-      <xsd:enumeration value="out"/>
-      <xsd:enumeration value="inout"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxAccessor">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="retain"/>
-      <xsd:enumeration value="copy"/>
-      <xsd:enumeration value="assign"/>
-      <xsd:enumeration value="weak"/>
-      <xsd:enumeration value="strong"/>
-      <xsd:enumeration value="unretained"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-</xsd:schema>
-
diff --git a/src/context.cpp b/src/context.cpp
index b35fffa..4b174b0 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -13,6 +13,7 @@
  *
  */
 
+#include <assert.h>
 #include <qdir.h>
 
 #include "context.h"
@@ -1108,6 +1109,7 @@ class DefinitionContext : public PropertyMapper
   public:
     DefinitionContext(Definition *d) : m_def(d)
     {
+      assert(d!=0);
       //%% string name: the name of the symbol
       addProperty("name",this,&DefinitionContext::name);
       //%% string bareName: the bare name of the symbol with scope info
@@ -8147,7 +8149,6 @@ void generateOutputViaTemplate()
       SharedPtr<ExampleListContext>           exampleList          (ExampleListContext::alloc());
       SharedPtr<ModuleTreeContext>            moduleTree           (ModuleTreeContext::alloc());
       SharedPtr<ModuleListContext>            moduleList           (ModuleListContext::alloc());
-      SharedPtr<PageContext>                  mainPage             (PageContext::alloc(Doxygen::mainPage,TRUE));
       SharedPtr<GlobalsIndexContext>          globalsIndex         (GlobalsIndexContext::alloc());
       SharedPtr<ClassMembersIndexContext>     classMembersIndex    (ClassMembersIndexContext::alloc());
       SharedPtr<NamespaceMembersIndexContext> namespaceMembersIndex(NamespaceMembersIndexContext::alloc());
@@ -8187,7 +8188,15 @@ void generateOutputViaTemplate()
       //%% DirList dirList
       ctx->set("dirList",dirList.get());
       //%% Page mainPage
-      ctx->set("mainPage",mainPage.get());
+      if (Doxygen::mainPage)
+      {
+        SharedPtr<PageContext> mainPage(PageContext::alloc(Doxygen::mainPage,TRUE));
+        ctx->set("mainPage",mainPage.get());
+      }
+      else
+      {
+        ctx->set("mainPage",FALSE);
+      }
       //%% GlobalsIndex globalsIndex:
       ctx->set("globalsIndex",globalsIndex.get());
       //%% ClassMembersIndex classMembersIndex:
diff --git a/src/doxygen.bst b/src/doxygen.bst
deleted file mode 100644
index c6ae7a8..0000000
--- a/src/doxygen.bst
+++ /dev/null
@@ -1,1388 +0,0 @@
-	% $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
-	% 
-	% This file is either "html-btxbst.doc" or was derived from
-	% "html-btxbst.doc" using cpp.  "html-btxbst.doc" itself was edited
-	% from "btxbst.doc" and "named.bst".
-	% The following copyright information is from btxbst.doc:
-	% version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
-	% Copyright (C) 1985, all rights reserved.
-	% Copying of this file is authorized only if either
-	% (1) you make absolutely no changes to your copy, including name, or
-	% (2) if you do make changes, you name it something other than
-	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
-	% This restriction helps ensure that all standard styles are identical.
-	% The file btxbst.doc has the documentation for this style.
- % "named" style (sorted keys of the form [name, year])
- % Some code for this was taken from "named.bst".
-
-ENTRY
-  { address
-    author
-    booktitle
-    chapter
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-    dvi
-    html
-    keywords
-    pdf
-    postscript
-    url
-    doi
-    mailto
-  }
-  {}
-  { label extra.label sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-FUNCTION {init.state.consts}
-{ #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-STRINGS { s t }
-
-FUNCTION {output.nonnull}
-{ 's :=
-  output.state mid.sentence =
-    { ", " * write$ }
-    { output.state after.block =
-	{ add.period$ write$
-	  newline$
-	}
-	{ output.state before.all =
-	    'write$
-	    { add.period$ " " * write$ }
-	  if$
-	}
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION {output}
-{ duplicate$ empty$
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.check}
-{ 't :=
-  duplicate$ empty$
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.bibitem}
-{ newline$
-  author empty$
-    { editor empty$
-	{ organization empty$
-	    'skip$
-	    { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
-          if$
-	} 
-        { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
-      if$
-    }
-    { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
-  if$
-  keywords empty$
-    'skip$
-    { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
-  if$
-  "<dt><a name=" quote$ * "CITEREF_" * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION {fin.entry}
-{ add.period$
-  write$
-  postscript empty$
-    'skip$
-    { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
-  if$
-  pdf empty$
-    'skip$
-    { newline$ "<!-- PDF: " pdf * " -->" * write$ }
-  if$
-  dvi empty$
-    'skip$
-    { newline$ "<!-- DVI: " dvi * " -->" * write$ }
-  if$
-  doi empty$
-    'skip$
-    { newline$ "<!-- DOI: " doi * " -->" * write$ }
-  if$
-  "</dd>" write$
-  newline$
-  newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
-    'skip$
-    { output.state before.all =
-	'skip$
-	{ after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION {not}
-{   { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION {and}
-{   'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION {or}
-{   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION {str.to.int}
-{
-  's :=
-  #0
-    { s empty$ not }
-    { % Multiply the number on the top of the stack by 10 = 1010 binary
-      duplicate$ +			% x2
-      duplicate$			% x2 x2
-      duplicate$ + duplicate$ +		% x2 x8
-      +
-      s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
-      s #2 global.max$ substring$ 's :=
-    }
-  while$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.sentence.checka}
-{ empty$
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {new.sentence.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION {emphasize}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "<em>" swap$ * "</em>" * }
-  if$
-}
-
-FUNCTION {add.link} % title
-{
-  't :=
-  t empty$
-    { "" }
-    { url empty$
-	{ html empty$
-	    { t }
-	    { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
-	  if$ }
-	{ "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {add.mailto} % authors
-{
-  't :=
-  t empty$
-    { "" }
-    { mailto empty$
-        { t }
-        { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
-      if$
-    }
-  if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-FUNCTION {format.names}
-{ 's :=
-  #1 'nameptr :=
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
-      "\bibxhtmlname{" t * "}" * 't :=
-      nameptr #1 >
-	{ namesleft #1 >
-	    { ", " * t * }
-	    { numnames #2 >
-		{ "," * }
-		'skip$
-	      if$
-	      t "others" =
-		{ " et~al." * }
-		{ " and " * t * }
-	      if$
-	    }
-	  if$
-	}
-	't
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
-    { "" }
-    { author format.names }
-  if$
-  add.mailto
-}
-
-FUNCTION {format.editors}
-{ editor empty$
-    { "" }
-    { editor format.names
-      editor num.names$ #1 >
-	{ ", editors" * }
-	{ ", editor" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.title}
-{ title empty$
-    { "" }
-    { title "t" change.case$ }
-  if$
-  add.link
-}
-
-FUNCTION {n.dashify}
-{ 't :=
-  ""
-    { t empty$ not }
-    { t #1 #1 substring$ "-" =
-	{ t #1 #2 substring$ "--" = not
-	    { "--" *
-	      t #2 global.max$ substring$ 't :=
-	    }
-	    {   { t #1 #1 substring$ "-" = }
-		{ "-" *
-		  t #2 global.max$ substring$ 't :=
-		}
-	      while$
-	    }
-	  if$
-	}
-	{ t #1 #1 substring$ *
-	  t #2 global.max$ substring$ 't :=
-	}
-      if$
-    }
-  while$
-}
-
-FUNCTION {format.date}
-{ year empty$
-    { month empty$
-	{ "" }
-	{ "there's a month but no year in " cite$ * warning$
-	  month
-	}
-      if$
-    }
-    { month empty$
-	'year
-	{ month " " * year * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.btitle}
-{ title emphasize
-  add.link
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION {either.or.check}
-{ empty$
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION {format.bvolume}
-{ volume empty$
-    { "" }
-    { "volume" volume tie.or.space.connect
-      series empty$
-	'skip$
-	{ " of " * series emphasize * }
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION {format.number.series}
-{ volume empty$
-    { number empty$
-	{ series field.or.null }
-	{ output.state mid.sentence =
-	    { "number" }
-	    { "Number" }
-	  if$
-	  number tie.or.space.connect
-	  series empty$
-	    { "there's a number but no series in " cite$ * warning$ }
-	    { " in " * series * }
-	  if$
-	}
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
-    { "" }
-    { output.state mid.sentence =
-	{ edition "l" change.case$ " edition" * }
-	{ edition "t" change.case$ " edition" * }
-      if$
-    }
-  if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty$ not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-	{ #1 'multiresult := }
-	{ t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION {format.pages}
-{ pages empty$
-    { "" }
-    { pages multi.page.check
-	{ "pages" pages n.dashify tie.or.space.connect }
-	{ "page" pages tie.or.space.connect }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.vol.num.pages}
-{ volume field.or.null
-  number empty$
-    'skip$
-    { "(" number * ")" * *
-      volume empty$
-	{ "there's a number but no volume in " cite$ * warning$ }
-	'skip$
-      if$
-    }
-  if$
-  pages empty$
-    'skip$
-    { duplicate$ empty$
-	{ pop$ format.pages }
-	{ ":" * pages n.dashify * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.chapter.pages}
-{ chapter empty$
-    'format.pages
-    { type empty$
-	{ "chapter" }
-	{ type "l" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty$
-	'skip$
-	{ ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
-    { "" }
-    { editor empty$
-	{ "In " booktitle emphasize * }
-	{ "In " format.editors * ", " * booktitle emphasize * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {empty.misc.check}
-{ author empty$ title empty$ howpublished empty$
-  month empty$ year empty$ note empty$
-  and and and and and
-  key empty$ not and
-    { "all relevant fields are empty in " cite$ * warning$ }
-    'skip$
-  if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
-    'skip$
-    { pop$
-      type "t" change.case$
-    }
-  if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
-    { "Technical Report" }
-    'type
-  if$
-  number empty$
-    { "t" change.case$ }
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION {format.article.crossref}
-{
-  "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
-  key empty$
-    { journal empty$
-	{ "need key or journal for " cite$ * " to crossref " * crossref *
-	  warning$
-	  ""
-	}
-        { "<cite>" * journal * "</cite>" * }
-      if$
-    }
-    { key * }
-  if$
-  "</a> \citelabel{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}
-{ editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al." * }
-    { #2 <
-	'skip$
-	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-	    { " et~al." * }
-	    { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-	  if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.book.crossref}
-{ volume empty$
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect
-      " of " *
-    }
-  if$
-  "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
-  editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-	{ series empty$
-	    { "need editor, key, or series for " cite$ * " to crossref " *
-	      crossref * warning$
-	      "" *
-	    }
-            { "<cite>" * series * "</cite>" * }
-	  if$
-	}
-	{ key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  "</a> \citelabel{" * crossref * "}" *
-}
-
-FUNCTION {format.incoll.inproc.crossref}
-{
-  "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
-  editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-	{ booktitle empty$
-	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
-	      crossref * warning$
-	      ""
-	    }
-            { "<cite>" * booktitle * "</cite>" * }
-	  if$
-	}
-        { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  "</a> \citelabel{" * crossref * "}" *
-}
-
-FUNCTION {article}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { journal emphasize "journal" output.check
-      format.vol.num.pages output
-      format.date "year" output.check
-    }
-    { format.article.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {book}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-	{ "author and editor" editor either.or.check }
-	'skip$
-      if$
-    }
-  if$
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {booklet}
-{ output.bibitem
-  format.authors output
-  new.block
-  format.title "title" output.check
-  howpublished address new.block.checkb
-  howpublished output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inbook}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-	{ "author and editor" editor either.or.check }
-	'skip$
-      if$
-    }
-  if$
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { format.bvolume output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {incollection}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.bvolume output
-      format.number.series output
-      format.chapter.pages output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-      format.edition output
-      format.date "year" output.check
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inproceedings}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.bvolume output
-      format.number.series output
-      format.pages output
-      address empty$
-	{ organization publisher new.sentence.checkb
-	  organization output
-	  publisher output
-	  format.date "year" output.check
-	}
-	{ address output.nonnull
-	  format.date "year" output.check
-	  new.sentence
-	  organization output
-	  publisher output
-	}
-      if$
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{ output.bibitem
-  author empty$
-    { organization empty$
-	'skip$
-	{ organization output.nonnull
-	  address output
-	}
-      if$
-    }
-    { format.authors output.nonnull }
-  if$
-  new.block
-  format.btitle "title" output.check
-  author empty$
-    { organization empty$
-	{ address new.block.checka
-	  address output
-	}
-	'skip$
-      if$
-    }
-    { organization address new.block.checkb
-      organization output
-      address output
-    }
-  if$
-  format.edition output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {mastersthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  "Master's thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {misc}
-{ output.bibitem
-  format.authors output
-  title howpublished new.block.checkb
-  format.title output
-  howpublished new.block.checka
-  howpublished output
-  format.date output
-  new.block
-  note output
-  fin.entry
-  empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.btitle "title" output.check
-  new.block
-  "PhD thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {proceedings}
-{ output.bibitem
-  editor empty$
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  format.btitle "title" output.check
-  format.bvolume output
-  format.number.series output
-  address empty$
-    { editor empty$
-	{ publisher new.sentence.checka }
-	{ organization publisher new.sentence.checkb
-	  organization output
-	}
-      if$
-      publisher output
-      format.date "year" output.check
-    }
-    { address output.nonnull
-      format.date "year" output.check
-      new.sentence
-      editor empty$
-	'skip$
-	{ organization output }
-      if$
-      publisher output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {techreport}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  format.tr.number output.nonnull
-  institution "institution" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {unpublished}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  note "note" output.check
-  format.date output
-  fin.entry
-}
-
-FUNCTION {default.type} { misc }
-
-MACRO {jan} {"January"}
-
-MACRO {feb} {"February"}
-
-MACRO {mar} {"March"}
-
-MACRO {apr} {"April"}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"August"}
-
-MACRO {sep} {"September"}
-
-MACRO {oct} {"October"}
-
-MACRO {nov} {"November"}
-
-MACRO {dec} {"December"}
-
-MACRO {acmcs} {"ACM Computing Surveys"}
-
-MACRO {acta} {"Acta Informatica"}
-
-MACRO {cacm} {"Communications of the ACM"}
-
-MACRO {ibmjrd} {"IBM Journal of Research and Development"}
-
-MACRO {ibmsj} {"IBM Systems Journal"}
-
-MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
-
-MACRO {ieeetc} {"IEEE Transactions on Computers"}
-
-MACRO {ieeetcad}
- {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
-
-MACRO {ipl} {"Information Processing Letters"}
-
-MACRO {jacm} {"Journal of the ACM"}
-
-MACRO {jcss} {"Journal of Computer and System Sciences"}
-
-MACRO {scp} {"Science of Computer Programming"}
-
-MACRO {sicomp} {"SIAM Journal on Computing"}
-
-MACRO {tocs} {"ACM Transactions on Computer Systems"}
-
-MACRO {tods} {"ACM Transactions on Database Systems"}
-
-MACRO {tog} {"ACM Transactions on Graphics"}
-
-MACRO {toms} {"ACM Transactions on Mathematical Software"}
-
-MACRO {toois} {"ACM Transactions on Office Information Systems"}
-
-MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
-
-MACRO {tcs} {"Theoretical Computer Science"}
-
-READ
-
-FUNCTION {sortify}
-{ purify$
-  "l" change.case$
-}
-
-INTEGERS { len }
-
-FUNCTION {chop.word}
-{ 's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-
-FUNCTION {format.lab.names}
-{ 's :=
-  s num.names$ 'numnames :=
-  numnames #1 =
-    { s #1 "{vv }{ll}" format.name$ }
-    { numnames #2 =
-        { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
-        { s #1 "{vv }{ll }" format.name$ "et~al." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {author.key.label}
-{ author empty$
-    { key empty$
-	{ cite$ #1 #3 substring$ }
-	{ key }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION {author.editor.key.label}
-{ author empty$
-    { editor empty$
-	{ key empty$
-	    { cite$ #1 #3 substring$ }
-	    { key }
-	  if$
-	}
-	{ editor format.lab.names }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION {author.key.organization.label}
-{ author empty$
-    { key empty$
-	{ organization empty$
-	    { cite$ #1 #3 substring$ }
-	    { "The " #4 organization chop.word #3 text.prefix$ }
-	  if$
-	}
-	{ key }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION {editor.key.organization.label}
-{ editor empty$
-    { key empty$
-	{ organization empty$
-	    { cite$ #1 #3 substring$ }
-	    { "The " #4 organization chop.word #3 text.prefix$ }
-	  if$
-	}
-	{ key }
-      if$
-    }
-    { editor format.lab.names }
-  if$
-}
-
-FUNCTION {month.to.int}
-{
-	"l" change.case$ #3 text.prefix$
-	's :=
-	s "jan" = { #1 }  {
-	s "feb" = { #2 }  {
-	s "mar" = { #3 }  {
-	s "apr" = { #4 }  {
-	s "may" = { #5 }  {
-	s "jun" = { #6 }  {
-	s "jul" = { #7 }  {
-	s "aug" = { #8 }  {
-	s "sep" = { #9 }  {
-	s "oct" = { #10 } {
-	s "nov" = { #11 } {
-    s "dec" = { #12 } { #13 }  % 13 if nothing matches
-    if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
-}
-
-INTEGERS { done c } 
-FUNCTION { get.day }
-{ month field.or.null 's :=
-  
-  % Strip out month name
-  #0 'done := 
-  { s "" = not done not and }
-  { s #1 #1 substring$ " " = 'done :=
-    s #2 global.max$ substring$ 's :=
-  }
-  while$
-
-  % Build up first number in t
-  "0" 't :=
-  #0 'done :=
-  { s "" = not done not and }
-  { s #1 #1 substring$ chr.to.int$ 'c :=
-    c #47 > c #58 < and
-      { t c int.to.chr$ * 't := }
-      { #1 'done := }
-    if$
-    s #2 global.max$ substring$ 's :=
-  }
-  while$
-
-  t str.to.int
-}
-
-FUNCTION { sortify.fourdigit }
-{ 's :=
-  s empty$
-    { "0000" }
-    { s
-    }
-  if$
-}
-
-FUNCTION { sortify.twodigit }
-{ 's :=
-  s empty$
-    { "00" }
-    { s
-      str.to.int #10 + int.to.str$
-    }
-  if$
-}
-
-FUNCTION {calc.label}
-{ type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.key.label
-    { type$ "proceedings" =
-	'editor.key.organization.label
-	{ type$ "manual" =
-	    'author.key.organization.label
-	    'author.key.label
-	  if$
-	}
-      if$
-    }
-  if$
-  duplicate$
-
-  year empty$
-    'skip$
-    { ", " * }
-  if$
-  year field.or.null purify$ *  % CHANGED - pfps - 15 Feb 1989
-  'label :=
-
-  year field.or.null purify$
-  #-1 #4 substring$ 
-  sortify.fourdigit 
-  "  " *
-  month field.or.null month.to.int int.to.str$ sortify.twodigit *
-  "  " *  
-  get.day int.to.str$ sortify.twodigit *
-  "  " *
-  * sortify 'sort.label :=
-}
-
-FUNCTION {sort.format.names}
-{ 's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-	{ "   " * }
-	'skip$
-      if$
-      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-	{ "et al." * }
-	{ t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {sort.format.title}
-{ 't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION {author.sort}
-{ author empty$
-    { key empty$
-	{ "to sort, need author or key in " cite$ * warning$
-	  ""
-	}
-	{ key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.editor.sort}
-{ author empty$
-    { editor empty$
-	{ key empty$
-	    { "to sort, need author, editor, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.organization.sort}
-{ author empty$
-    { organization empty$
-	{ key empty$
-	    { "to sort, need author, organization, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ "The " #4 organization chop.word sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {editor.organization.sort}
-{ editor empty$
-    { organization empty$
-	{ key empty$
-	    { "to sort, need editor, organization, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ "The " #4 organization chop.word sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION {presort}
-{ calc.label
-  sort.label
-  "    "
-  *
-  type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-	'editor.organization.sort
-	{ type$ "manual" =
-	    'author.organization.sort
-	    'author.sort
-	  if$
-	}
-      if$
-    }
-  if$
-  *
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE {presort}
-
-SORT
-
-STRINGS { longest.label last.sort.label next.extra }
-
-INTEGERS { longest.label.width last.extra.num }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #0 int.to.chr$ 'last.sort.label :=
-  "" 'next.extra :=
-  #0 'longest.label.width :=
-  #0 'last.extra.num :=
-}
-
-FUNCTION {forward.pass}
-{ last.sort.label sort.label =
-    { last.extra.num #1 + 'last.extra.num :=
-      last.extra.num int.to.chr$ 'extra.label :=
-    }
-    { "a" chr.to.int$ 'last.extra.num :=
-      "" 'extra.label :=
-      sort.label 'last.sort.label :=
-    }
-  if$
-}
-
-FUNCTION {reverse.pass}
-{ next.extra "b" =
-    { "a" 'extra.label := }
-    'skip$
-  if$
-  label extra.label * 'label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-  extra.label 'next.extra :=
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {forward.pass}
-
-REVERSE {reverse.pass}
-
-FUNCTION {begin.bib}
-{
-  "# label-style: default" write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION {end.bib}
-{ newline$
-}
-
-EXECUTE {end.bib}
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 4e8409a..df1f853 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -100,6 +100,9 @@
 #include "context.h"
 #include "fileparser.h"
 
+// provided by the generated file resources.cpp
+extern void initResources();
+
 #define RECURSE_ENTRYTREE(func,var) \
   do { if (var->children()) { \
     EntryNavListIterator eli(*var->children()); \
@@ -9915,6 +9918,7 @@ static const char *getArg(int argc,char **argv,int &optind)
 
 void initDoxygen()
 {
+  initResources();
   const char *lang = portable_getenv("LC_ALL");
   if (lang) portable_setenv("LANG",lang);
   setlocale(LC_ALL,"");
@@ -10884,7 +10888,7 @@ void parseInput()
 
   QCString htmlOutput;
   bool &generateHtml = Config_getBool("GENERATE_HTML");
-  if (generateHtml)
+  if (generateHtml || g_useOutputTemplate /* TODO: temp hack */)
     htmlOutput = createOutputDirectory(outputDirectory,"HTML_OUTPUT","/html");
 
   QCString docbookOutput;
diff --git a/src/doxygen.css b/src/doxygen.css
deleted file mode 100644
index 2f4bf70..0000000
--- a/src/doxygen.css
+++ /dev/null
@@ -1,1440 +0,0 @@
-/* The standard CSS for doxygen $doxygenversion */
-
-body, table, div, p, dl {
-	font: 400 14px/22px Roboto,sans-serif;
-}
-
-/* @group Heading Levels */
-
-h1.groupheader {
-	font-size: 150%;
-}
-
-.title {
-	font: 400 14px/28px Roboto,sans-serif;
-	font-size: 150%;
-	font-weight: bold;
-	margin: 10px 2px;
-}
-
-h2.groupheader {
-	border-bottom: 1px solid ##99;
-	color: ##44;
-	font-size: 150%;
-	font-weight: normal;
-	margin-top: 1.75em;
-	padding-top: 8px;
-	padding-bottom: 4px;
-	width: 100%;
-}
-
-h3.groupheader {
-	font-size: 100%;
-}
-
-h1, h2, h3, h4, h5, h6 {
-	-webkit-transition: text-shadow 0.5s linear;
-	-moz-transition: text-shadow 0.5s linear;
-	-ms-transition: text-shadow 0.5s linear;
-	-o-transition: text-shadow 0.5s linear;
-	transition: text-shadow 0.5s linear;
-	margin-right: 15px;
-}
-
-h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
-	text-shadow: 0 0 15px cyan;
-}
-
-dt {
-	font-weight: bold;
-}
-
-div.multicol {
-	-moz-column-gap: 1em;
-	-webkit-column-gap: 1em;
-	-moz-column-count: 3;
-	-webkit-column-count: 3;
-}
-
-p.startli, p.startdd {
-	margin-top: 2px;
-}
-
-p.starttd {
-	margin-top: 0px;
-}
-
-p.endli {
-	margin-bottom: 0px;
-}
-
-p.enddd {
-	margin-bottom: 4px;
-}
-
-p.endtd {
-	margin-bottom: 2px;
-}
-
-/* @end */
-
-caption {
-	font-weight: bold;
-}
-
-span.legend {
-        font-size: 70%;
-        text-align: center;
-}
-
-h3.version {
-        font-size: 90%;
-        text-align: center;
-}
-
-div.qindex, div.navtab{
-	background-color: ##ee;
-	border: 1px solid ##b0;
-	text-align: center;
-}
-
-div.qindex, div.navpath {
-	width: 100%;
-	line-height: 140%;
-}
-
-div.navtab {
-	margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
-	color: ##50;
-	font-weight: normal;
-	text-decoration: none;
-}
-
-.contents a:visited {
-	color: ##60;
-}
-
-a:hover {
-	text-decoration: underline;
-}
-
-a.qindex {
-	font-weight: bold;
-}
-
-a.qindexHL {
-	font-weight: bold;
-	background-color: ##AA;
-	color: #ffffff;
-	border: 1px double ##98;
-}
-
-.contents a.qindexHL:visited {
-        color: #ffffff;
-}
-
-a.el {
-	font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code, a.code:visited, a.line, a.line:visited {
-	color: #4665A2; 
-}
-
-a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
-	color: #4665A2; 
-}
-
-/* @end */
-
-dl.el {
-	margin-left: -1cm;
-}
-
-pre.fragment {
-        border: 1px solid #C4CFE5;
-        background-color: #FBFCFD;
-        padding: 4px 6px;
-        margin: 4px 8px 4px 2px;
-        overflow: auto;
-        word-wrap: break-word;
-        font-size:  9pt;
-        line-height: 125%;
-        font-family: monospace, fixed;
-        font-size: 105%;
-}
-
-div.fragment {
-        padding: 4px 6px;
-        margin: 4px 8px 4px 2px;
-	background-color: ##FC;
-	border: 1px solid ##CC;
-}
-
-div.line {
-	font-family: monospace, fixed;
-        font-size: 13px;
-	min-height: 13px;
-	line-height: 1.0;
-	text-wrap: unrestricted;
-	white-space: -moz-pre-wrap; /* Moz */
-	white-space: -pre-wrap;     /* Opera 4-6 */
-	white-space: -o-pre-wrap;   /* Opera 7 */
-	white-space: pre-wrap;      /* CSS3  */
-	word-wrap: break-word;      /* IE 5.5+ */
-	text-indent: -53px;
-	padding-left: 53px;
-	padding-bottom: 0px;
-	margin: 0px;
-	-webkit-transition-property: background-color, box-shadow;
-	-webkit-transition-duration: 0.5s;
-	-moz-transition-property: background-color, box-shadow;
-	-moz-transition-duration: 0.5s;
-	-ms-transition-property: background-color, box-shadow;
-	-ms-transition-duration: 0.5s;
-	-o-transition-property: background-color, box-shadow;
-	-o-transition-duration: 0.5s;
-	transition-property: background-color, box-shadow;
-	transition-duration: 0.5s;
-}
-
-div.line.glow {
-	background-color: cyan;
-	box-shadow: 0 0 10px cyan;
-}
-
-
-span.lineno {
-	padding-right: 4px;
-	text-align: right;
-	border-right: 2px solid #0F0;
-	background-color: #E8E8E8;
-        white-space: pre;
-}
-span.lineno a {
-	background-color: #D8D8D8;
-}
-
-span.lineno a:hover {
-	background-color: #C8C8C8;
-}
-
-div.ah {
-	background-color: black;
-	font-weight: bold;
-	color: #ffffff;
-	margin-bottom: 3px;
-	margin-top: 3px;
-	padding: 0.2em;
-	border: solid thin #333;
-	border-radius: 0.5em;
-	-webkit-border-radius: .5em;
-	-moz-border-radius: .5em;
-	box-shadow: 2px 2px 3px #999;
-	-webkit-box-shadow: 2px 2px 3px #999;
-	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
-	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
-}
-
-div.groupHeader {
-	margin-left: 16px;
-	margin-top: 12px;
-	font-weight: bold;
-}
-
-div.groupText {
-	margin-left: 16px;
-	font-style: italic;
-}
-
-body {
-	background-color: white;
-	color: black;
-        margin: 0;
-}
-
-div.contents {
-	margin-top: 10px;
-	margin-left: 12px;
-	margin-right: 8px;
-}
-
-td.indexkey {
-	background-color: ##ee;
-	font-weight: bold;
-	border: 1px solid ##cc;
-	margin: 2px 0px 2px 0;
-	padding: 2px 10px;
-        white-space: nowrap;
-        vertical-align: top;
-}
-
-td.indexvalue {
-	background-color: ##ee;
-	border: 1px solid ##cc;
-	padding: 2px 10px;
-	margin: 2px 0px;
-}
-
-tr.memlist {
-	background-color: ##f0;
-}
-
-p.formulaDsp {
-	text-align: center;
-}
-
-img.formulaDsp {
-	
-}
-
-img.formulaInl {
-	vertical-align: middle;
-}
-
-div.center {
-	text-align: center;
-        margin-top: 0px;
-        margin-bottom: 0px;
-        padding: 0px;
-}
-
-div.center img {
-	border: 0px;
-}
-
-address.footer {
-	text-align: right;
-	padding-right: 12px;
-}
-
-img.footer {
-	border: 0px;
-	vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
-	color: #008000
-}
-
-span.keywordtype {
-	color: #604020
-}
-
-span.keywordflow {
-	color: #e08000
-}
-
-span.comment {
-	color: #800000
-}
-
-span.preprocessor {
-	color: #806020
-}
-
-span.stringliteral {
-	color: #002080
-}
-
-span.charliteral {
-	color: #008080
-}
-
-span.vhdldigit { 
-	color: #ff00ff 
-}
-
-span.vhdlchar { 
-	color: #000000 
-}
-
-span.vhdlkeyword { 
-	color: #700070 
-}
-
-span.vhdllogic { 
-	color: #ff0000 
-}
-
-blockquote {
-        background-color: ##F8;
-        border-left: 2px solid ##AA;
-        margin: 0 24px 0 4px;
-        padding: 0 12px 0 16px;
-}
-
-/* @end */
-
-/*
-.search {
-	color: #003399;
-	font-weight: bold;
-}
-
-form.search {
-	margin-bottom: 0px;
-	margin-top: 0px;
-}
-
-input.search {
-	font-size: 75%;
-	color: #000080;
-	font-weight: normal;
-	background-color: #e8eef2;
-}
-*/
-
-td.tiny {
-	font-size: 75%;
-}
-
-.dirtab {
-	padding: 4px;
-	border-collapse: collapse;
-	border: 1px solid ##b0;
-}
-
-th.dirtab {
-	background: ##ee;
-	font-weight: bold;
-}
-
-hr {
-	height: 0px;
-	border: none;
-	border-top: 1px solid ##66;
-}
-
-hr.footer {
-	height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
-	border-spacing: 0px;
-	padding: 0px;
-}
-
-.memberdecls td, .fieldtable tr {
-	-webkit-transition-property: background-color, box-shadow;
-	-webkit-transition-duration: 0.5s;
-	-moz-transition-property: background-color, box-shadow;
-	-moz-transition-duration: 0.5s;
-	-ms-transition-property: background-color, box-shadow;
-	-ms-transition-duration: 0.5s;
-	-o-transition-property: background-color, box-shadow;
-	-o-transition-duration: 0.5s;
-	transition-property: background-color, box-shadow;
-	transition-duration: 0.5s;
-}
-
-.memberdecls td.glow, .fieldtable tr.glow {
-	background-color: cyan;
-	box-shadow: 0 0 15px cyan;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
-	background-color: ##FA;
-	border: none;
-	margin: 4px;
-	padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
-	padding: 0px 8px 4px 8px;
-	color: #555;
-}
-
-.memSeparator {
-        border-bottom: 1px solid #DEE4F0;
-        line-height: 1px;
-        margin: 0px;
-        padding: 0px;
-}
-
-.memItemLeft, .memTemplItemLeft {
-        white-space: nowrap;
-}
-
-.memItemRight {
-	width: 100%;
-}
-
-.memTemplParams {
-	color: ##60;
-        white-space: nowrap;
-	font-size: 80%;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtemplate {
-	font-size: 80%;
-	color: ##60;
-	font-weight: normal;
-	margin-left: 9px;
-}
-
-.memnav {
-	background-color: ##ee;
-	border: 1px solid ##b0;
-	text-align: center;
-	margin: 2px;
-	margin-right: 15px;
-	padding: 2px;
-}
-
-.mempage {
-	width: 100%;
-}
-
-.memitem {
-	padding: 0;
-	margin-bottom: 10px;
-	margin-right: 5px;
-        -webkit-transition: box-shadow 0.5s linear;
-        -moz-transition: box-shadow 0.5s linear;
-        -ms-transition: box-shadow 0.5s linear;
-        -o-transition: box-shadow 0.5s linear;
-        transition: box-shadow 0.5s linear;
-        display: table !important;
-        width: 100%;
-}
-
-.memitem.glow {
-         box-shadow: 0 0 15px cyan;
-}
-
-.memname {
-        font-weight: bold;
-        margin-left: 6px;
-}
-
-.memname td {
-	vertical-align: bottom;
-}
-
-.memproto, dl.reflist dt {
-        border-top: 1px solid ##B4;
-        border-left: 1px solid ##B4;
-        border-right: 1px solid ##B4;
-        padding: 6px 0px 6px 0px;
-        color: ##2b;
-        font-weight: bold;
-        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: ##E6;
-        /* opera specific markup */
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        border-top-right-radius: 4px;
-        border-top-left-radius: 4px;
-        /* firefox specific markup */
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        -moz-border-radius-topright: 4px;
-        -moz-border-radius-topleft: 4px;
-        /* webkit specific markup */
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        -webkit-border-top-right-radius: 4px;
-        -webkit-border-top-left-radius: 4px;
-
-}
-
-.memdoc, dl.reflist dd {
-        border-bottom: 1px solid ##B4;      
-        border-left: 1px solid ##B4;      
-        border-right: 1px solid ##B4; 
-        padding: 6px 10px 2px 10px;
-        background-color: ##FC;
-        border-top-width: 0;
-        background-image:url('nav_g.png');
-        background-repeat:repeat-x;
-        background-color: #FFFFFF;
-        /* opera specific markup */
-        border-bottom-left-radius: 4px;
-        border-bottom-right-radius: 4px;
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        /* firefox specific markup */
-        -moz-border-radius-bottomleft: 4px;
-        -moz-border-radius-bottomright: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        /* webkit specific markup */
-        -webkit-border-bottom-left-radius: 4px;
-        -webkit-border-bottom-right-radius: 4px;
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-dl.reflist dt {
-        padding: 5px;
-}
-
-dl.reflist dd {
-        margin: 0px 0px 10px 0px;
-        padding: 5px;
-}
-
-.paramkey {
-	text-align: right;
-}
-
-.paramtype {
-	white-space: nowrap;
-}
-
-.paramname {
-	color: #602020;
-	white-space: nowrap;
-}
-.paramname em {
-	font-style: normal;
-}
-.paramname code {
-        line-height: 14px;
-}
-
-.params, .retval, .exception, .tparams {
-        margin-left: 0px;
-        padding-left: 0px;
-}       
-
-.params .paramname, .retval .paramname {
-        font-weight: bold;
-        vertical-align: top;
-}
-        
-.params .paramtype {
-        font-style: italic;
-        vertical-align: top;
-}       
-        
-.params .paramdir {
-        font-family: "courier new",courier,monospace;
-        vertical-align: top;
-}
-
-table.mlabels {
-	border-spacing: 0px;
-}
-
-td.mlabels-left {
-	width: 100%;
-	padding: 0px;
-}
-
-td.mlabels-right {
-	vertical-align: bottom;
-	padding: 0px;
-	white-space: nowrap;
-}
-
-span.mlabels {
-        margin-left: 8px;
-}
-
-span.mlabel {
-        background-color: ##88;
-        border-top:1px solid ##70;
-        border-left:1px solid ##70;
-        border-right:1px solid ##CC;
-        border-bottom:1px solid ##CC;
-	text-shadow: none;
-	color: white;
-	margin-right: 4px;
-	padding: 2px 3px;
-	border-radius: 3px;
-	font-size: 7pt;
-	white-space: nowrap;
-	vertical-align: middle;
-}
-
-
-
-/* @end */
-
-/* these are for tree view inside a (index) page */
-
-div.directory {
-        margin: 10px 0px;
-        border-top: 1px solid ##AA;
-        border-bottom: 1px solid ##AA;
-        width: 100%;
-}
-
-.directory table {
-        border-collapse:collapse;
-}
-
-.directory td {
-        margin: 0px;
-        padding: 0px;
-	vertical-align: top;
-}
-
-.directory td.entry {
-        white-space: nowrap;
-        padding-right: 6px;
-	padding-top: 3px;
-}
-
-.directory td.entry a {
-        outline:none;
-}
-
-.directory td.entry a img {
-        border: none;
-}
-
-.directory td.desc {
-        width: 100%;
-        padding-left: 6px;
-	padding-right: 6px;
-	padding-top: 3px;
-	border-left: 1px solid rgba(0,0,0,0.05);
-}
-
-.directory tr.even {
-	padding-left: 6px;
-	background-color: ##F8;
-}
-
-.directory img {
-	vertical-align: -30%;
-}
-
-.directory .levels {
-        white-space: nowrap;
-        width: 100%;
-        text-align: right;
-        font-size: 9pt;
-}
-
-.directory .levels span {
-        cursor: pointer;
-        padding-left: 2px;
-        padding-right: 2px;
-	color: ##50;
-}
-
-.arrow {
-    color: ##AA;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    cursor: pointer;
-    font-size: 80%;
-    display: inline-block;
-    width: 16px;
-    height: 22px;
-}
-
-.icon {
-    font-family: Arial, Helvetica;
-    font-weight: bold;
-    font-size: 12px;
-    height: 14px;
-    width: 16px;
-    display: inline-block;
-    background-color: ##88;
-    color: white;
-    text-align: center;
-    border-radius: 4px;
-    margin-left: 2px;
-    margin-right: 2px;
-}
-
-.icona {
-    width: 24px;
-    height: 22px;
-    display: inline-block;
-}
-
-.iconfopen {
-    width: 24px;
-    height: 18px;
-    margin-bottom: 4px;
-    background-image:url('ftv2folderopen.png');
-    background-position: 0px -4px;
-    background-repeat: repeat-y;
-    vertical-align:top;
-    display: inline-block;
-}
-
-.iconfclosed {
-    width: 24px;
-    height: 18px;
-    margin-bottom: 4px;
-    background-image:url('ftv2folderclosed.png');
-    background-position: 0px -4px;
-    background-repeat: repeat-y;
-    vertical-align:top;
-    display: inline-block;
-}
-
-.icondoc {
-    width: 24px;
-    height: 18px;
-    margin-bottom: 4px;
-    background-image:url('ftv2doc.png');
-    background-position: 0px -4px;
-    background-repeat: repeat-y;
-    vertical-align:top;
-    display: inline-block;
-}
-
-table.directory {
-    font: 400 14px Roboto,sans-serif;
-}
-
-/* @end */
-
-div.dynheader {
-        margin-top: 8px;
-	-webkit-touch-callout: none;
-	-webkit-user-select: none;
-	-khtml-user-select: none;
-	-moz-user-select: none;
-	-ms-user-select: none;
-	user-select: none;
-}
-
-address {
-	font-style: normal;
-	color: ##33;
-}
-
-table.doxtable {
-	border-collapse:collapse;
-        margin-top: 4px;
-        margin-bottom: 4px;
-}
-
-table.doxtable td, table.doxtable th {
-	border: 1px solid ##37;
-	padding: 3px 7px 2px;
-}
-
-table.doxtable th {
-	background-color: ##47;
-	color: #FFFFFF;
-	font-size: 110%;
-	padding-bottom: 4px;
-	padding-top: 5px;
-}
-
-table.fieldtable {
-        /*width: 100%;*/
-        margin-bottom: 10px;
-        border: 1px solid ##B4;
-        border-spacing: 0px;
-        -moz-border-radius: 4px;
-        -webkit-border-radius: 4px;
-        border-radius: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
-        padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
-        white-space: nowrap;
-        border-right: 1px solid ##B4;
-        border-bottom: 1px solid ##B4;
-        vertical-align: top;
-}
-
-.fieldtable td.fieldname {
-        padding-top: 3px;
-}
-
-.fieldtable td.fielddoc {
-        border-bottom: 1px solid ##B4;
-        /*width: 100%;*/
-}
-
-.fieldtable td.fielddoc p:first-child {
-        margin-top: 0px;
-}       
-        
-.fieldtable td.fielddoc p:last-child {
-        margin-bottom: 2px;
-}
-
-.fieldtable tr:last-child td {
-        border-bottom: none;
-}
-
-.fieldtable th {
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: ##E6;
-        font-size: 90%;
-        color: ##2B;
-        padding-bottom: 4px;
-        padding-top: 5px;
-        text-align:left;
-        -moz-border-radius-topleft: 4px;
-        -moz-border-radius-topright: 4px;
-        -webkit-border-top-left-radius: 4px;
-        -webkit-border-top-right-radius: 4px;
-        border-top-left-radius: 4px;
-        border-top-right-radius: 4px;
-        border-bottom: 1px solid ##B4;
-}
-
-
-.tabsearch {
-	top: 0px;
-	left: 10px;
-	height: 36px;
-	background-image: url('tab_b.png');
-	z-index: 101;
-	overflow: hidden;
-	font-size: 13px;
-}
-
-.navpath ul
-{
-	font-size: 11px;
-	background-image:url('tab_b.png');
-	background-repeat:repeat-x;
-	background-position: 0 -5px;
-	height:30px;
-	line-height:30px;
-	color:##9b;
-	border:solid 1px ##ca;
-	overflow:hidden;
-	margin:0px;
-	padding:0px;
-}
-
-.navpath li
-{
-	list-style-type:none;
-	float:left;
-	padding-left:10px;
-	padding-right:15px;
-	background-image:url('bc_s.png');
-	background-repeat:no-repeat;
-	background-position:right;
-	color:##45;
-}
-
-.navpath li.navelem a
-{
-	height:32px;
-	display:block;
-	text-decoration: none;
-	outline: none;
-	color: ##30;
-	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
-	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-	text-decoration: none;        
-}
-
-.navpath li.navelem a:hover
-{
-	color:##80;
-}
-
-.navpath li.footer
-{
-        list-style-type:none;
-        float:right;
-        padding-left:10px;
-        padding-right:15px;
-        background-image:none;
-        background-repeat:no-repeat;
-        background-position:right;
-        color:##45;
-        font-size: 8pt;
-}
-
-
-div.summary
-{
-	float: right;
-	font-size: 8pt;
-	padding-right: 5px;
-	width: 50%;
-	text-align: right;
-}       
-
-div.summary a
-{
-	white-space: nowrap;
-}
-
-div.ingroups
-{
-	font-size: 8pt;
-	width: 50%;
-	text-align: left;
-}
-
-div.ingroups a
-{
-	white-space: nowrap;
-}
-
-div.header
-{
-        background-image:url('nav_h.png');
-        background-repeat:repeat-x;
-	background-color: ##FA;
-	margin:  0px;
-	border-bottom: 1px solid ##CC;
-}
-
-div.headertitle
-{
-	padding: 5px 5px 5px 10px;
-}
-
-dl
-{
-        padding: 0 0 0 10px;
-}
-
-/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
-dl.section
-{
-	margin-left: 0px;
-	padding-left: 0px;
-}
-
-dl.note
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #D0C000;
-}
-
-dl.warning, dl.attention
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #00D000;
-}
-
-dl.deprecated
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #505050;
-}
-
-dl.todo
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #00C0E0;
-}
-
-dl.test
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #3030E0;
-}
-
-dl.bug
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #C08050;
-}
-
-dl.section dd {
-	margin-bottom: 6px;
-}
-
-
-#projectlogo
-{
-	text-align: center;
-	vertical-align: bottom;
-	border-collapse: separate;
-}
- 
-#projectlogo img
-{ 
-	border: 0px none;
-}
- 
-#projectname
-{
-	font: 300% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 2px 0px;
-}
-    
-#projectbrief
-{
-	font: 120% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#projectnumber
-{
-	font: 50% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#titlearea
-{
-	padding: 0px;
-	margin: 0px;
-	width: 100%;
-	border-bottom: 1px solid ##70;
-}
-
-.image
-{
-        text-align: center;
-}
-
-.dotgraph
-{
-        text-align: center;
-}
-
-.mscgraph
-{
-        text-align: center;
-}
-
-.diagraph
-{
-        text-align: center;
-}
-
-.caption
-{
-	font-weight: bold;
-}
-
-div.zoom
-{
-	border: 1px solid ##A0;
-}
-
-dl.citelist {
-        margin-bottom:50px;
-}
-
-dl.citelist dt {
-        color:##40;
-        float:left;
-        font-weight:bold;
-        margin-right:10px;
-        padding:5px;
-}
-
-dl.citelist dd {
-        margin:2px 0;
-        padding:5px 0;
-}
-
-div.toc {
-        padding: 14px 25px;
-        background-color: ##F6;
-        border: 1px solid ##DD;
-        border-radius: 7px 7px 7px 7px;
-        float: right;
-        height: auto;
-        margin: 0 20px 10px 10px;
-        width: 200px;
-}
-
-div.toc li {
-        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
-        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
-        margin-top: 5px;
-        padding-left: 10px;
-        padding-top: 2px;
-}
-
-div.toc h3 {
-        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
-	color: ##60;
-        border-bottom: 0 none;
-        margin: 0;
-}
-
-div.toc ul {
-        list-style: none outside none;
-        border: medium none;
-        padding: 0px;
-}       
-
-div.toc li.level1 {
-        margin-left: 0px;
-}
-
-div.toc li.level2 {
-        margin-left: 15px;
-}
-
-div.toc li.level3 {
-        margin-left: 30px;
-}
-
-div.toc li.level4 {
-        margin-left: 45px;
-}
-
-.inherit_header {
-        font-weight: bold;
-        color: gray;
-        cursor: pointer;
-	-webkit-touch-callout: none;
-	-webkit-user-select: none;
-	-khtml-user-select: none;
-	-moz-user-select: none;
-	-ms-user-select: none;
-	user-select: none;
-}
-
-.inherit_header td {
-        padding: 6px 0px 2px 5px;
-}
-
-.inherit {
-        display: none;
-}
-
-tr.heading h2 {
-        margin-top: 12px;
-        margin-bottom: 4px;
-}
-
-/* tooltip related style info */
-
-.ttc {
-        position: absolute;
-        display: none;
-}
-
-#powerTip {
-	cursor: default;
-	white-space: nowrap;
-	background-color: white;
-	border: 1px solid gray;
-	border-radius: 4px 4px 4px 4px;
-	box-shadow: 1px 1px 7px gray;
-	display: none;
-	font-size: smaller;
-	max-width: 80%;
-	opacity: 0.9;
-	padding: 1ex 1em 1em;
-	position: absolute;
-	z-index: 2147483647;
-}
-
-#powerTip div.ttdoc {
-        color: grey;
-	font-style: italic;
-}
-
-#powerTip div.ttname a {
-        font-weight: bold;
-}
-
-#powerTip div.ttname {
-        font-weight: bold;
-}
-
-#powerTip div.ttdeci {
-        color: #006318;
-}
-
-#powerTip div {
-        margin: 0px;
-        padding: 0px;
-        font: 12px/16px Roboto,sans-serif;
-}
-
-#powerTip:before, #powerTip:after {
-	content: "";
-	position: absolute;
-	margin: 0px;
-}
-
-#powerTip.n:after,  #powerTip.n:before,
-#powerTip.s:after,  #powerTip.s:before,
-#powerTip.w:after,  #powerTip.w:before,
-#powerTip.e:after,  #powerTip.e:before,
-#powerTip.ne:after, #powerTip.ne:before,
-#powerTip.se:after, #powerTip.se:before,
-#powerTip.nw:after, #powerTip.nw:before,
-#powerTip.sw:after, #powerTip.sw:before {
-	border: solid transparent;
-	content: " ";
-	height: 0;
-	width: 0;
-	position: absolute;
-}
-
-#powerTip.n:after,  #powerTip.s:after,
-#powerTip.w:after,  #powerTip.e:after,
-#powerTip.nw:after, #powerTip.ne:after,
-#powerTip.sw:after, #powerTip.se:after {
-	border-color: rgba(255, 255, 255, 0);
-}
-
-#powerTip.n:before,  #powerTip.s:before,
-#powerTip.w:before,  #powerTip.e:before,
-#powerTip.nw:before, #powerTip.ne:before,
-#powerTip.sw:before, #powerTip.se:before {
-	border-color: rgba(128, 128, 128, 0);
-}
-
-#powerTip.n:after,  #powerTip.n:before,
-#powerTip.ne:after, #powerTip.ne:before,
-#powerTip.nw:after, #powerTip.nw:before {
-	top: 100%;
-}
-
-#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
-	border-top-color: #ffffff;
-	border-width: 10px;
-	margin: 0px -10px;
-}
-#powerTip.n:before {
-	border-top-color: #808080;
-	border-width: 11px;
-	margin: 0px -11px;
-}
-#powerTip.n:after, #powerTip.n:before {
-	left: 50%;
-}
-
-#powerTip.nw:after, #powerTip.nw:before {
-	right: 14px;
-}
-
-#powerTip.ne:after, #powerTip.ne:before {
-	left: 14px;
-}
-
-#powerTip.s:after,  #powerTip.s:before,
-#powerTip.se:after, #powerTip.se:before,
-#powerTip.sw:after, #powerTip.sw:before {
-	bottom: 100%;
-}
-
-#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
-	border-bottom-color: #ffffff;
-	border-width: 10px;
-	margin: 0px -10px;
-}
-
-#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
-	border-bottom-color: #808080;
-	border-width: 11px;
-	margin: 0px -11px;
-}
-
-#powerTip.s:after, #powerTip.s:before {
-	left: 50%;
-}
-
-#powerTip.sw:after, #powerTip.sw:before {
-	right: 14px;
-}
-
-#powerTip.se:after, #powerTip.se:before {
-	left: 14px;
-}
-
-#powerTip.e:after, #powerTip.e:before {
-	left: 100%;
-}
-#powerTip.e:after {
-	border-left-color: #ffffff;
-	border-width: 10px;
-	top: 50%;
-	margin-top: -10px;
-}
-#powerTip.e:before {
-	border-left-color: #808080;
-	border-width: 11px;
-	top: 50%;
-	margin-top: -11px;
-}
-
-#powerTip.w:after, #powerTip.w:before {
-	right: 100%;
-}
-#powerTip.w:after {
-	border-right-color: #ffffff;
-	border-width: 10px;
-	top: 50%;
-	margin-top: -10px;
-}
-#powerTip.w:before {
-	border-right-color: #808080;
-	border-width: 11px;
-	top: 50%;
-	margin-top: -11px;
-}
-
-@media print
-{
-  #top { display: none; }
-  #side-nav { display: none; }
-  #nav-path { display: none; }
-  body { overflow:visible; }
-  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
-  .summary { display: none; }
-  .memitem { page-break-inside: avoid; }
-  #doc-content
-  {
-    margin-left:0 !important;
-    height:auto !important;
-    width:auto !important;
-    overflow:inherit;
-    display:inline;
-  }
-}
-
diff --git a/src/doxygen.sty b/src/doxygen.sty
deleted file mode 100644
index c423e12..0000000
--- a/src/doxygen.sty
+++ /dev/null
@@ -1,478 +0,0 @@
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{doxygen}
-
-% Packages used by this style file
-\RequirePackage{alltt}
-\RequirePackage{array}
-\RequirePackage{calc}
-\RequirePackage{float}
-\RequirePackage{ifthen}
-\RequirePackage{verbatim}
-\RequirePackage[table]{xcolor}
-\RequirePackage{xtab}
-
-%---------- Internal commands used in this style file ----------------
-
-\newcommand{\ensurespace}[1]{%
-  \begingroup%
-    \setlength{\dimen@}{#1}%
-    \vskip\z@\@plus\dimen@%
-    \penalty -100\vskip\z@\@plus -\dimen@%
-    \vskip\dimen@%
-    \penalty 9999%
-    \vskip -\dimen@%
-    \vskip\z@skip% hide the previous |\vskip| from |\addvspace|
-  \endgroup%
-}
-
-\newcommand{\DoxyLabelFont}{}
-\newcommand{\entrylabel}[1]{%
-  {%
-    \parbox[b]{\labelwidth-4pt}{%
-      \makebox[0pt][l]{\DoxyLabelFont#1}%
-      \vspace{1.5\baselineskip}%
-    }%
-  }%
-}
-
-\newenvironment{DoxyDesc}[1]{%
-  \ensurespace{4\baselineskip}%
-  \begin{list}{}{%
-    \settowidth{\labelwidth}{20pt}%
-    \setlength{\parsep}{0pt}%
-    \setlength{\itemsep}{0pt}%
-    \setlength{\leftmargin}{\labelwidth+\labelsep}%
-    \renewcommand{\makelabel}{\entrylabel}%
-  }%
-  \item[#1]%
-}{%
-  \end{list}%
-}
-
-\newsavebox{\xrefbox}
-\newlength{\xreflength}
-\newcommand{\xreflabel}[1]{%
-  \sbox{\xrefbox}{#1}%
-  \setlength{\xreflength}{\wd\xrefbox}%
-  \ifthenelse{\xreflength>\labelwidth}{%
-    \begin{minipage}{\textwidth}%
-      \setlength{\parindent}{0pt}%
-      \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
-    \end{minipage}%
-  }{%
-   \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
-  }%
-}
-
-%---------- Commands used by doxygen LaTeX output generator ----------
-
-% Used by <pre> ... </pre>
-\newenvironment{DoxyPre}{%
-  \small%
-  \begin{alltt}%
-}{%
-  \end{alltt}%
-  \normalsize%
-}
-
-% Used by @code ... @endcode
-\newenvironment{DoxyCode}{%
-  \par%
-  \scriptsize%
-  \begin{alltt}%
-}{%
-  \end{alltt}%
-  \normalsize%
-}
-
-% Used by @example, @include, @includelineno and @dontinclude
-\newenvironment{DoxyCodeInclude}{%
-  \DoxyCode%
-}{%
-  \endDoxyCode%
-}
-
-% Used by @verbatim ... @endverbatim
-\newenvironment{DoxyVerb}{%
-  \footnotesize%
-  \verbatim%
-}{%
-  \endverbatim%
-  \normalsize%
-}
-
-% Used by @verbinclude
-\newenvironment{DoxyVerbInclude}{%
-  \DoxyVerb%
-}{%
-  \endDoxyVerb%
-}
-
-% Used by numbered lists (using '-#' or <ol> ... </ol>)
-\newenvironment{DoxyEnumerate}{%
-  \enumerate%
-}{%
-  \endenumerate%
-}
-
-% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
-\newenvironment{DoxyItemize}{%
-  \itemize%
-}{%
-  \enditemize%
-}
-
-% Used by description lists (using <dl> ... </dl>)
-\newenvironment{DoxyDescription}{%
-  \description%
-}{%
-  \enddescription%
-}
-
-% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
-% (only if caption is specified)
-\newenvironment{DoxyImage}{%
-  \begin{figure}[H]%
-    \begin{center}%
-}{%
-    \end{center}%
-  \end{figure}%
-}
-
-% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
-% (only if no caption is specified)
-\newenvironment{DoxyImageNoCaption}{%
-}{%
-}
-
-% Used by @attention
-\newenvironment{DoxyAttention}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @author and @authors
-\newenvironment{DoxyAuthor}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @date
-\newenvironment{DoxyDate}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @invariant
-\newenvironment{DoxyInvariant}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @note
-\newenvironment{DoxyNote}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @post
-\newenvironment{DoxyPostcond}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @pre
-\newenvironment{DoxyPrecond}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @copyright
-\newenvironment{DoxyCopyright}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @remark
-\newenvironment{DoxyRemark}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @return and @returns
-\newenvironment{DoxyReturn}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @since
-\newenvironment{DoxySince}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @see
-\newenvironment{DoxySeeAlso}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @version
-\newenvironment{DoxyVersion}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @warning
-\newenvironment{DoxyWarning}[1]{%
-  \begin{DoxyDesc}{#1}%
-}{%
-  \end{DoxyDesc}%
-}
-
-% Used by @internal
-\newenvironment{DoxyInternal}[1]{%
-  \paragraph*{#1}%
-}{%
-}
-
-% Used by @par and @paragraph
-\newenvironment{DoxyParagraph}[1]{%
-  \begin{list}{}{%
-    \settowidth{\labelwidth}{40pt}%
-    \setlength{\leftmargin}{\labelwidth}%
-    \setlength{\parsep}{0pt}%
-    \setlength{\itemsep}{-4pt}%
-    \renewcommand{\makelabel}{\entrylabel}%
-  }%
-  \item[#1]%
-}{%
-  \end{list}%
-}
-
-% Used by parameter lists
-\newenvironment{DoxyParams}[2][]{%
-    \par%
-    \tabletail{\hline}%
-    \tablelasttail{\hline}%
-    \tablefirsthead{}%
-    \tablehead{}%
-    \ifthenelse{\equal{#1}{}}%
-    {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
-     \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
-                        p{0.805\textwidth}|}}%
-    {\ifthenelse{\equal{#1}{1}}%
-      {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
-       \begin{xtabular}{|>{\centering}p{0.10\textwidth}|%
-                         >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
-                         p{0.678\textwidth}|}}%
-      {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
-       \begin{xtabular}{|>{\centering}p{0.10\textwidth}|%
-                         >{\centering\hspace{0pt}}p{0.15\textwidth}|%
-                         >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
-                         p{0.501\textwidth}|}}%
-    }\hline%
-}{%
-    \end{xtabular}%
-    \tablefirsthead{}%
-    \vspace{6pt}%
-}
-
-% Used for fields of simple structs
-\newenvironment{DoxyFields}[1]{%
-    \par%
-    \tabletail{\hline}%
-    \tablelasttail{\hline}%
-    \tablehead{}%
-    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
-    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
-                         p{0.15\textwidth}|%
-                         p{0.63\textwidth}|}%
-    \hline%
-}{%
-    \end{xtabular}%
-    \tablefirsthead{}%
-    \vspace{6pt}%
-}
-
-% Used for parameters within a detailed function description
-\newenvironment{DoxyParamCaption}{%
-  \renewcommand{\item}[2][]{##1 {\em ##2}}%
-}{%
-}
-
-% Used by return value lists
-\newenvironment{DoxyRetVals}[1]{%
-    \par%
-    \tabletail{\hline}%
-    \tablelasttail{\hline}%
-    \tablehead{}%
-    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
-    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
-                          p{0.705\textwidth}|}%
-    \hline%
-}{%
-    \end{xtabular}%
-    \tablefirsthead{}%
-    \vspace{6pt}%
-}
-
-% Used by exception lists
-\newenvironment{DoxyExceptions}[1]{%
-    \par%
-    \tabletail{\hline}%
-    \tablelasttail{\hline}%
-    \tablehead{}%
-    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
-    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
-                          p{0.705\textwidth}|}%
-    \hline%
-}{%
-    \end{xtabular}%
-    \tablefirsthead{}%
-    \vspace{6pt}%
-}
-
-% Used by template parameter lists
-\newenvironment{DoxyTemplParams}[1]{%
-    \par%
-    \tabletail{\hline}%
-    \tablelasttail{\hline}%
-    \tablehead{}%
-    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
-    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
-                          p{0.705\textwidth}|}%
-    \hline%
-}{%
-    \end{xtabular}%
-    \tablefirsthead{}%
-    \vspace{6pt}%
-}
-
-% Used for member lists
-\newenvironment{DoxyCompactItemize}{%
-  \begin{itemize}%
-    \setlength{\itemsep}{-3pt}%
-    \setlength{\parsep}{0pt}%
-    \setlength{\topsep}{0pt}%
-    \setlength{\partopsep}{0pt}%
-}{%
-  \end{itemize}%
-}
-
-% Used for member descriptions
-\newenvironment{DoxyCompactList}{%
-  \begin{list}{}{%
-    \setlength{\leftmargin}{0.5cm}%
-    \setlength{\itemsep}{0pt}%
-    \setlength{\parsep}{0pt}%
-    \setlength{\topsep}{0pt}%
-    \renewcommand{\makelabel}{\hfill}%
-  }%
-}{%
-  \end{list}%
-}
-
-% Used for reference lists (@bug, @deprecated, @todo, etc.)
-\newenvironment{DoxyRefList}{%
-  \begin{list}{}{%
-    \setlength{\labelwidth}{10pt}%
-    \setlength{\leftmargin}{\labelwidth}%
-    \addtolength{\leftmargin}{\labelsep}%
-    \renewcommand{\makelabel}{\xreflabel}%
-  }%
-}{%
-  \end{list}%
-}
-
-% Used by @bug, @deprecated, @todo, etc.
-\newenvironment{DoxyRefDesc}[1]{%
-  \begin{list}{}{%
-    \renewcommand\makelabel[1]{\textbf{##1}}%
-    \settowidth\labelwidth{\makelabel{#1}}%
-    \setlength\leftmargin{\labelwidth+\labelsep}%
-  }%
-}{%
-  \end{list}%
-}
-
-% Used by parameter lists and simple sections
-\newenvironment{Desc}
-{\begin{list}{}{%
-    \settowidth{\labelwidth}{40pt}%
-    \setlength{\leftmargin}{\labelwidth}%
-    \setlength{\parsep}{0pt}%
-    \setlength{\itemsep}{-4pt}%
-    \renewcommand{\makelabel}{\entrylabel}%
-  }
-}{%
-  \end{list}%
-}
-
-% Used by tables
-\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
-\newlength{\tmplength}%
-\newenvironment{TabularC}[1]%
-{%
-\setlength{\tmplength}%
-     {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}%
-      \par\begin{xtabular*}{\linewidth}%
-             {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}%
-}%
-{\end{xtabular*}\par}%
-
-% Used by nested tables
-\newenvironment{TabularNC}[1]%
-{%
-\setlength{\tmplength}%
-     {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}%
-      \par\begin{tabular*}{\linewidth}%
-             {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}%
-}%
-{\end{tabular*}\par}%
-
-% Used for member group headers
-\newenvironment{Indent}{%
-  \begin{list}{}{%
-    \setlength{\leftmargin}{0.5cm}%
-  }%
-  \item[]\ignorespaces%
-}{%
-  \unskip%
-  \end{list}%
-}
-
-% Used when hyperlinks are turned off
-\newcommand{\doxyref}[3]{%
-  \textbf{#1} (\textnormal{#2}\,\pageref{#3})%
-}
-
-% Used by @addindex
-\newcommand{\lcurly}{\{}
-\newcommand{\rcurly}{\}}
-
-% Used for syntax highlighting
-\definecolor{comment}{rgb}{0.5,0.0,0.0}
-\definecolor{keyword}{rgb}{0.0,0.5,0.0}
-\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
-\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
-\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
-\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
-\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
-\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
-\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
-\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
-\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
diff --git a/src/dynsections.js b/src/dynsections.js
deleted file mode 100644
index 85e1836..0000000
--- a/src/dynsections.js
+++ /dev/null
@@ -1,97 +0,0 @@
-function toggleVisibility(linkObj)
-{
- var base = $(linkObj).attr('id');
- var summary = $('#'+base+'-summary');
- var content = $('#'+base+'-content');
- var trigger = $('#'+base+'-trigger');
- var src=$(trigger).attr('src');
- if (content.is(':visible')===true) {
-   content.hide();
-   summary.show();
-   $(linkObj).addClass('closed').removeClass('opened');
-   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
- } else {
-   content.show();
-   summary.hide();
-   $(linkObj).removeClass('closed').addClass('opened');
-   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
- } 
- return false;
-}
-
-function updateStripes()
-{
-  $('table.directory tr').
-       removeClass('even').filter(':visible:even').addClass('even');
-}
-
-function toggleLevel(level)
-{
-  $('table.directory tr').each(function() {
-    var l = this.id.split('_').length-1;
-    var i = $('#img'+this.id.substring(3));
-    var a = $('#arr'+this.id.substring(3));
-    if (l<level+1) {
-      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
-      a.html('&#9660;');
-      $(this).show();
-    } else if (l==level+1) {
-      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
-      a.html('&#9658;');
-      $(this).show();
-    } else {
-      $(this).hide();
-    }
-  });
-  updateStripes();
-}
-
-function toggleFolder(id)
-{
-  // the clicked row
-  var currentRow = $('#row_'+id);
-
-  // all rows after the clicked row
-  var rows = currentRow.nextAll("tr");
-
-  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
-
-  // only match elements AFTER this one (can't hide elements before)
-  var childRows = rows.filter(function() { return this.id.match(re); });
-
-  // first row is visible we are HIDING
-  if (childRows.filter(':first').is(':visible')===true) {
-    // replace down arrow by right arrow for current row
-    var currentRowSpans = currentRow.find("span");
-    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
-    currentRowSpans.filter(".arrow").html('&#9658;');
-    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
-  } else { // we are SHOWING
-    // replace right arrow by down arrow for current row
-    var currentRowSpans = currentRow.find("span");
-    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
-    currentRowSpans.filter(".arrow").html('&#9660;');
-    // replace down arrows by right arrows for child rows
-    var childRowsSpans = childRows.find("span");
-    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
-    childRowsSpans.filter(".arrow").html('&#9658;');
-    childRows.show(); //show all children
-  }
-  updateStripes();
-}
-
-
-function toggleInherit(id)
-{
-  var rows = $('tr.inherit.'+id);
-  var img = $('tr.inherit_header.'+id+' img');
-  var src = $(img).attr('src');
-  if (rows.filter(':first').is(':visible')===true) {
-    rows.css('display','none');
-    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
-  } else {
-    rows.css('display','table-row'); // using show() causes jump in firefox
-    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
-  }
-}
-
diff --git a/src/extsearch.js b/src/extsearch.js
deleted file mode 100644
index 920c12b..0000000
--- a/src/extsearch.js
+++ /dev/null
@@ -1,129 +0,0 @@
-function SearchBox(name, resultsPath, inFrame, label)
-{
-  this.searchLabel = label;
-  this.DOMSearchField = function()
-  {  return document.getElementById("MSearchField");  }
-  this.DOMSearchBox = function()
-  {  return document.getElementById("MSearchBox");  }
-  this.OnSearchFieldFocus = function(isActive)
-  {
-    if (isActive)
-    {
-      this.DOMSearchBox().className = 'MSearchBoxActive';
-      var searchField = this.DOMSearchField();
-      if (searchField.value == this.searchLabel) 
-      {
-        searchField.value = '';
-      }
-    }
-    else
-    {
-      this.DOMSearchBox().className = 'MSearchBoxInactive';
-      this.DOMSearchField().value   = this.searchLabel;
-    }
-  }
-}
-
-function trim(s) {
-  return s?s.replace(/^\s\s*/, '').replace(/\s\s*$/, ''):'';
-}
-
-function getURLParameter(name) {
-  return decodeURIComponent((new RegExp('[?|&]'+name+
-         '='+'([^&;]+?)(&|#|;|$)').exec(location.search)
-         ||[,""])[1].replace(/\+/g, '%20'))||null;
-}
-
-var entityMap = {
-  "&": "&amp;",
-  "<": "&lt;",
-  ">": "&gt;",
-  '"': '&quot;',
-  "'": '&#39;',
-  "/": '&#x2F;'
-};
-
-function escapeHtml(s) {
-  return String(s).replace(/[&<>"'\/]/g, function (s) {
-    return entityMap[s];
-  });
-}
-
-function searchFor(query,page,count) {
-  $.getJSON(serverUrl+"?cb=?",
-  {
-    n:count,
-    p:page,
-    q:query
-  },
-  function(data) {
-    var results = $('#searchresults');
-    $('#MSearchField').val(query);
-    if (data.hits>0) {
-      if (data.hits==1) {
-        results.html('<p>'+searchResultsText[1]+'</p>');
-      } else {
-        results.html('<p>'+searchResultsText[2].replace(/\$num/,data.hits)+'</p>');
-      }
-      var r='<table>';
-      $.each(data.items, function(i,item){
-        var prefix = tagMap[item.tag];
-        if (prefix) prefix+='/'; else prefix='';
-        r+='<tr class="searchresult">'+
-           '<td align="right">'+(data.first+i+1)+'.</td>'+
-           '<td>'+escapeHtml(item.type)+'&#160;'+
-                '<a href="'+escapeHtml(prefix+item.url)+
-                '">'+escapeHtml(item.name)+'</a>';
-        if (item.type=="source") {
-          var l=item.url.match(/[1-9][0-9]*$/);
-          if (l) r+=' at line '+parseInt(l[0]);
-        }
-        r+='</td>';
-        for (var i=0;i<item.fragments.length;i++)
-        {
-          r+='<tr><td></td><td>'+item.fragments[i]+'</td></tr>';
-        }
-        r+='</tr>';
-      });
-      r+='</table>';
-      if (data.pages>1) // write multi page navigation bar
-      {
-        r+='<div class="searchpages">';
-        if (data.page>0)
-        {
-          r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+(page-1).toString()+','+count.toString()+')">&laquo;</a></span>&nbsp;';
-        }
-        var firstPage = data.page-5;
-        var lastPage  = data.page+5;
-        if (firstPage<0)
-        {
-          lastPage-=firstPage;
-          firstPage=0;
-        }  
-        if (lastPage>data.pages)
-        {
-          lastPage=data.pages;
-        }
-        for(var i=firstPage;i<lastPage;i++)
-        {
-          if (i==data.page)
-          {
-            r+='<span class="pages"><b>'+(i+1).toString()+'</b></span>&nbsp;';
-          }
-          else
-          {
-            r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+i.toString()+','+count.toString()+')">'+(i+1).toString()+'</a></span>&nbsp;';
-          }
-        }
-        if (data.page+1<data.pages)
-        {
-          r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+(page+1).toString()+','+count.toString()+')">&raquo;</a></span>';
-        }
-        r+='</div>';
-      }
-      results.append(r);
-    } else {
-      results.html('<p>'+searchResultsText[0]+'</p>');
-    }
-  });
-}
diff --git a/src/footer.html b/src/footer.html
deleted file mode 100644
index d2aa9e6..0000000
--- a/src/footer.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!-- start footer part -->
-<!--BEGIN GENERATE_TREEVIEW-->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
-  <ul>
-    $navpath
-    <li class="footer">$generatedby
-    <a href="http://www.doxygen.org/index.html">
-    <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
-  </ul>
-</div>
-<!--END GENERATE_TREEVIEW-->
-<!--BEGIN !GENERATE_TREEVIEW-->
-<hr class="footer"/><address class="footer"><small>
-$generatedby &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
-</a> $doxygenversion
-</small></address>
-<!--END !GENERATE_TREEVIEW-->
-</body>
-</html>
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 4613a92..f45d956 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -36,549 +36,10 @@
 #include "htmldocvisitor.h"
 #include "filedef.h"
 #include "util.h"
+#include "resourcemgr.h"
 
 #define MAX_INDENT 1024
 
-
-static const char navtree_script[]=
-#include "navtree.js.h"
-;
-
-static const char resize_script[]=
-#include "resize.js.h"
-;
-
-static const char navtree_css[]=
-#include "navtree.css.h"
-;
-
-static unsigned char blank_png[352] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-static unsigned char folderopen_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,228,195,193,190,187,218,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,195,215,221,225,225,178,176,176,175,176,178,180,255,255,255,255,255,255,
-  255,255,255,255,255,255,189,206,215,219,226,220,214,212,207,204,200,176,255,255,255,255,255,255,
-  255,255,255,255,168,154,153,153,152,152,151,149,150,150,149,147,146,145,145,167,255,255,255,255,
-  255,255,255,255,146,187,187,188,187,187,185,183,183,182,179,178,175,173,174,145,255,255,255,255,
-  255,255,255,255,146,180,182,182,181,181,179,178,176,174,173,171,169,170,168,144,255,255,255,255,
-  255,255,255,255,144,173,176,176,177,175,175,174,171,170,168,168,166,166,164,143,255,255,255,255,
-  255,255,255,255,142,168,170,171,170,170,169,168,166,166,165,163,163,164,162,142,255,255,255,255,
-  255,255,255,255,141,162,166,164,164,165,163,163,161,161,161,161,161,160,159,141,255,255,255,255,
-  255,255,255,255,138,157,159,159,158,158,158,157,157,157,157,156,157,157,155,138,255,255,255,255,
-  255,255,255,255,137,154,153,154,154,153,154,154,154,153,154,154,154,154,154,137,255,255,255,255,
-  255,255,255,255,137,154,154,154,154,154,154,154,153,154,154,153,153,153,154,137,255,255,255,255,
-  255,255,255,255,137,125,125,125,125,124,125,124,124,125,124,124,125,124,125,138,255,255,255,255,
-  255,255,255,255,212,209,204,199,193,190,186,183,180,181,185,188,192,197,202,203,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char folderopen_a_png[528] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-static unsigned char folderclosed_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,197,155,155,155,155,196,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,155,191,191,191,192,155,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,168,144,180,180,181,180,145,145,146,145,146,146,146,146,145,167,255,255,255,255,
-  255,255,255,255,147,225,226,226,225,226,225,221,221,219,215,214,212,211,213,145,255,255,255,255,
-  255,255,255,255,147,212,211,211,210,211,210,205,206,205,201,201,199,196,201,145,255,255,255,255,
-  255,255,255,255,146,204,203,204,203,203,202,200,200,197,197,196,195,194,196,145,255,255,255,255,
-  255,255,255,255,146,202,200,201,201,200,199,198,198,195,194,194,193,192,194,145,255,255,255,255,
-  255,255,255,255,145,200,196,196,196,195,195,193,192,192,190,189,189,189,191,143,255,255,255,255,
-  255,255,255,255,143,192,191,190,190,189,189,188,186,187,186,185,185,185,187,142,255,255,255,255,
-  255,255,255,255,142,186,184,183,182,183,182,183,180,181,181,181,181,181,182,141,255,255,255,255,
-  255,255,255,255,138,177,175,176,176,177,177,176,175,174,175,175,175,174,176,138,255,255,255,255,
-  255,255,255,255,138,173,169,170,168,170,169,170,170,169,171,171,171,171,174,137,255,255,255,255,
-  255,255,255,255,138,166,163,163,162,162,162,162,162,162,164,163,163,163,166,137,255,255,255,255,
-  255,255,255,255,137,124,124,124,125,124,124,124,125,125,124,124,125,124,125,138,255,255,255,255,
-  255,255,255,255,231,231,228,225,222,220,218,216,214,215,217,219,221,224,227,226,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char folderclosed_a_png[528] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,
-    0,  0,  0,  0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-static unsigned char doc_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,218,214,208,208,204,191,179,190,197,209,231,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,195,224,226,226,222,214,204,181,203,229,188,225,255,255,255,255,255,255,255,
-  255,255,255,255,255,198,226,228,227,227,224,215,203,180,252,229,184,224,255,255,255,255,255,255,
-  255,255,255,255,255,198,229,230,229,229,228,224,214,154,252,252,229,187,235,255,255,255,255,255,
-  255,255,255,255,255,198,232,233,233,232,231,230,223,176,154,144,165,177,216,255,255,255,255,255,
-  255,255,255,255,255,198,236,236,216,226,238,219,232,225,209,190,189,166,193,255,255,255,255,255,
-  255,255,255,255,255,198,239,240,178,177,230,175,169,184,188,219,208,189,187,255,255,255,255,255,
-  255,255,255,255,255,198,241,242,240,218,237,236,240,235,241,244,221,208,182,255,255,255,255,255,
-  255,255,255,255,255,198,243,243,188,154,183,158,166,140,185,198,231,219,177,255,255,255,255,255,
-  255,255,255,255,255,198,243,245,248,228,241,241,226,249,237,227,239,232,177,255,255,255,255,255,
-  255,255,255,255,255,198,244,246,213,172,163,149,171,200,167,149,242,239,177,255,255,255,255,255,
-  255,255,255,255,255,198,249,248,240,218,237,236,240,235,241,244,244,242,177,255,255,255,255,255,
-  255,255,255,255,255,198,249,251,188,155,184,158,166,140,185,198,246,244,177,255,255,255,255,255,
-  255,255,255,255,255,198,251,253,248,228,241,241,226,249,237,227,249,246,177,255,255,255,255,255,
-  255,255,255,255,255,196,253,252,252,252,252,251,251,250,250,249,249,248,175,255,255,255,255,255,
-  255,255,255,255,255,194, 64, 30, 37, 37, 37, 37, 37, 37, 37, 37, 30, 64,188,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char doc_a_png[528] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-#if 0
-static unsigned char module_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,255,193,128,136,255,255,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,255,213,128,170,255,255,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,247,247,128,196,255,247,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,213,255,153,230,255,213,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,187,255,187,255,230,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,153,255,247,255,196,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,128,247,255,255,170,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,128,213,255,255,136,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,255,255,128,187,255,230,138,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char namespace_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,226,128,128,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,255,189,128,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,255,244,141,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,255,255,220,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,226,255,255,220,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,198,220,255,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,198,141,250,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,198,128,198,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,157,255,255,198,128,128,226,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char class_png[528] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,187,247,255,255,230,170,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,196,255,255,255,255,255,255,170,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,145,255,255,230,128,136,230,247,179,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,179,255,255,170,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,179,255,255,162,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,179,255,255,170,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,145,255,255,221,128,128,221,255,179,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,196,255,255,255,255,255,255,187,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,187,247,255,255,240,179,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
-  255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-
-static unsigned char letter_a_png[528] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0, 60,156,204,204,204,204,204,204,204,204,156, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0, 78,255,255,255,255,255,255,255,255,255,255,255,252, 72,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,210,255,255,255,255,255,255,255,255,255,255,255,255,207,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,240,255,255,255,255,255,255,255,255,255,255,255,255,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,222,255,255,255,255,255,255,255,255,255,255,255,255,219,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,111,255,255,255,255,255,255,255,255,255,255,255,255, 99,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0, 99,198,204,204,204,204,204,204,204,204,195, 90,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-#endif
-
-
-static unsigned char arrow_right_png[352] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,152,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char arrow_right_a_png[352] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,223, 75,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,176, 33,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,248,117,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,255,255,211, 60,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,255,255,255,255, 77,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,255,255,211, 60,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,255,248,117,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,255,255,176, 33,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,223, 75,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-static unsigned char arrow_down_png[352] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
-  255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
-  255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
-  255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
-  255,255,255,255,255,152,152,152,152,152,255,255,255,255,255,255,
-  255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,152,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char arrow_down_a_png[352] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,231,255,255,255,255,255,255,255,216,  0,  0,  0,  0,
-    0,  0,  0, 87,255,255,255,255,255,255,255, 65,  0,  0,  0,  0,
-    0,  0,  0,  0,186,255,255,255,255,255,164,  0,  0,  0,  0,  0,
-    0,  0,  0,  0, 38,251,255,255,255,241, 25,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,127,255,255,255,107,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,221,255,204,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0, 72,253, 52,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0, 77,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-#define SPLITBAR_LINE 170,242,224,202,183,170
-#define SPLITBAR_BLOCK2  SPLITBAR_LINE    , SPLITBAR_LINE 
-#define SPLITBAR_BLOCK4  SPLITBAR_BLOCK2  , SPLITBAR_BLOCK2 
-#define SPLITBAR_BLOCK8  SPLITBAR_BLOCK4  , SPLITBAR_BLOCK4 
-#define SPLITBAR_BLOCK16 SPLITBAR_BLOCK8  , SPLITBAR_BLOCK8 
-#define SPLITBAR_BLOCK32 SPLITBAR_BLOCK16 , SPLITBAR_BLOCK16
-
-#define SPLITBAR_ALTLINE1 170,242,170,202,170,170
-#define SPLITBAR_ALTLINE2 170,243,224,255,183,255
-#define SPLITBAR_ALTBLOCK2 SPLITBAR_ALTLINE1  , SPLITBAR_ALTLINE2 
-#define SPLITBAR_ALTBLOCK4 SPLITBAR_ALTBLOCK2 , SPLITBAR_ALTBLOCK2 
-#define SPLITBAR_ALTBLOCK8 SPLITBAR_ALTBLOCK4 , SPLITBAR_ALTBLOCK4
-
-static unsigned char splitbar_png[32*32*6] =
-{
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK8,
-  SPLITBAR_BLOCK8,
-  SPLITBAR_ALTBLOCK8,
-  SPLITBAR_BLOCK8,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32,
-  SPLITBAR_BLOCK32
-};
-
-struct FTVImageInfo
-{
-  const char *alt;
-  const char *name;
-  const unsigned char *data;
-  //unsigned int len;
-  unsigned short width, height;
-};
-
-//extern FTVImageInfo image_info[];
-
-#if 0
-#define FTVIMG_blank        0
-#define FTVIMG_doc          1
-#define FTVIMG_folderclosed 2
-#define FTVIMG_folderopen   3
-#define FTVIMG_lastnode     4
-#define FTVIMG_link         5
-#define FTVIMG_mlastnode    6
-#define FTVIMG_mnode        7
-#define FTVIMG_node         8
-#define FTVIMG_plastnode    9
-#define FTVIMG_pnode       10
-#define FTVIMG_vertline    11
-#define FTVIMG_ns          12
-#define FTVIMG_cl          13
-#define FTVIMG_mo          14
-
-#define FTV_S(name) #name
-#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
-#define FTVIMG_INDEX(name) FTVIMG_ ## name
-#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
-#define FTV_IMGATTRIBS(name) \
-    "src=\"" FTV_ICON_FILE(name) "\" " \
-    "alt=\"" << FTV_INFO(name).alt << "\" " \
-    "width=\"" << FTV_INFO(name).width << "\" " \
-    "height=\"" << FTV_INFO(name).height << "\" "
-
-
-static FTVImageInfo image_info[] =
-{
-  { "&#160;", "ftv2blank.png",    0 /*ftv2blank_png*/        /*,174*/,16,22 },
-  { "*",  "ftv2doc.png",          0 /*ftv2doc_png*/          /*,255*/,24,22 },
-  { "+",  "ftv2folderclosed.png", 0 /*ftv2folderclosed_png*/ /*,259*/,24,22 },
-  { "-",  "ftv2folderopen.png",   0 /*ftv2folderopen_png*/   /*,261*/,24,22 },
-  { "\\", "ftv2lastnode.png",     0 /*ftv2lastnode_png*/     /*,233*/,16,22 },
-  { "-",  "ftv2link.png",         0 /*ftv2link_png*/         /*,358*/,24,22 },
-  { "\\", "ftv2mlastnode.png",    0 /*ftv2mlastnode_png*/    /*,160*/,16,22 },
-  { "o",  "ftv2mnode.png",        0 /*ftv2mnode_png*/        /*,194*/,16,22 },
-  { "o",  "ftv2node.png",         0 /*ftv2node_png*/         /*,235*/,16,22 },
-  { "\\", "ftv2plastnode.png",    0 /*ftv2plastnode_png*/    /*,165*/,16,22 },
-  { "o",  "ftv2pnode.png",        0 /*ftv2pnode_png*/        /*,200*/,16,22 },
-  { "|",  "ftv2vertline.png",     0 /*ftv2vertline_png*/     /*,229*/,16,22 },
-  { "N",  "ftv2ns.png",           0 /*ftv2vertline_png*/     /*,352*/,24,22 },
-  { "C",  "ftv2cl.png",           0 /*ftv2vertline_png*/     /*,352*/,24,22 },
-  { "M",  "ftv2mo.png",           0 /*ftv2vertline_png*/     /*,352*/,24,22 },
-  {   0,  0,                      0                          /*,  0*/, 0, 0 }
-};
-#endif
-
-static ColoredImgDataItem ftv_image_data[] =
-{
-  { "ftv2blank.png",        16,  22, blank_png,        blank_png          },
-  { "ftv2doc.png",          24,  22, doc_png,          doc_a_png          },
-  { "ftv2folderclosed.png", 24,  22, folderclosed_png, folderclosed_a_png },
-  { "ftv2folderopen.png",   24,  22, folderopen_png,   folderopen_a_png   },
-//  { "ftv2ns.png",           24,  22, namespace_png,    letter_a_png       },
-//  { "ftv2mo.png",           24,  22, module_png,       letter_a_png       },
-//  { "ftv2cl.png",           24,  22, class_png,        letter_a_png       },
-  { "ftv2lastnode.png",     16,  22, blank_png,        blank_png          },
-  { "ftv2link.png",         24,  22, doc_png,          doc_a_png          },
-  { "ftv2mlastnode.png",    16,  22, arrow_down_png,   arrow_down_a_png   },
-  { "ftv2mnode.png",        16,  22, arrow_down_png,   arrow_down_a_png   },
-  { "ftv2node.png",         16,  22, blank_png,        blank_png          },
-  { "ftv2plastnode.png",    16,  22, arrow_right_png,  arrow_right_a_png  },
-  { "ftv2pnode.png",        16,  22, arrow_right_png,  arrow_right_a_png  },
-  { "ftv2vertline.png",     16,  22, blank_png,        blank_png          },
-  { "ftv2splitbar.png",      6,1024, splitbar_png,     0                  },
-  { 0,                       0,   0, 0,                0                  }
-};
-
 static int folderId=1;
 
 struct FTVNode
@@ -1118,7 +579,7 @@ static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t,
 static void generateJSNavTree(const QList<FTVNode> &nodeList)
 {
   QCString htmlOutput = Config_getString("HTML_OUTPUT");
-  QFile f(htmlOutput+"/navtree.js");
+  QFile f(htmlOutput+"/navtreedata.js");
   NavIndexEntryList navIndex;
   if (f.open(IO_WriteOnly) /*&& fidx.open(IO_WriteOnly)*/)
   {
@@ -1218,8 +679,8 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
     }
     t << endl << "var SYNCONMSG = '"  << theTranslator->trPanelSynchronisationTooltip(FALSE) << "';"; 
     t << endl << "var SYNCOFFMSG = '" << theTranslator->trPanelSynchronisationTooltip(TRUE)  << "';"; 
-    t << endl << navtree_script;
   }
+  ResourceMgr::instance().copyResource("navtree.js",htmlOutput);
 }
 
 //-----------------------------------------------------------
@@ -1228,7 +689,13 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
 void FTVHelp::generateTreeViewImages()
 {
   QCString dname=Config_getString("HTML_OUTPUT");
-  writeColoredImgData(dname,ftv_image_data);
+  const ResourceMgr &rm = ResourceMgr::instance();
+  rm.copyResource("doc.luma",dname);
+  rm.copyResource("folderopen.luma",dname);
+  rm.copyResource("folderclosed.luma",dname);
+  rm.copyResource("arrowdown.luma",dname);
+  rm.copyResource("arrowright.luma",dname);
+  rm.copyResource("splitbar.lum",dname);
 }
 
 // new style scripts
@@ -1239,28 +706,9 @@ void FTVHelp::generateTreeViewScripts()
   // generate navtree.js & navtreeindex.js
   generateJSNavTree(m_indentNodes[0]);
 
-  // generate resize.js
-  {
-    QFile f(htmlOutput+"/resize.js");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << resize_script;
-    }
-  }
-  // generate navtree.css
-  {
-    QFile f(htmlOutput+"/navtree.css");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << substitute(
-              replaceColorMarkers(navtree_css),
-              "$width",
-              QCString().setNum(Config_getInt("TREEVIEW_WIDTH"))+"px"
-             );
-    }
-  }
+  // copy resize.js & navtree.css
+  ResourceMgr::instance().copyResource("resize.js",htmlOutput);
+  ResourceMgr::instance().copyResource("navtree.css",htmlOutput);
 }
 
 // write tree inside page
diff --git a/src/header.html b/src/header.html
deleted file mode 100644
index 70305df..0000000
--- a/src/header.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen $doxygenversion"/>
-<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
-<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
-<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="$relpath^jquery.js"></script>
-<script type="text/javascript" src="$relpath^dynsections.js"></script>
-$treeview
-$search
-$mathjax
-<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
-$extrastylesheet
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-
-<!--BEGIN TITLEAREA-->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <!--BEGIN PROJECT_LOGO-->
-  <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
-  <!--END PROJECT_LOGO-->
-  <!--BEGIN PROJECT_NAME-->
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">$projectname
-   <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
-   </div>
-   <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
-  </td>
-  <!--END PROJECT_NAME-->
-  <!--BEGIN !PROJECT_NAME-->
-   <!--BEGIN PROJECT_BRIEF-->
-    <td style="padding-left: 0.5em;">
-    <div id="projectbrief">$projectbrief</div>
-    </td>
-   <!--END PROJECT_BRIEF-->
-  <!--END !PROJECT_NAME-->
-  <!--BEGIN DISABLE_INDEX-->
-   <!--BEGIN SEARCHENGINE-->
-   <td>$searchbox</td>
-   <!--END SEARCHENGINE-->
-  <!--END DISABLE_INDEX-->
- </tr>
- </tbody>
-</table>
-</div>
-<!--END TITLEAREA-->
-<!-- end header part -->
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 1ee3c16..c4bd80a 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -41,826 +41,16 @@
 #include "image.h"
 #include "ftvhelp.h"
 #include "bufstr.h"
+#include "resourcemgr.h"
 
 
 //#define DBG_HTML(x) x;
-#define DBG_HTML(x) 
-
-static const char defaultHtmlHeader[] =
-#include "header.html.h"
-;
-
-static const char defaultHtmlFooter[] =
-#include "footer.html.h"
-;
-
-static const char defaultStyleSheet[] = 
-#include "doxygen.css.h"
-;
-
-static const char search_functions_script[]=
-#include "search_functions.php.h"
-;
-
-static const char search_opensearch_script[]=
-#include "search_opensearch.php.h"
-;
-
-static const char search_styleSheet[] =
-#include "search.css.h"
-;
-
-static const char search_jquery_script1[]=
-#include "jquery_p1.js.h"
-;
-
-static const char search_jquery_script2[]=
-#include "jquery_p2.js.h"
-;
-
-static const char search_jquery_script3[]=
-#include "jquery_p3.js.h"
-;
-
-static const char search_jquery_script4[]=
-#include "jquery_ui.js.h"
-;
-
-static const char search_jquery_script5[]=
-#include "jquery_fx.js.h"
-;
-
-static const char search_jquery_script6[]=
-#include "jquery_pt.js.h"
-;
-
-static const char svgpan_script[]=
-#include "svgpan.js.h"
-;
-
-static const char dynsections_script[]=
-#include "dynsections.js.h"
-;
-
-static const char extsearch_script[]=
-#include "extsearch.js.h"
-;
+#define DBG_HTML(x)
 
 static QCString g_header;
 static QCString g_footer;
 static QCString g_mathjax_code;
 
-//------------------------- Pictures for the Tabs ------------------------
-
-// active tab background luma
-static unsigned char tab_a_png[36] =
-{
-   31,  42,  59,  69,  73,  74,  75,  77,  77,
-   77,  79,  80,  80,  82,  81,  83,  84,  86,
-   87,  88,  89,  90,  91,  91,  93,  94,  94,
-   96,  96,  97,  98,  98,  99,  99,  99, 100
-};
-
-// normal tab background luma
-static unsigned char tab_b_png[36] =
-{
-    218, 228, 235, 233, 230, 227, 225, 222, 221,
-    218, 217, 215, 214, 213, 212, 211, 210, 209,
-    209, 197, 198, 199, 200, 201, 202, 203, 204,
-    205, 207, 209, 211, 213, 217, 219, 206, 188 
-};
-
-// hovering tab background luma
-static unsigned char tab_h_png[36] =
-{
-    181, 191, 198, 196, 193, 190, 188, 185, 184,
-    181, 180, 178, 177, 176, 175, 174, 173, 172,
-    172, 154, 155, 156, 157, 158, 159, 160, 161,
-    162, 164, 166, 168, 170, 174, 176, 163, 145
-};
-
-// shadowed header
-static unsigned char header_png[12] = 
-{
-  255, 240, 241, 242, 243, 244, 
-  245, 246, 247, 248, 249, 250
-};
-
-// function header
-static unsigned char func_header_png[56] =
-{
-  248, 247, 246, 245, 244, 243, 242, 241,
-  240, 239, 238, 237, 236, 235, 234, 233,
-  232, 231, 230, 229, 228, 223, 223, 223,
-  223, 223, 223, 223, 223, 223, 223, 223,
-  224, 224, 224, 224, 225, 225, 225, 225,
-  225, 226, 226, 226, 227, 227, 227, 227,
-  228, 228, 228, 229, 229, 229, 229, 229
-};
-
-// tab separator
-static unsigned char tab_s_png[36] =
-{
-  187, 186, 185, 183, 182, 181, 180, 178, 176,
-  174, 173, 171, 169, 167, 164, 163, 161, 158,
-  156, 154, 152, 150, 148, 145, 143, 141, 140,
-  138, 136, 134, 131, 131, 128, 126, 125, 124
-};
-
-// breadcrumbs luma
-static unsigned char bc_s_png[240] =
-{
-  150,187,187,148,148,148,148,148,
-  147,175,186,147,147,147,147,147,
-  146,153,185,185,146,146,146,146,
-  144,144,177,183,144,144,144,144,
-  144,144,159,182,144,144,144,144,
-  143,143,144,179,181,143,143,143,
-  142,142,142,165,180,142,142,142,
-  141,141,141,144,178,178,141,141,
-  139,139,139,139,167,176,139,139,
-  137,137,137,137,146,174,137,137,
-  137,137,137,137,137,169,173,137,
-  135,135,135,135,135,150,171,135,
-  133,133,133,133,133,135,167,169,
-  132,132,132,132,132,132,154,167,
-  129,129,129,129,129,129,140,164,
-  129,129,129,129,129,129,154,163,
-  127,127,127,127,127,128,161,161,
-  125,125,125,125,125,141,158,125,
-  123,123,123,123,123,152,156,123,
-  121,121,121,121,129,154,121,121,
-  120,120,120,120,143,152,120,120,
-  118,118,118,120,150,150,118,118,
-  117,117,117,132,148,117,117,117,
-  114,114,114,142,145,114,114,114,
-  113,113,120,143,113,113,113,113,
-  111,111,133,141,111,111,111,111,
-  110,112,140,140,110,110,110,110,
-  109,124,138,109,109,109,109,109,
-  107,133,136,107,107,107,107,107,
-  111,134,106,106,106,106,106,106
-};
-
-// breadcrumbs alpha map
-static unsigned char bc_s_a_png[240] =
-{
-  241,241, 21,  0,  0,  0,  0,  0,
-  162,205,117,  0,  0,  0,  0,  0,
-   54,231,225,  3,  0,  0,  0,  0,
-    0,198,215, 78,  0,  0,  0,  0,
-    0, 93,211,186,  0,  0,  0,  0,
-    0,  6,232,235, 42,  0,  0,  0,
-    0,  0,132,203,147,  0,  0,  0,
-    0,  0, 27,242,241, 15,  0,  0,
-    0,  0,  0,168,205,108,  0,  0,
-    0,  0,  0, 63,228,219,  0,  0,
-    0,  0,  0,  0,207,221, 72,  0,
-    0,  0,  0,  0,102,208,177,  0,
-    0,  0,  0,  0,  9,238,240, 36,
-    0,  0,  0,  0,  0,138,201,138,
-    0,  0,  0,  0,  0, 77,187,158,
-    0,  0,  0,  0,  0,159,204,120,
-    0,  0,  0,  0, 15,241,241, 21,
-    0,  0,  0,  0,111,208,171,  0,
-    0,  0,  0,  0,210,222, 66,  0,
-    0,  0,  0, 60,227,219,  0,  0,
-    0,  0,  0,162,204,114,  0,  0,
-    0,  0, 18,238,238, 21,  0,  0,
-    0,  0,114,205,165,  0,  0,  0,
-    0,  0,216,225, 60,  0,  0,  0,
-    0, 66,226,216,  0,  0,  0,  0,
-    0,165,204,111,  0,  0,  0,  0,
-   21,241,241, 18,  0,  0,  0,  0,
-  117,203,159,  0,  0,  0,  0,  0,
-  219,227, 57,  0,  0,  0,  0,  0,
-  211,201,  0,  0,  0,  0,  0,  0
-};
-
-// doxygen logo luma
-static unsigned char doxygen_png[3224] =
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 91, 91, 91, 91, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32,253,253,253,253, 32, 32,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32,251,251,251,251, 32, 32,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,255,255,255,255,255,255,255,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249,249, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249, 32, 32, 32, 32, 32,249, 32, 32, 32, 32, 32,255,255,255,
-   32, 32, 32, 32, 46,132,190,190,147, 61,247,247,247,247, 32, 32,247,247, 32, 32,118,161,190,190,161,118, 32, 32,247, 32, 46, 89, 89, 89, 89, 46, 32,247,247, 32, 89, 89, 89, 89, 61, 89, 89, 89, 89, 46, 32,247, 32, 46, 89, 89, 89, 89, 32,247, 32, 32,118,175,190,161, 89, 61, 89, 89, 89, 61, 32,247,247,247, 32, 32,104,147,190,190,190,132, 89, 32, 32,247,247, 32, 46, 89, 89, 89, 75, 32, 89,161,190,161, 75, 32,255,255,
-   32, 32, 32, 74,230,244,244,244,244,244,244,244,244,244, 32, 32,244, 32, 74,216,244,244,244,244,244,244,216, 74, 32,244, 32,187,244,244,244,159, 32,244, 32,117,244,244,244,230, 46,173,244,244,244,131, 32,244, 32,131,244,244,244,173, 32, 32, 46,173,244,244,244,244,244,230,244,244,244,131, 32,244,244, 32, 74,202,244,244,244,244,244,244,244,173, 46, 32,244, 32, 89,244,244,244,187,145,244,244,244,244,244, 89, 32,255,
-   32, 32, 46,213,241,241,241,241,241,241,241,241,241,241, 32, 32, 32, 60,227,241,241,241,241,241,241,241,241,227, 60, 32, 32, 46,227,241,241,241,102, 32, 60,227,241,241,241, 88, 32,116,241,241,241,199, 32,241, 32,185,241,241,241,116, 32, 32,143,241,241,241,241,241,241,241,241,241,241,130, 32,241, 32, 74,227,241,241,241,199,185,241,241,241,241,171, 32,241, 32, 88,241,241,241,241,241,241,241,241,241,241,199, 32,255,
-   32, 32,128,237,237,237,223,128, 87,128,237,237,237,237, 32, 32, 32,182,237,237,237,196,100,100,196,237,237,237,182, 32,237, 32,100,237,237,237,223, 59,196,237,237,237,141, 32, 32, 46,237,237,237,237, 59, 32, 46,237,237,237,237, 46, 32, 59,237,237,237,237,169, 87, 87,182,237,237,237,128, 32,237, 32,196,237,237,237, 87, 32, 32, 73,223,237,237,237, 73, 32, 32, 87,237,237,237,237,223,182,223,237,237,237,237, 46, 32,
-   32, 32,207,234,234,234,113, 32, 32, 32,234,234,234,234, 32, 32, 59,234,234,234,221, 45, 32, 32, 45,221,234,234,234, 59, 32,234, 32,140,234,234,234,221,234,234,234,194, 32, 32,234, 32,167,234,234,234,126, 32, 99,234,234,234,167, 32, 32,126,234,234,234,180, 32, 32, 32,126,234,234,234,126, 32, 32, 99,234,234,234,167, 32, 32, 32, 32,153,234,234,234,126, 32, 32, 86,234,234,234,207, 45, 32, 45,234,234,234,234, 86, 32,
-   32, 45,231,231,231,218, 32, 32, 32, 32,231,231,231,231, 32, 32, 98,231,231,231,165, 32,231,231, 32,165,231,231,231, 98, 32,231, 32, 45,191,231,231,231,231,231,218, 72, 32,231,231, 32, 98,231,231,231,165, 32,151,231,231,231,112, 32, 32,165,231,231,231,112, 32,231, 32,125,231,231,231,125, 32, 32,138,231,231,231,178,125,125,125,125,178,231,231,231,178, 32, 32, 85,231,231,231,178, 32,255, 32,191,231,231,231, 85, 32,
-   32, 84,227,227,227,175, 32, 32, 32, 32,227,227,227,227, 32, 32,123,227,227,227,123, 32,227,227, 32,123,227,227,227,123, 32,227,227, 32, 71,227,227,227,227,227,123, 32,227,227,227,227, 32,214,227,227,227, 45,201,227,227,227, 45, 32, 32,175,227,227,227, 84, 32,227, 32,123,227,227,227,123, 32, 32,175,227,227,227,227,227,227,227,227,227,227,227,227,175, 32, 32, 84,227,227,227,175, 32,255, 32,175,227,227,227, 84, 32,
-   32, 83,223,223,223,172, 32, 32, 32, 32,223,223,223,223, 32, 32,121,223,223,223,121, 32,223,223, 32,121,223,223,223,121, 32,223,223,223, 32,172,223,223,223,210, 45, 32,223,223,223,223, 32,147,223,223,223,134,223,223,223,147, 32,223, 32,172,223,223,223, 83, 32,223, 32,121,223,223,223,121, 32, 32,172,223,223,223,223,223,223,223,223,223,223,223,223,172, 32, 32, 83,223,223,223,172, 32,255, 32,172,223,223,223, 83, 32,
-   32, 82,220,220,220,170, 32, 32, 32, 32,220,220,220,220, 32, 32,120,220,220,220,120, 32,220,220, 32,120,220,220,220,120, 32,220,220, 32, 95,220,220,220,220,220,132, 32,220,220,220,220, 32, 95,220,220,220,207,220,220,220, 95, 32,220, 32,170,220,220,220,107, 32,220, 32,120,220,220,220,120, 32, 32,170,220,220,220,132, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 82,220,220,220,170, 32,255, 32,170,220,220,220, 82, 32,
-   32, 57,216,216,216,216, 32, 32, 32, 32,216,216,216,216, 32, 32, 81,216,216,216,167, 32,216,216, 32,155,216,216,216, 81, 32,216, 32, 57,204,216,216,216,216,216,216, 93, 32,216,216,216,216, 32,204,216,216,216,216,216,204, 32,216,216, 32,118,216,216,216,167, 32, 32, 32,130,216,216,216,118, 32, 32,118,216,216,216,191, 32, 32,216,216,216, 32, 32, 44, 57, 32, 32, 81,216,216,216,167, 32,255, 32,167,216,216,216, 81, 32,
-   32, 32,189,213,213,213,116, 32, 32, 80,213,213,213,213, 32, 32, 44,201,213,213,213, 68, 32, 32, 68,213,213,213,213, 44, 32, 32, 32,165,213,213,213,165,213,213,213,201, 44, 32,213,213,213, 32,129,213,213,213,213,213,141, 32,213,213, 32, 80,213,213,213,213,165,116,153,213,213,213,213,116, 32, 32, 56,213,213,213,213,153, 56, 32, 32, 32, 44,104,189,116, 32, 32, 80,213,213,213,165, 32,255, 32,165,213,213,213, 80, 32,
-   32, 32,139,210,210,210,210,174,174,210,210,210,210,210, 32, 32, 32,127,210,210,210,198,127,127,198,210,210,210,127, 32,210, 32,115,210,210,210,174, 44,139,210,210,210,163, 32, 32,210,210, 32, 68,210,210,210,210,210, 91, 32,210,210,210, 32,174,210,210,210,210,210,210,210,210,210,210,115, 32,210, 32,127,210,210,210,210,210,174,163,163,210,210,210,115, 32, 32, 79,210,210,210,163, 32,255, 32,163,210,210,210, 79, 32,
-   32, 32, 55,194,206,206,206,206,206,194,206,206,206,206, 32, 32, 32, 44,171,206,206,206,206,206,206,206,206,171, 44, 32, 32, 67,206,206,206,206, 67, 32, 44,183,206,206,206,113, 32,206,206,206, 32,183,206,206,206,194, 32,206,206,206,206, 32, 67,194,206,206,206,206,206,171,206,206,206,113, 32,206, 32, 32,136,206,206,206,206,206,206,206,206,206,206,113, 32, 32, 78,206,206,206,160, 32,255, 32,160,206,206,206, 78, 32,
-   32, 32, 32,100,192,203,203,203,157, 55,203,203,203,203, 32, 32,203, 32, 43,135,203,203,203,203,203,203,135, 43, 32, 32, 43,180,203,203,203,112, 32,203, 32, 66,203,203,203,203, 66, 32,203,203, 32,157,203,203,203,135, 32,203,203,203,203,203, 32, 43,112,157,157,123, 55,112,203,203,203,112, 32,203,203, 32, 32, 78,146,203,203,203,203,203,203,169,123, 55, 32, 32, 78,203,203,203,157, 32,255, 32,157,203,203,203, 78, 32,
-   32, 32, 32, 32, 54,110,110, 88, 32, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 54, 99,110,110, 99, 54, 32, 32,200,200, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,200,200, 32, 54,200,200,200,200, 77, 32,200,200,200,200,200, 32, 32, 32, 32, 32, 32, 32,166,200,200,200, 88, 32,200,200,200,200, 32, 32, 32, 66, 77, 77, 77, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,255, 32, 32, 32, 32, 32, 32,255,
-   32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,198,198,198,198, 32, 32, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, 32,109,198,198,198,176, 32,198,198,198,198,198, 32, 98,121, 76, 32, 32, 54,109,198,198,198,198, 43, 32,198,198,198,198,198,198,198, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,255,255,255,255,255,255,255,255,
-   32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 33,159,191,191,191,117, 36, 41, 41, 41, 41, 41, 34,108,191,191,191,191,191,191,191,191,191,117, 36, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
-   32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 78, 38, 64,190,192,192,192, 66, 66, 41, 41, 85,128, 65, 34,107,190,192,192,192,192,192,192,192,139, 48, 39, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
-   32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 96, 36, 95,147,148,148,139, 55, 41, 41, 85,121,128, 91, 38, 75,137,158,190,190,190,170,139, 97, 49, 37, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
-   32, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41, 36, 45, 45, 45, 48, 38, 41, 41, 76, 76, 76, 76, 76, 37, 34, 42, 33, 33, 33, 39, 48, 59, 41, 41, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41,255,
-   32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-// doxygen logo alpha map
-static unsigned char doxygen_a_png[3224] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66, 66, 66, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,145,247,247,247,247,145,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0, 16,115,181,181,132,247,247,247,247,247,247,  0,  0,  0,  0,  0, 99,148,181,181,148, 99,  0,  0,  0,  0, 16, 66, 66, 66, 66, 16,  0,  0,  0,  0, 66, 66, 66, 66, 33, 66, 66, 66, 66, 16,  0,  0,  0, 16, 66, 66, 66, 66,  0,  0,  0,  0, 99,165,181,148, 66, 33, 66, 66, 66, 33,  0,  0,  0,  0,  0,  0, 82,132,181,181,181,115, 66,  0,  0,  0,  0,  0, 16, 66, 66, 66, 49,  0, 66,148,181,148, 49,  0,  0,  0,
-    0,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247,  0,  0,  0,112,214,247,247,247,247,247,247,214,112,  0, 16,247,247,247,247,247,247, 46,  0,  0,145,247,247,247,247,247,247,247,247,247,247, 16,  0, 16,247,247,247,247,247, 66,  0, 63,165,247,247,247,247,247,247,247,247,247,247, 33,  0,  0,  0, 96,198,247,247,247,247,247,247,247,165, 63,  0,  0, 16,247,247,247,247,247,145,247,247,247,247,247,145,  0,  0,
-    0,  0,112,247,247,247,247,247,247,247,247,247,247,247,247,  0,  0,129,247,247,247,247,247,247,247,247,247,247,129,  0,181,247,247,247,247,247,148,  0,129,247,247,247,247,247,247,247,247,247,247,247,115,  0,115,247,247,247,247,247,165, 30,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247, 63,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247, 96,  0,
-    0, 16,247,247,247,247,247,247,247,247,247,247,247,247,247,  0, 79,247,247,247,247,247,247,247,247,247,247,247,247, 79, 79,247,247,247,247,247,247,129,247,247,247,247,247,247,129,247,247,247,247,247,198,  0,181,247,247,247,247,247, 99,145,247,247,247,247,247,247,247,247,247,247,247,247,115,  0, 96,247,247,247,247,247,247,247,247,247,247,247,247,165,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247,198,  0,
-    0,115,247,247,247,247,247,247,247,247,247,247,247,247,247,  0,181,247,247,247,247,247,247,247,247,247,247,247,247,181,  0,129,247,247,247,247,247,247,247,247,247,247,247,145, 16,247,247,247,247,247,247, 33,247,247,247,247,247,247, 33,247,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,198,247,247,247,247,247,198,181,247,247,247,247,247,247, 49, 66,247,247,247,247,247,247,247,247,247,247,247,247,247, 16,
-    0,214,247,247,247,247,247,129, 66,247,247,247,247,247,247, 33,247,247,247,247,247,247, 96, 96,247,247,247,247,247,247, 33,  0,145,247,247,247,247,247,247,247,247,247,198, 30,  0,165,247,247,247,247,247,115,247,247,247,247,247,165,115,247,247,247,247,247,181, 66,115,247,247,247,247,247,115, 82,247,247,247,247,247,165,115,115,148,247,247,247,247,247,115, 66,247,247,247,247,247,247,181,247,247,247,247,247,247, 66,
-   16,247,247,247,247,247,231,  0,  0,247,247,247,247,247,247, 82,247,247,247,247,247,165,  0,  0,165,247,247,247,247,247, 82,  0, 30,247,247,247,247,247,247,247,247,247, 96,  0,  0, 82,247,247,247,247,247,165,247,247,247,247,247, 99,165,247,247,247,247,247, 99,  0,115,247,247,247,247,247,115,132,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,198,247,247,247,247,247, 66,
-   66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0, 96,247,247,247,247,247,247,247,129,  0,  0,  0,  0,231,247,247,247,247,247,247,247,247,247,247, 16,181,247,247,247,247,247, 66,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-   66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0,  0,181,247,247,247,247,247,247, 30,  0,  0,  0,  0,148,247,247,247,247,247,247,247,247,247,148,  0,181,247,247,247,247,247, 66,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-   66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0,129,247,247,247,247,247,247,247,145,  0,  0,  0,  0, 82,247,247,247,247,247,247,247,247,247, 82,  0,181,247,247,247,247,247, 99,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 79, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-   33,247,247,247,247,247,247, 14,  0,247,247,247,247,247,247, 66,247,247,247,247,247,181,  0,  0,165,247,247,247,247,247, 66,  0, 79,247,247,247,247,247,247,247,247,247,129,  0,  0,  0,  0,231,247,247,247,247,247,247,247,231,  0,  0,115,247,247,247,247,247,181,115,165,247,247,247,247,247,115,115,247,247,247,247,247,214, 63,  0,  0,  0, 16,112,247,247, 33, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0,214,247,247,247,247,247,198,198,247,247,247,247,247,247, 16,247,247,247,247,247,247,132,132,247,247,247,247,247,247, 16, 14,181,247,247,247,247,247,247,247,247,247,247, 79,  0,  0,  0,132,247,247,247,247,247,247,247,148,  0,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 33,247,247,247,247,247,247,247,198,181,181,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0,148,247,247,247,247,247,247,247,247,247,247,247,247,247,  0,132,247,247,247,247,247,247,247,247,247,247,247,247,145,  0,145,247,247,247,247,247,247,247,247,247,247,247,181, 14,  0,  0, 49,247,247,247,247,247,247,247, 82,  0,  0,  0,198,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,145,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0, 46,247,247,247,247,247,247,247,247,247,247,247,247,247,  0, 30,247,247,247,247,247,247,247,247,247,247,247,247, 30,112,247,247,247,247,247,247, 96,247,247,247,247,247,247,145,  0,  0,  0,214,247,247,247,247,247,231,  0,  0,  0,  0, 96,247,247,247,247,247,247,247,247,247,247,247,247,115,  0, 30,148,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0,  0,129,247,247,247,247,247,247,247,247,247,247,247,247,  0,  0, 96,247,247,247,247,247,247,247,247,247,247, 96, 16,247,247,247,247,247,247,145,  0,112,247,247,247,247,247,247, 49,  0,  0,181,247,247,247,247,247,148,  0,  0,  0,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247,115,  0,  0, 46,148,247,247,247,247,247,247,247,247,247,247,247, 33, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
-    0,  0,  0,129,247,247,247,247,181,145,247,247,247,247,145,  0,  0,  0, 46,148,247,247,247,247,247,247,148, 46,  0,  0,112,214,247,247,247,145, 14,  0,  0,145,247,247,247,247,145,  0,  0, 33,247,247,247,247,247,247, 66,  0,  0,  0,  0,  0, 99,132,115,181,181,132,198,247,247,247,247,247, 82,  0,  0,  0,  0, 66,165,247,247,247,247,247,247,198,132, 33,  0,  0,145,247,247,247,181, 79,  0, 79,181,247,247,247,145,  0,
-    0,  0,  0,  0, 33,115,115, 82,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 33, 99,115,115, 99, 33,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115,247,247,247,247,247,214,  0,  0,  0,  0,  0, 99,247,247,247,247,247,247,247,247,247,247,247,247, 16,  0,  0,  0,  0,  0,  0,  0, 49, 66, 66, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,224,255,255,255,255,255,255,101,164,255,255,255,143,250,255,255,255,255,255,255,255,255,255,255,255, 98,170,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
-    0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,136,251,255,255,255,255,255,255,101,130,255,255,255,153,250,255,255,255,255,255,255,255,255,255,255,121, 98,189,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
-    0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,252,255,255,255,255,255,164,164,255,255,255,255,176,249,251,255,255,255,255,255,255,255,255,150, 86,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
-    0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,164,198,255,255,255,255,201,133,164,255,255,255,255,255,145,203,255,255,255,255,255,255,255,117, 79,194,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
-    0, 66,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 73, 73,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 47, 70,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 66,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-};
-
-// magnifying glass icon (raw png)
-unsigned char mag_sel_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
-  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
-  0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
-  0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
-  0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
-  0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
-  0x2a, 0xbd, 0x00, 0x00, 0x01, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0xe4, 0x94, 0xbb, 0x8a, 0x22, 0x41, 0x14, 0x86, 0xbf, 0xda, 0x16, 0x3a,
-  0x10, 0xba, 0x03, 0x2f, 0x78, 0x03, 0x51, 0x11, 0x4c, 0xd4, 0x40, 0xd4,
-  0x37, 0x30, 0x31, 0x30, 0xe9, 0x07, 0xf0, 0x15, 0x14, 0x7c, 0x1e, 0x31,
-  0x37, 0x33, 0x11, 0x73, 0xe9, 0x56, 0x44, 0x84, 0x36, 0xe9, 0x40, 0x50,
-  0x54, 0x14, 0xc4, 0xc0, 0xa8, 0x6d, 0x50, 0x6a, 0x92, 0x1d, 0xd9, 0x9d,
-  0x99, 0x75, 0x0d, 0x26, 0x58, 0xd8, 0x3f, 0xaa, 0xe2, 0xfc, 0xf5, 0xd5,
-  0x39, 0x9c, 0x53, 0x25, 0xa4, 0x94, 0x7c, 0xa7, 0x7e, 0xf0, 0xcd, 0xfa,
-  0xf7, 0x81, 0xbe, 0xf7, 0xc5, 0xf9, 0x7c, 0x96, 0x93, 0xc9, 0x84, 0xe5,
-  0x72, 0xc9, 0x66, 0xb3, 0x21, 0x99, 0x4c, 0x92, 0xcf, 0xe7, 0xa9, 0x54,
-  0x2a, 0x04, 0x02, 0x01, 0xf1, 0x2a, 0x50, 0x48, 0x29, 0x39, 0x9d, 0x4e,
-  0x72, 0x30, 0x18, 0x60, 0x59, 0xd6, 0x27, 0x43, 0xb5, 0x5a, 0xa5, 0xd1,
-  0x68, 0x10, 0x0c, 0x06, 0xc5, 0xcb, 0x19, 0x4e, 0xa7, 0x53, 0x2c, 0xcb,
-  0x22, 0x95, 0x4a, 0x51, 0x2a, 0x95, 0xc8, 0x64, 0x32, 0xac, 0x56, 0x2b,
-  0x66, 0xb3, 0x19, 0x93, 0xc9, 0x84, 0x48, 0x24, 0x42, 0xbd, 0x5e, 0x7f,
-  0xbd, 0x64, 0xdb, 0xb6, 0x01, 0x28, 0x97, 0xcb, 0x54, 0x2a, 0x15, 0x34,
-  0x4d, 0x13, 0xa1, 0x50, 0x48, 0x2a, 0x8a, 0xc2, 0x7a, 0xbd, 0xc6, 0xb6,
-  0x6d, 0xea, 0xf5, 0x3a, 0xa3, 0xd1, 0x48, 0xf6, 0xfb, 0xfd, 0xc7, 0x61,
-  0xc3, 0x30, 0xa8, 0xd5, 0x6a, 0xe2, 0x53, 0x53, 0xb6, 0xdb, 0x2d, 0x00,
-  0xc5, 0x62, 0x11, 0x4d, 0xd3, 0x04, 0x80, 0xa6, 0x69, 0xa2, 0x50, 0x28,
-  0xf0, 0x6b, 0x1c, 0x10, 0x86, 0x61, 0x3c, 0x60, 0x80, 0xf8, 0xb2, 0xcb,
-  0x89, 0x44, 0x02, 0x00, 0xc7, 0x71, 0x00, 0xde, 0x27, 0x5d, 0xfe, 0xdc,
-  0x3f, 0xe2, 0x1f, 0xa0, 0xe2, 0x8f, 0x63, 0x93, 0xcb, 0xe5, 0x00, 0x18,
-  0x8f, 0xc7, 0x98, 0xa6, 0x89, 0xeb, 0xba, 0xd2, 0x34, 0x4d, 0xc6, 0xe3,
-  0x31, 0x00, 0xe9, 0x74, 0x1a, 0x80, 0x5a, 0xad, 0xf6, 0x80, 0x3e, 0xed,
-  0xf2, 0x7a, 0xbd, 0x96, 0xc3, 0xe1, 0x90, 0xf9, 0x7c, 0xfe, 0xa5, 0x29,
-  0x1c, 0x0e, 0xd3, 0xe9, 0x74, 0xd0, 0x75, 0x5d, 0x00, 0x8c, 0x46, 0xa3,
-  0x8f, 0x17, 0xfc, 0x0e, 0xf4, 0x3c, 0x4f, 0xee, 0x76, 0x3b, 0x16, 0x8b,
-  0x05, 0x8e, 0xe3, 0xb0, 0xdf, 0xef, 0x89, 0xc7, 0xe3, 0xa4, 0xd3, 0x69,
-  0x6c, 0xdb, 0xe6, 0x74, 0x3a, 0x11, 0x8d, 0x46, 0x69, 0xb7, 0xdb, 0x0f,
-  0xe8, 0xd3, 0x0c, 0x01, 0x3c, 0xcf, 0x93, 0xae, 0xeb, 0xe2, 0x79, 0x1e,
-  0xb7, 0xdb, 0x0d, 0x9f, 0xcf, 0x87, 0xa2, 0x28, 0x5c, 0x2e, 0x17, 0x7a,
-  0xbd, 0x1e, 0xc7, 0xe3, 0x91, 0x58, 0x2c, 0x46, 0xab, 0xd5, 0x7a, 0x0a,
-  0x7d, 0xbc, 0x14, 0x55, 0x55, 0x85, 0xaa, 0xaa, 0x9f, 0x0c, 0x7e, 0xbf,
-  0x5f, 0x36, 0x9b, 0x4d, 0xba, 0xdd, 0x2e, 0xd7, 0xeb, 0x95, 0xeb, 0xf5,
-  0x8a, 0xae, 0xeb, 0x7f, 0xcf, 0xf0, 0x99, 0x5c, 0xd7, 0x95, 0x87, 0xc3,
-  0x81, 0xfb, 0xfd, 0x4e, 0x36, 0x9b, 0x7d, 0xad, 0xe4, 0xff, 0xe7, 0xfb,
-  0x7a, 0x1b, 0x00, 0x59, 0xa8, 0xba, 0x68, 0xca, 0x4f, 0xc5, 0xa7, 0x00,
-  0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int mag_sel_png_len = 563;
-
-unsigned char mag_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
-  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
-  0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
-  0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
-  0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
-  0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
-  0x2a, 0xbd, 0x00, 0x00, 0x01, 0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0xe4, 0x94, 0xbb, 0xaa, 0xea, 0x50, 0x10, 0x86, 0xbf, 0xec, 0x08, 0x29,
-  0x36, 0x24, 0x85, 0x17, 0xbc, 0x81, 0x18, 0x11, 0x6c, 0xd4, 0x42, 0x8c,
-  0x0f, 0x61, 0xe1, 0x2b, 0xf8, 0x0a, 0x0a, 0x3e, 0x8f, 0xf8, 0x0c, 0x36,
-  0x62, 0x1f, 0x92, 0x88, 0x88, 0x10, 0x9b, 0x14, 0x42, 0x44, 0x45, 0x41,
-  0x2c, 0xac, 0x92, 0x80, 0xb2, 0x4e, 0x73, 0x94, 0x03, 0xfb, 0xb0, 0x4d,
-  0xb1, 0x8b, 0x03, 0xe7, 0xaf, 0xd6, 0x62, 0xfe, 0xf5, 0x31, 0xc3, 0xcc,
-  0x1a, 0x49, 0x08, 0xc1, 0x4f, 0xea, 0x83, 0x1f, 0xd6, 0xbf, 0x0f, 0x4c,
-  0x3c, 0x0f, 0xd7, 0xeb, 0x55, 0x38, 0x8e, 0xc3, 0x66, 0xb3, 0x61, 0xb7,
-  0xdb, 0x51, 0x2a, 0x95, 0xa8, 0xd7, 0xeb, 0x18, 0x86, 0x41, 0x32, 0x99,
-  0x94, 0xe2, 0x02, 0x25, 0x21, 0x04, 0x97, 0xcb, 0x45, 0x4c, 0xa7, 0x53,
-  0x6c, 0xdb, 0xfe, 0x62, 0xe8, 0x74, 0x3a, 0xf4, 0x7a, 0x3d, 0x52, 0xa9,
-  0x94, 0x14, 0x3b, 0xc3, 0xc5, 0x62, 0x81, 0x6d, 0xdb, 0x94, 0xcb, 0x65,
-  0x5a, 0xad, 0x16, 0x95, 0x4a, 0x85, 0xed, 0x76, 0xcb, 0x72, 0xb9, 0xc4,
-  0x71, 0x1c, 0xb2, 0xd9, 0x2c, 0xdd, 0x6e, 0x37, 0x7e, 0xc9, 0xae, 0xeb,
-  0x02, 0xd0, 0x6e, 0xb7, 0x31, 0x0c, 0x03, 0x55, 0x55, 0xa5, 0x74, 0x3a,
-  0x2d, 0x64, 0x59, 0xc6, 0xf7, 0x7d, 0x5c, 0xd7, 0x8d, 0x0d, 0xfc, 0x00,
-  0xd8, 0xef, 0xf7, 0x00, 0x34, 0x9b, 0x4d, 0x54, 0x55, 0x95, 0x00, 0x54,
-  0x55, 0x95, 0x1a, 0x8d, 0x06, 0x7f, 0xc6, 0x63, 0x03, 0x8b, 0xc5, 0x22,
-  0x00, 0x9e, 0xe7, 0x01, 0x3c, 0x27, 0x5d, 0xfc, 0xbe, 0xbf, 0xe2, 0xb1,
-  0x81, 0xb5, 0x5a, 0x0d, 0x00, 0xd3, 0x34, 0xb1, 0x2c, 0x8b, 0x20, 0x08,
-  0x84, 0x65, 0x59, 0x98, 0xa6, 0x09, 0x80, 0xae, 0xeb, 0xaf, 0x07, 0xf3,
-  0xf9, 0xfc, 0x7d, 0x97, 0x7d, 0xdf, 0x17, 0xb3, 0xd9, 0x8c, 0xd5, 0x6a,
-  0xf5, 0x57, 0x53, 0x26, 0x93, 0x61, 0x34, 0x1a, 0xa1, 0x69, 0x9a, 0x14,
-  0x6b, 0x6c, 0xa2, 0x28, 0x12, 0x87, 0xc3, 0x81, 0xf5, 0x7a, 0x8d, 0xe7,
-  0x79, 0x1c, 0x8f, 0x47, 0x0a, 0x85, 0x02, 0xba, 0xae, 0xe3, 0xba, 0x2e,
-  0x97, 0xcb, 0x85, 0x5c, 0x2e, 0xc7, 0x70, 0x38, 0x7c, 0x0b, 0x95, 0x9e,
-  0xcb, 0x21, 0x8a, 0x22, 0x11, 0x04, 0x01, 0x51, 0x14, 0x71, 0xbf, 0xdf,
-  0x49, 0x24, 0x12, 0xc8, 0xb2, 0xcc, 0xed, 0x76, 0x63, 0x32, 0x99, 0x70,
-  0x3e, 0x9f, 0xc9, 0xe7, 0xf3, 0x0c, 0x06, 0x83, 0x6f, 0xa1, 0xaf, 0x9f,
-  0xa2, 0x28, 0x8a, 0xa4, 0x28, 0xca, 0x17, 0xc3, 0xe7, 0xe7, 0xa7, 0xe8,
-  0xf7, 0xfb, 0x8c, 0xc7, 0x63, 0xc2, 0x30, 0x24, 0x0c, 0x43, 0x34, 0x4d,
-  0x7b, 0x9f, 0xe1, 0x77, 0x0a, 0x82, 0x40, 0x9c, 0x4e, 0x27, 0x1e, 0x8f,
-  0x07, 0xd5, 0x6a, 0x35, 0x5e, 0xc9, 0xff, 0xcf, 0xfa, 0xfa, 0x35, 0x00,
-  0x70, 0xf3, 0xae, 0xcb, 0x89, 0xcd, 0xd2, 0x46, 0x00, 0x00, 0x00, 0x00,
-  0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int mag_png_len = 524;
-
-unsigned char search_l_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
-  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
-  0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
-  0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
-  0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
-  0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
-  0x2a, 0xbd, 0x00, 0x00, 0x01, 0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0xac, 0x54, 0x3d, 0xab, 0xda, 0x50, 0x18, 0x7e, 0xce, 0xc9, 0x39, 0x31,
-  0x4d, 0xfc, 0x40, 0x30, 0x46, 0x14, 0xec, 0x50, 0x44, 0x17, 0x2f, 0x9d,
-  0xba, 0x15, 0xda, 0xd1, 0xa1, 0x2e, 0xdd, 0x3b, 0x14, 0x4a, 0xa1, 0x7f,
-  0xa6, 0x74, 0xbd, 0x43, 0xff, 0x84, 0xfd, 0x05, 0x82, 0xda, 0xa5, 0x83,
-  0x1d, 0xdc, 0x8a, 0x88, 0xa0, 0x44, 0x83, 0xc6, 0x28, 0xad, 0x1f, 0x49,
-  0xde, 0x2e, 0x8d, 0x78, 0x6f, 0xaf, 0x34, 0x68, 0x9f, 0xed, 0xbc, 0x70,
-  0x1e, 0x9e, 0x8f, 0xf7, 0x1c, 0x46, 0x44, 0x38, 0x45, 0xaf, 0xd7, 0x63,
-  0xb6, 0x6d, 0xe7, 0x6d, 0xdb, 0x6e, 0xba, 0xae, 0xfb, 0x6e, 0xb3, 0xd9,
-  0xdc, 0x6c, 0xb7, 0xdb, 0x04, 0xe7, 0x1c, 0x8c, 0x31, 0xfc, 0x0b, 0x2c,
-  0x22, 0xec, 0x76, 0xbb, 0xcc, 0xf3, 0xbc, 0xcc, 0x68, 0x34, 0x7a, 0xed,
-  0xba, 0xee, 0x87, 0x6c, 0x36, 0x7b, 0x93, 0xcb, 0xe5, 0x44, 0x3a, 0x9d,
-  0x86, 0xa6, 0x69, 0x50, 0x14, 0x25, 0x3e, 0x61, 0xa7, 0xd3, 0x61, 0xf3,
-  0xf9, 0xfc, 0xc9, 0x78, 0x3c, 0xbe, 0xd5, 0x75, 0xfd, 0x79, 0xa5, 0x52,
-  0x11, 0xa6, 0x69, 0x22, 0x95, 0x4a, 0x41, 0xd3, 0x34, 0x08, 0x21, 0xc0,
-  0x18, 0x8b, 0x45, 0x28, 0x00, 0x60, 0xb5, 0x5a, 0xa5, 0x27, 0x93, 0xc9,
-  0xa7, 0x62, 0xb1, 0xf8, 0xb2, 0x5a, 0xad, 0x22, 0x9f, 0xcf, 0xc3, 0x30,
-  0x0c, 0x48, 0x29, 0xc1, 0x39, 0x47, 0x5c, 0xbb, 0x00, 0x20, 0xda, 0xed,
-  0x36, 0x9f, 0x4e, 0xa7, 0xaf, 0x4c, 0xd3, 0x7c, 0x51, 0xaf, 0xd7, 0x61,
-  0x59, 0x16, 0x74, 0x5d, 0x87, 0x94, 0x12, 0x97, 0x40, 0x2c, 0x16, 0x0b,
-  0x93, 0x88, 0xde, 0xd6, 0x6a, 0x35, 0xdd, 0xb2, 0x2c, 0x18, 0x86, 0x01,
-  0x21, 0x04, 0x2e, 0x05, 0xf7, 0x3c, 0xaf, 0x59, 0x2e, 0x97, 0x9f, 0x45,
-  0xca, 0x38, 0xe7, 0xb8, 0x06, 0x3c, 0x08, 0x82, 0x46, 0xa1, 0x50, 0x78,
-  0x74, 0xad, 0xb2, 0x23, 0xa1, 0x94, 0xf2, 0x69, 0x26, 0x93, 0xe1, 0x51,
-  0x66, 0xf7, 0xf7, 0xd2, 0xf7, 0xfd, 0x07, 0x2f, 0x9e, 0x9b, 0x73, 0x55,
-  0x55, 0xb3, 0x91, 0x55, 0xc6, 0x18, 0xc2, 0x30, 0xbc, 0x1b, 0xf2, 0x19,
-  0xd5, 0xe7, 0xe6, 0x5c, 0x4a, 0x39, 0x06, 0x70, 0x5c, 0x8b, 0xb8, 0xeb,
-  0x71, 0xd6, 0x32, 0x11, 0x75, 0xf6, 0xfb, 0xfd, 0xd1, 0xea, 0xd5, 0xa5,
-  0x10, 0xd1, 0xb7, 0xf5, 0x7a, 0x1d, 0x84, 0x61, 0x08, 0x22, 0xba, 0x9e,
-  0x50, 0x51, 0x94, 0xaf, 0x8e, 0xe3, 0xfc, 0xdc, 0xed, 0x76, 0xf8, 0x1f,
-  0xe0, 0x89, 0x44, 0xe2, 0xc7, 0x72, 0xb9, 0xfc, 0xee, 0x38, 0x0e, 0x7c,
-  0xdf, 0x3f, 0x5a, 0xbf, 0xdf, 0x76, 0x6c, 0xc2, 0x46, 0xa3, 0xf1, 0x2b,
-  0x08, 0x82, 0xdb, 0xe1, 0x70, 0xe8, 0x2c, 0x16, 0x0b, 0x04, 0x41, 0x00,
-  0x22, 0xba, 0xb8, 0x1c, 0xfe, 0x67, 0x05, 0xbe, 0x78, 0x9e, 0xf7, 0x79,
-  0x30, 0x18, 0x8c, 0x67, 0xb3, 0x19, 0x45, 0x25, 0x9d, 0x53, 0x49, 0x44,
-  0x38, 0x1c, 0x0e, 0x38, 0x2d, 0xf3, 0xce, 0x6f, 0x03, 0x60, 0x29, 0x84,
-  0xf8, 0xe8, 0x79, 0x9e, 0xdb, 0xef, 0xf7, 0xdf, 0x97, 0x4a, 0xa5, 0xc7,
-  0xd1, 0x53, 0x54, 0x55, 0x15, 0x52, 0xca, 0xbf, 0x14, 0x0b, 0x21, 0x1e,
-  0x8c, 0x87, 0x9d, 0x1e, 0x5a, 0xad, 0x96, 0x00, 0x50, 0x27, 0xa2, 0x37,
-  0xaa, 0xaa, 0x36, 0x0d, 0xc3, 0x28, 0x26, 0x93, 0x49, 0xa1, 0x69, 0x9a,
-  0xc2, 0x39, 0x8f, 0x95, 0xc1, 0xef, 0x01, 0x00, 0x35, 0xe5, 0xd5, 0x5e,
-  0xd0, 0xed, 0x0c, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
-  0xae, 0x42, 0x60, 0x82
-};
-unsigned int search_l_png_len = 604;
-
-unsigned char search_m_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x02, 0x00, 0x00, 0x00, 0x35, 0x5e, 0x4b, 0x4d, 0x00, 0x00, 0x00,
-  0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xd6, 0xd8, 0xd4, 0x4f, 0x58,
-  0x32, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66,
-  0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20,
-  0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9,
-  0x65, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0x62, 0x2c, 0x2f, 0x2f, 0x67, 0x60, 0x60, 0x60, 0x3c, 0x7e, 0xfc, 0x38,
-  0x88, 0xfa, 0xf8, 0xf1, 0x23, 0x88, 0xfa, 0xff, 0xff, 0x3f, 0x90, 0x62,
-  0x62, 0x00, 0x03, 0x5a, 0x50, 0x2c, 0x10, 0x1b, 0x58, 0x6e, 0xdd, 0xba,
-  0x05, 0xa4, 0x00, 0x02, 0x0c, 0x00, 0xa5, 0x07, 0x0f, 0x3c, 0x7e, 0xe1,
-  0x45, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
-  0x60, 0x82
-};
-unsigned int search_m_png_len = 158;
-
-unsigned char search_r_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0x9d, 0x92, 0x5d, 0xf2, 0x00, 0x00, 0x00,
-  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
-  0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
-  0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
-  0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
-  0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
-  0x2a, 0xbd, 0x00, 0x00, 0x01, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0xa4, 0xd4, 0xbf, 0xaa, 0x1a, 0x41, 0x14, 0x06, 0xf0, 0x6f, 0xf6, 0x9f,
-  0xb2, 0x0a, 0x6b, 0xa5, 0x56, 0x8b, 0xa4, 0x92, 0xd4, 0x69, 0x7c, 0x03,
-  0xb1, 0x59, 0x49, 0x11, 0x52, 0xdf, 0xbc, 0x43, 0xcc, 0x2b, 0xa4, 0x4c,
-  0x97, 0x67, 0x08, 0xa4, 0x11, 0x2c, 0x52, 0x5c, 0x42, 0x24, 0x60, 0x8a,
-  0x34, 0x29, 0x42, 0x50, 0x41, 0x21, 0xa0, 0x97, 0xd5, 0x55, 0xb3, 0xbb,
-  0xee, 0xb2, 0xce, 0xee, 0xcc, 0x49, 0x91, 0x28, 0xc2, 0x0d, 0xe6, 0xaa,
-  0xa7, 0x9d, 0xc3, 0x8f, 0x73, 0x98, 0xf9, 0x86, 0x75, 0x3a, 0x1d, 0xc2,
-  0x89, 0x12, 0x42, 0x24, 0xf9, 0x7c, 0x7e, 0x5a, 0x2c, 0x16, 0x3f, 0x96,
-  0x4a, 0xa5, 0x5e, 0xb5, 0x5a, 0xfd, 0x52, 0x2e, 0x97, 0xfd, 0x46, 0xa3,
-  0x21, 0x8e, 0xfb, 0xd8, 0x60, 0x30, 0x38, 0x09, 0x65, 0x59, 0x86, 0x24,
-  0x49, 0x10, 0x04, 0x81, 0xf0, 0x3c, 0x6f, 0xb3, 0xd9, 0x6c, 0x7e, 0x58,
-  0x96, 0x75, 0x5b, 0xab, 0xd5, 0xde, 0x34, 0x9b, 0xcd, 0x5f, 0x07, 0xc8,
-  0xf7, 0xfd, 0x93, 0x90, 0x94, 0xf2, 0x80, 0x85, 0x61, 0x88, 0xe5, 0x72,
-  0x49, 0xe3, 0xf1, 0x58, 0xc6, 0x71, 0xfc, 0xc1, 0xb6, 0xed, 0xe7, 0x8e,
-  0xe3, 0x84, 0x00, 0xc0, 0xa4, 0x94, 0x27, 0x21, 0x22, 0x82, 0x94, 0x12,
-  0x52, 0x4a, 0xa4, 0x69, 0x8a, 0x28, 0x8a, 0xb0, 0x58, 0x2c, 0x30, 0x1c,
-  0x0e, 0x85, 0xeb, 0xba, 0xef, 0x6b, 0xb5, 0xda, 0x4d, 0xab, 0xd5, 0x8a,
-  0x34, 0xc6, 0xd8, 0x29, 0x07, 0x8c, 0x31, 0x28, 0x8a, 0x02, 0x22, 0x82,
-  0xae, 0xeb, 0x30, 0x0c, 0x03, 0xb9, 0x5c, 0x0e, 0x86, 0x61, 0xa8, 0x52,
-  0xca, 0xa7, 0xf3, 0xf9, 0xfc, 0x67, 0xbf, 0xdf, 0x7f, 0xa5, 0xe0, 0x81,
-  0xc5, 0x18, 0x03, 0x63, 0x0c, 0x9a, 0xa6, 0xa1, 0x50, 0x28, 0xa0, 0x52,
-  0xa9, 0xa0, 0x5e, 0xaf, 0x6b, 0x00, 0x5e, 0xac, 0xd7, 0xeb, 0x47, 0x0f,
-  0x86, 0x8e, 0x41, 0x55, 0x55, 0x61, 0x9a, 0x26, 0x2a, 0x95, 0x0a, 0x6c,
-  0xdb, 0xb6, 0x82, 0x20, 0x78, 0x76, 0x36, 0xb4, 0xc7, 0xf6, 0x93, 0x55,
-  0xab, 0x55, 0x26, 0x84, 0x78, 0xac, 0x1c, 0x5f, 0xf3, 0xb9, 0xa5, 0xeb,
-  0x3a, 0x2c, 0xcb, 0x82, 0xae, 0xeb, 0xbb, 0x03, 0xa4, 0x69, 0xda, 0xd9,
-  0x53, 0x29, 0x8a, 0x02, 0xd3, 0x34, 0x99, 0x61, 0x18, 0xcb, 0x8b, 0x56,
-  0x3b, 0xc6, 0xfe, 0x4e, 0x76, 0x77, 0x15, 0x44, 0x44, 0xe0, 0x9c, 0x0b,
-  0x22, 0xfa, 0xaa, 0x5c, 0x83, 0x48, 0x29, 0x11, 0x86, 0xe1, 0x86, 0x88,
-  0xbe, 0x5f, 0x35, 0xd1, 0x6e, 0xb7, 0x83, 0xe7, 0x79, 0x3d, 0x55, 0x55,
-  0x7d, 0xd0, 0x05, 0x25, 0xa5, 0x24, 0xce, 0x39, 0x4d, 0x26, 0x93, 0x45,
-  0xb7, 0xdb, 0x7d, 0x42, 0x44, 0x50, 0x2e, 0x59, 0x49, 0x08, 0x81, 0xf5,
-  0x7a, 0x9d, 0x4c, 0xa7, 0xd3, 0x77, 0x42, 0x88, 0x6f, 0x00, 0xa0, 0xed,
-  0x0f, 0xb3, 0x2c, 0x3b, 0xe4, 0xe9, 0x5f, 0xf9, 0x23, 0xfa, 0x93, 0x6d,
-  0xce, 0x39, 0x56, 0xab, 0x95, 0x18, 0x0e, 0x87, 0x9f, 0x82, 0x20, 0x78,
-  0xdd, 0x6e, 0xb7, 0xd3, 0x7b, 0xe9, 0x27, 0xa2, 0x7b, 0x08, 0x11, 0x21,
-  0x4d, 0x53, 0x70, 0xce, 0x11, 0xc7, 0xb1, 0x74, 0x5d, 0xd7, 0x9f, 0xcd,
-  0x66, 0x3d, 0xce, 0xf9, 0x4b, 0xc7, 0x71, 0xee, 0x0e, 0xef, 0x70, 0x34,
-  0x1a, 0xe1, 0x7f, 0xff, 0x51, 0x92, 0x24, 0xd8, 0x6e, 0xb7, 0x61, 0x14,
-  0x45, 0x9f, 0x39, 0xe7, 0x6f, 0x19, 0x63, 0xb7, 0x8e, 0xe3, 0x44, 0xc7,
-  0x7d, 0xbf, 0x07, 0x00, 0x5f, 0x77, 0x46, 0x8c, 0x30, 0x2c, 0xd8, 0x9d,
-  0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int search_r_png_len = 612;
-
-static unsigned char close_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b,
-  0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0xac, 0x77, 0x26, 0x00, 0x00, 0x00,
-  0xd8, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x75, 0x51, 0xbd, 0x12, 0x46,
-  0x40, 0x0c, 0xdc, 0x18, 0x15, 0x0a, 0x14, 0x14, 0x1a, 0x43, 0xeb, 0x35,
-  0xbc, 0x7f, 0xa7, 0x43, 0x67, 0x06, 0x33, 0x28, 0xd0, 0xde, 0x77, 0x7b,
-  0x23, 0x2a, 0xdf, 0x16, 0x97, 0x9f, 0xdb, 0xcb, 0x26, 0x39, 0xc1, 0x83,
-  0x7d, 0xdf, 0xcd, 0xb2, 0x2c, 0xd8, 0xb6, 0x0d, 0xe7, 0x79, 0x22, 0x8a,
-  0x22, 0xc4, 0x71, 0x8c, 0x3c, 0xcf, 0x91, 0xa6, 0xa9, 0x90, 0xe6, 0x8e,
-  0x69, 0x9a, 0xcc, 0x38, 0x8e, 0xb8, 0xae, 0x4b, 0xdf, 0xbe, 0x36, 0x0c,
-  0x43, 0x94, 0x65, 0x89, 0xa2, 0x28, 0xc4, 0x3b, 0x8e, 0xe3, 0x2f, 0x91,
-  0x2f, 0xa8, 0xc2, 0x42, 0x56, 0xd1, 0x78, 0xf3, 0x3c, 0xbb, 0x04, 0x2f,
-  0xda, 0xb6, 0x45, 0x55, 0x55, 0x74, 0x9d, 0x65, 0x2c, 0x22, 0xb8, 0xef,
-  0x1b, 0xeb, 0xba, 0xc2, 0x67, 0x8f, 0x4c, 0x10, 0x7d, 0xdf, 0xa3, 0xae,
-  0x6b, 0xe7, 0xd3, 0x32, 0x56, 0x90, 0xe7, 0x53, 0x46, 0x31, 0x0c, 0x83,
-  0x73, 0x95, 0xa8, 0x31, 0x93, 0x9c, 0xc7, 0xe3, 0xd4, 0x0a, 0xb6, 0xa0,
-  0x44, 0x5a, 0xc6, 0xc6, 0x18, 0x77, 0xcd, 0x41, 0xbd, 0x24, 0x49, 0x94,
-  0xfb, 0x12, 0x59, 0x51, 0x5b, 0xd2, 0x16, 0xed, 0xfa, 0x20, 0xdc, 0x6f,
-  0xd7, 0x75, 0x9f, 0x6b, 0xd3, 0x2a, 0x41, 0x10, 0xa0, 0x69, 0x1a, 0x57,
-  0x59, 0x28, 0x47, 0x99, 0x2f, 0x30, 0xcf, 0x7b, 0xfb, 0x41, 0xcf, 0x1a,
-  0x2c, 0xeb, 0xeb, 0x07, 0x29, 0x9d, 0x65, 0x19, 0x6c, 0xab, 0x6e, 0x5d,
-  0x3f, 0x07, 0x0a, 0x79, 0x90, 0x0e, 0x11, 0x45, 0xc2, 0x00, 0x00, 0x00,
-  0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-static unsigned int close_png_len = 273;
-
-
-static unsigned char closed_png[81] =
-{
-  0,  0,  0,  0,142,  0,  0,  0,  0,
-  0,  0,  0,  0,142,142,  0,  0,  0,
-  0,  0,  0,  0,142,142,142,  0,  0,
-  0,  0,  0,  0,142,142,142,142,  0,
-  0,  0,  0,  0,142,142,142,142,142,
-  0,  0,  0,  0,142,142,142,142,  0,
-  0,  0,  0,  0,142,142,142,  0,  0,
-  0,  0,  0,  0,142,142,  0,  0,  0,
-  0,  0,  0,  0,142,  0,  0,  0,  0
-};
-
-static unsigned char closed_a_png[81] =
-{
-  0,  0,  0,  0,255,  0,  0,  0,  0,
-  0,  0,  0,  0,255,255,  0,  0,  0,
-  0,  0,  0,  0,255,255,255,  0,  0,
-  0,  0,  0,  0,255,255,255,255,  0,
-  0,  0,  0,  0,255,255,255,255,255,
-  0,  0,  0,  0,255,255,255,255,  0,
-  0,  0,  0,  0,255,255,255,  0,  0,
-  0,  0,  0,  0,255,255,  0,  0,  0,
-  0,  0,  0,  0,255,  0,  0,  0,  0
-};
-
-static unsigned char open_png[81] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-  142,142,142,142,142,142,142,142,142,
-    0,142,142,142,142,142,142,142,  0,
-    0,  0,142,142,142,142,142,  0,  0,
-    0,  0,  0,142,142,142,  0,  0,  0,
-    0,  0,  0,  0,142,  0,  0,  0,  0
-};
-
-static unsigned char open_a_png[81] =
-{
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,
-  255,255,255,255,255,255,255,255,255,
-    0,255,255,255,255,255,255,255,  0,
-    0,  0,255,255,255,255,255,  0,  0,
-    0,  0,  0,255,255,255,  0,  0,  0,
-    0,  0,  0,  0,255,  0,  0,  0,  0
-};
-
-static unsigned char bdwn_png[7*8] =
-{
-    0,  0,  0,142,  0,  0,  0,
-    0,  0,  0,142,  0,  0,  0,
-    0,  0,  0,142,  0,  0,  0,
-  142,  0,  0,142,  0,  0,142,
-  142,142,  0,142,  0,142,142,
-  142,142,142,142,142,142,142,
-    0,142,142,142,142,142,  0,
-    0,  0,142,142,142,  0,  0,
-};
-
-static unsigned char bdwn_a_png[7*8] =
-{
-    0,  0,  0,255,  0,  0,  0,
-    0,  0,  0,255,  0,  0,  0,
-    0,  0,  0,255,  0,  0,  0,
-  128,  0,  0,255,  0,  0,128,
-  255,128,  0,255,  0,128,255,
-  128,255,128,255,128,255,128,
-    0,128,255,255,255,128,  0,
-    0,  0,128,255,128,  0,  0,
-};
-
-static unsigned char sync_on_png[576] =
-{
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,138,128,128,128,128,133,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,129,205,186,128,128,128,128,160,210,134,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,139,217,255,181,128,128,128,128,152,255,229,147,128,128,128,128,128,128,
-  128,128,128,128,128,156,236,255,255,181,128,128,128,128,152,255,255,243,164,128,128,128,128,128,
-  128,128,128,128,175,249,255,255,255,223,196,198,198,197,211,255,255,255,253,186,128,128,128,128,
-  128,128,133,202,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,214,137,128,128,
-  128,128,135,217,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,140,128,128,
-  128,128,128,128,189,255,255,255,255,238,224,225,225,224,232,255,255,255,255,201,131,128,128,128,
-  128,128,128,128,128,167,245,255,255,183,128,128,128,128,155,255,255,250,179,128,128,128,128,128,
-  128,128,128,128,128,128,150,231,255,188,128,128,128,128,161,255,238,158,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,136,216,188,128,128,128,128,161,223,142,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,130,141,128,128,128,128,135,132,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
-};
-
-static unsigned char sync_off_png[576] =
-{
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,138,128,128,128,128,128,128,133,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,129,205,186,128,128,128,128,128,128,160,210,134,128,128,128,128,128,128,
-  128,128,128,128,128,139,217,255,181,128,128,128,128,128,128,152,255,229,147,128,128,128,128,128,
-  128,128,128,128,156,236,255,255,181,128,128,128,128,128,128,152,255,255,243,164,128,128,128,128,
-  128,128,128,175,249,255,255,255,223,196,198,198,128,128,197,211,255,255,255,253,186,128,128,128,
-  128,128,202,255,255,255,255,255,255,255,255,225,128,128,255,255,255,255,255,255,255,214,128,128,
-  128,128,217,255,255,255,255,255,255,255,255,128,128,198,255,255,255,255,255,255,255,225,128,128,
-  128,128,128,189,255,255,255,255,238,224,225,128,128,225,224,232,255,255,255,255,201,128,128,128,
-  128,128,128,128,167,245,255,255,183,128,128,128,128,128,128,155,255,255,250,179,128,128,128,128,
-  128,128,128,128,128,150,231,255,188,128,128,128,128,128,128,161,255,238,158,128,128,128,128,128,
-  128,128,128,128,128,128,136,216,188,128,128,128,128,128,128,161,223,142,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,130,141,128,128,128,128,128,128,135,132,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-  128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
-};
-
-static unsigned char sync_a_png[576] =
-{
-    0,  0,  0,  0,  0,  0,  0, 29, 98,157,207,231,234,211,164,104, 38,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0, 21,143,234,255,255,255,255,255,255,255,255,244,155, 33,  0,  0,  0,  0,  0,
-    0,  0,  0,  0, 70,221,255,255,255,255,255,255,255,255,255,255,255,255,235, 93,  0,  0,  0,  0,
-    0,  0,  0, 92,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116,  0,  0,  0,
-    0,  0, 68,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 96,  0,  0,
-    0, 20,225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243, 41,  0,
-    0,143,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,172,  1,
-   28,238,255,255,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 42,
-   99,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,133,
-  160,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,204,
-  212,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,224,
-  234,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,237,255,236,
-  235,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,255,236,
-  216,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,226,
-  168,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,
-  107,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,147,
-   39,245,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 53,
-    0,159,255,255,255,255,255,255,251,255,255,255,255,255,255,255,255,255,255,255,255,255,190,  3,
-    0, 31,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,249, 54,  0,
-    0,  0, 91,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119,  0,  0,
-    0,  0,  0,116,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,  0,  0,  0,
-    0,  0,  0,  0, 98,240,255,255,255,255,255,255,255,255,255,255,255,255,248,119,  0,  0,  0,  0,
-    0,  0,  0,  0,  0, 45,168,252,255,255,255,255,255,255,255,255,255,184, 58,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0, 45,131,201,222,234,236,224,204,142, 54,  0,  0,  0,  0,  0,  0,  0
-};
-
-
-//------------------------------------------------------------------------
-
-static const char tabs_css[] = 
-".tabs, .tabs2, .tabs3 {\n"
-"    background-image: url('tab_b.png');\n"
-"    width: 100%;\n"
-"    z-index: 101;\n"
-"    font-size: 13px;\n"
-"    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n"
-"}\n"
-"\n"
-".tabs2 {\n"
-"    font-size: 10px;\n"
-"}\n"
-".tabs3 {\n"
-"    font-size: 9px;\n"
-"}\n"
-"\n"
-".tablist {\n"
-"    margin: 0;\n"
-"    padding: 0;\n"
-"    display: table;\n"
-"}\n"
-"\n"
-".tablist li {\n"
-"    float: left;\n"
-"    display: table-cell;\n"
-"    background-image: url('tab_b.png');\n"
-"    line-height: 36px;\n"
-"    list-style: none;\n"
-"}\n"
-"\n"
-".tablist a {\n"
-"    display: block;\n"
-"    padding: 0 20px;\n"
-"    font-weight: bold;\n"
-"    background-image:url('tab_s.png');\n"
-"    background-repeat:no-repeat;\n"
-"    background-position:right;\n"
-"    color: ##30;\n"
-"    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
-"    text-decoration: none;\n"
-"    outline: none;\n"
-"}\n"
-"\n"
-".tabs3 .tablist a {\n"
-"    padding: 0 10px;\n"
-"}\n"
-"\n"
-".tablist a:hover {\n"
-"    background-image: url('tab_h.png');\n"
-"    background-repeat:repeat-x;\n"
-"    color: #fff;\n"
-"    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-"    text-decoration: none;\n"
-"}\n"
-"\n"
-".tablist li.current a {\n"
-"    background-image: url('tab_a.png');\n"
-"    background-repeat:repeat-x;\n"
-"    color: #fff;\n"
-"    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-"}\n"
-;
-
-struct img_data_item
-{
-  const char *name;
-  unsigned char *content;
-  unsigned int len;
-};
-
-
-static void writeImgData(const char *dir,img_data_item *data)
-{
-  while (data->name)
-  {
-    QCString fileName;
-    fileName=(QCString)dir+"/"+data->name;
-    QFile f(fileName);
-    if (f.open(IO_WriteOnly))
-    {
-      f.writeBlock((char*)data->content,
-                    data->len>0 ? data->len : qstrlen((char*)data->content));
-    }
-    else
-    {
-      fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
-    }
-    Doxygen::indexList->addImageFile(QCString("/search/")+data->name);
-    data++;
-  }
-}
-
-static ColoredImgDataItem colored_tab_data[] =
-{
-  // file_name      W   H  luma_data        alpha_data
-  { "tab_a.png",    1, 36, tab_a_png,       0 },
-  { "tab_b.png",    1, 36, tab_b_png,       0 },
-  { "tab_h.png",    1, 36, tab_h_png,       0 },
-  { "tab_s.png",    1, 36, tab_s_png,       0 },
-  { "nav_h.png",    1, 12, header_png,      0 },
-  { "nav_f.png",    1, 56, func_header_png, 0 },
-  { "bc_s.png",     8, 30, bc_s_png,        bc_s_a_png },
-  { "doxygen.png", 104,31, doxygen_png,     doxygen_a_png },
-  { "closed.png",   9,  9, closed_png,      closed_a_png },
-  { "open.png",     9,  9, open_png,        open_a_png },
-  { "bdwn.png",     7,  8, bdwn_png,        bdwn_a_png },
-  { "sync_on.png", 24, 24, sync_on_png,     sync_a_png },
-  { "sync_off.png",24, 24, sync_off_png,    sync_a_png },
-  { 0, 0, 0, 0, 0 }
-};
-
-static img_data_item search_client_data[] =
-{
-  // file_name          raw_data          num bytes
-  { "mag_sel.png",      mag_sel_png,      mag_sel_png_len  },
-  { "search_l.png",     search_l_png,     search_l_png_len },
-  { "search_m.png",     search_m_png,     search_m_png_len },
-  { "search_r.png",     search_r_png,     search_r_png_len },
-  { "close.png",        close_png,        close_png_len    },
-  { 0, 0, 0 }
-};
-
-static img_data_item search_server_data[] =
-{
-  // file_name          raw_data          num bytes
-  { "mag.png",          mag_png,          mag_png_len      },
-  { "search_l.png",     search_l_png,     search_l_png_len },
-  { "search_m.png",     search_m_png,     search_m_png_len },
-  { "search_r.png",     search_r_png,     search_r_png_len },
-  { 0, 0, 0 }
-};
-
-//------------------------------------------------------------------------
 
 static void writeClientSearchBox(FTextStream &t,const char *relPath)
 {
@@ -982,11 +172,13 @@ static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSe
 {
   QGString result;
   FTextStream t(&result);
-  if (serverSide) {
+  if (serverSide)
+  {
     writeServerSearchBox(t, relPath, highlightSearch);
   }
-  else {
-     writeClientSearchBox(t, relPath);
+  else
+  {
+    writeClientSearchBox(t, relPath);
   }
   return QCString(result);
 }
@@ -1096,6 +288,7 @@ static QCString substituteHtmlKeywords(const QCString &s,
   {
     treeViewCssJs = "<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
                     "<script type=\"text/javascript\" src=\"$relpath^resize.js\"></script>\n"
+                    "<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
                     "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n"
                     "<script type=\"text/javascript\">\n"
                     "  $(document).ready(initResizable);\n"
@@ -1106,12 +299,16 @@ static QCString substituteHtmlKeywords(const QCString &s,
   if (searchEngine)
   {
     searchCssJs = "<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
+    if (!serverBasedSearch)
+    {
+      searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
+    }
     searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
 
     if (!serverBasedSearch) 
     {
       searchCssJs += "<script type=\"text/javascript\">\n"
-                     "  $(document).ready(function() { searchBox.OnSelectItem(0); });\n"
+                     "  $(document).ready(function() { init_search(); });\n"
                      "</script>";
     }
     else 
@@ -1124,7 +321,7 @@ static QCString substituteHtmlKeywords(const QCString &s,
 
       // OPENSEARCH_PROVIDER {
       searchCssJs += "<link rel=\"search\" href=\"" + relPath +
-                     "search-opensearch.php?v=opensearch.xml\" "
+                     "search_opensearch.php?v=opensearch.xml\" "
                      "type=\"application/opensearchdescription+xml\" title=\"" +
                      (hasProjectName ? projectName : QCString("Doxygen")) + 
                      "\"/>";
@@ -1504,7 +701,7 @@ void HtmlGenerator::init()
   }
   else 
   {
-    g_header = defaultHtmlHeader;
+    g_header = ResourceMgr::instance().getAsString("header.html");
   }
 
   if (!Config_getString("HTML_FOOTER").isEmpty()) 
@@ -1514,7 +711,7 @@ void HtmlGenerator::init()
   }
   else 
   {
-    g_footer = defaultHtmlFooter;
+    g_footer = ResourceMgr::instance().getAsString("footer.html");
   }
 
   if (Config_getBool("USE_MATHJAX"))
@@ -1527,54 +724,24 @@ void HtmlGenerator::init()
   }
   createSubDirs(d);
 
-  QCString fileName=dname+"/tabs.css";
-  QFile f(fileName);
-  if (f.open(IO_WriteOnly))
-  {
-    FTextStream t(&f);
-    t << replaceColorMarkers(tabs_css);
-  }
-  else
-  {
-    fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data());
-  }
-
-  {
-    QFile f(dname+"/jquery.js");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << search_jquery_script1 << search_jquery_script2 << search_jquery_script3;
-      if (Config_getBool("GENERATE_TREEVIEW"))
-      {
-        t << search_jquery_script4 << search_jquery_script5;
-      }
-      if (Config_getBool("SOURCE_BROWSER"))
-      {
-        t << search_jquery_script6;
-      }
-    }
-  }
-
+  ResourceMgr &mgr = ResourceMgr::instance();
+  mgr.copyResource("tabs.css",dname);
+  mgr.copyResource("jquery.js",dname);
   if (Config_getBool("INTERACTIVE_SVG"))
   {
-    QFile f(dname+"/svgpan.js");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << svgpan_script;
-    }
+    mgr.copyResource("svgpan.js",dname);
   }
 
   {
     QFile f(dname+"/dynsections.js");
     if (f.open(IO_WriteOnly))
     {
+      const Resource *res = mgr.get("dynsections.js");
       FTextStream t(&f);
-      t << dynsections_script;
+      t << (const char *)res->data;
       if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS"))
       {
-        t << endl << 
+        t << endl <<
           "$(document).ready(function() {\n"
           "  $('.code,.codeRef').each(function() {\n"
           "    $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n"
@@ -1591,57 +758,95 @@ void HtmlGenerator::writeTabData()
 {
   Doxygen::indexList->addStyleSheetFile("tabs.css");
   QCString dname=Config_getString("HTML_OUTPUT");
-  writeColoredImgData(dname,colored_tab_data);
-
-  {
-    unsigned char shadow[6] = { 5, 5, 5, 5, 5, 5 };
-    unsigned char shadow_alpha[6]  = { 80, 60, 40, 20, 10, 0 };
-    ColoredImage img(1,6,shadow,shadow_alpha,0,0,100);
-    img.save(dname+"/nav_g.png");
-  }
+  ResourceMgr &mgr = ResourceMgr::instance();
+  //writeColoredImgData(dname,colored_tab_data);
+  mgr.copyResource("tab_a.lum",dname);
+  mgr.copyResource("tab_b.lum",dname);
+  mgr.copyResource("tab_h.lum",dname);
+  mgr.copyResource("tab_s.lum",dname);
+  mgr.copyResource("nav_h.lum",dname);
+  mgr.copyResource("nav_f.lum",dname);
+  mgr.copyResource("bc_s.luma",dname);
+  mgr.copyResource("doxygen.luma",dname);
+  mgr.copyResource("closed.luma",dname);
+  mgr.copyResource("open.luma",dname);
+  mgr.copyResource("bdwn.luma",dname);
+  mgr.copyResource("sync_on.luma",dname);
+  mgr.copyResource("sync_off.luma",dname);
+
+  //{
+  //  unsigned char shadow[6] = { 5, 5, 5, 5, 5, 5 };
+  //  unsigned char shadow_alpha[6]  = { 80, 60, 40, 20, 10, 0 };
+  //  ColoredImage img(1,6,shadow,shadow_alpha,0,0,100);
+  //  img.save(dname+"/nav_g.png");
+  //}
+  mgr.copyResource("nav_g.png",dname);
 }
 
 void HtmlGenerator::writeSearchData(const char *dir)
 {
   static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
-  writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
+  //writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
+  ResourceMgr &mgr = ResourceMgr::instance();
+
+  mgr.copyResource("search_l.png",dir);
+  Doxygen::indexList->addImageFile("search/search_l.png");
+  mgr.copyResource("search_m.png",dir);
+  Doxygen::indexList->addImageFile("search/search_m.png");
+  mgr.copyResource("search_r.png",dir);
+  Doxygen::indexList->addImageFile("search/search_r.png");
+  if (serverBasedSearch)
+  {
+    mgr.copyResource("mag.png",dir);
+    Doxygen::indexList->addImageFile("search/mag.png");
+  }
+  else
+  {
+    mgr.copyResource("close.png",dir);
+    Doxygen::indexList->addImageFile("search/close.png");
+    mgr.copyResource("mag_sel.png",dir);
+    Doxygen::indexList->addImageFile("search/mag_sel.png");
+  }
+
   QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
   QFile f(searchDirName+"/search.css");
   if (f.open(IO_WriteOnly))
   {
-    FTextStream t(&f);
-    QCString searchCss = replaceColorMarkers(search_styleSheet);
-    searchCss = substitute(searchCss,"$doxygenversion",versionString);
-    if (Config_getBool("DISABLE_INDEX"))
+    const Resource *res = mgr.get("search.css");
+    if (res)
     {
-      // move up the search box if there are no tabs
-      searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
+      FTextStream t(&f);
+      QCString searchCss = replaceColorMarkers((const char *)res->data);
+      searchCss = substitute(searchCss,"$doxygenversion",versionString);
+      if (Config_getBool("DISABLE_INDEX"))
+      {
+        // move up the search box if there are no tabs
+        searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
+      }
+      t << searchCss;
+      Doxygen::indexList->addStyleSheetFile("search/search.css");
     }
-    t << searchCss;
   }
-  Doxygen::indexList->addStyleSheetFile("search/search.css");
 }
 
 void HtmlGenerator::writeStyleSheetFile(QFile &file)
 {
   FTextStream t(&file);
-  t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
+  t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",versionString));
 }
 
 void HtmlGenerator::writeHeaderFile(QFile &file, const char * /*cssname*/)
 {
   FTextStream t(&file);
   t << "<!-- HTML header for doxygen " << versionString << "-->" << endl;
-  QCString contents(defaultHtmlHeader);
-  t << contents;
+  t << ResourceMgr::instance().getAsString("header.html");
 }
 
 void HtmlGenerator::writeFooterFile(QFile &file)
 {
   FTextStream t(&file);
   t << "<!-- HTML footer for doxygen " << versionString << "-->" <<  endl;
-  QCString contents(defaultHtmlFooter);
-  t << contents;
+  t << ResourceMgr::instance().getAsString("footer.html");
 }
 
 void HtmlGenerator::startFile(const char *name,const char *,
@@ -1779,7 +984,7 @@ void HtmlGenerator::writeStyleInfo(int part)
       //t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
       //t << "     border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
 
-      t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
+      t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",versionString));
       endPlainFile();
       Doxygen::indexList->addStyleSheetFile("doxygen.css");
     }
@@ -3007,9 +2212,10 @@ void HtmlGenerator::writeSearchPage()
   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
   static bool disableIndex = Config_getBool("DISABLE_INDEX");
   static QCString projectName = Config_getString("PROJECT_NAME");
+  static QCString htmlOutput = Config_getString("HTML_OUTPUT");
 
   // OPENSEARCH_PROVIDER {
-  QCString configFileName = Config_getString("HTML_OUTPUT")+"/search-config.php";
+  QCString configFileName = htmlOutput+"/search_config.php";
   QFile cf(configFileName);
   if (cf.open(IO_WriteOnly))
   {
@@ -3035,26 +2241,11 @@ void HtmlGenerator::writeSearchPage()
     t << "</script>\n";
   }
 
-  QCString functionsFileName = Config_getString("HTML_OUTPUT")+"/search-functions.php";
-  QFile ff(functionsFileName);
-  if (ff.open(IO_WriteOnly))
-  {
-    FTextStream t(&ff);
-    // Write stuff from search_functions.php source file...
-    t << search_functions_script;
-  }
-
-  QCString opensearchFileName = Config_getString("HTML_OUTPUT")+"/search-opensearch.php";
-  QFile of(opensearchFileName);
-  if (of.open(IO_WriteOnly))
-  {
-    FTextStream t(&of);
-    // Write stuff from search_opensearch.php source file...
-    t << search_opensearch_script;
-  }
+  ResourceMgr::instance().copyResource("search_functions.php",htmlOutput);
+  ResourceMgr::instance().copyResource("search_opensearch.php",htmlOutput);
   // OPENSEARCH_PROVIDER }
 
-  QCString fileName = Config_getString("HTML_OUTPUT")+"/search.php";
+  QCString fileName = htmlOutput+"/search.php";
   QFile f(fileName);
   if (f.open(IO_WriteOnly))
   {
@@ -3077,7 +2268,7 @@ void HtmlGenerator::writeSearchPage()
     }
 
     t << "<script language=\"php\">\n";
-    t << "require_once \"search-functions.php\";\n";
+    t << "require_once \"search_functions.php\";\n";
     t << "main();\n";
     t << "</script>\n";
 
@@ -3091,12 +2282,12 @@ void HtmlGenerator::writeSearchPage()
 
     writePageFooter(t,"Search","","");
   }
-  QCString scriptName = Config_getString("HTML_OUTPUT")+"/search/search.js";
+  QCString scriptName = htmlOutput+"/search/search.js";
   QFile sf(scriptName);
   if (sf.open(IO_WriteOnly))
   {
     FTextStream t(&sf);
-    t << extsearch_script;
+    t << ResourceMgr::instance().getAsString("extsearch.js");
   }
   else
   {
@@ -3188,7 +2379,7 @@ void HtmlGenerator::writeExternalSearchPage()
     }
     if (!first) t << endl;
     t << "};" << endl << endl;
-    t << extsearch_script;
+    t << ResourceMgr::instance().getAsString("extsearch.js");
     t << endl;
     t << "$(document).ready(function() {" << endl;
     t << "  var query = trim(getURLParameter('query'));" << endl;
diff --git a/src/index.xsd b/src/index.xsd
deleted file mode 100644
index d7ab2a9..0000000
--- a/src/index.xsd
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <xsd:element name="doxygenindex" type="DoxygenType"/>
-
-  <xsd:complexType name="DoxygenType">
-    <xsd:sequence>
-      <xsd:element name="compound" type="CompoundType" minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-    <xsd:attribute name="version" type="xsd:string" use="required"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="CompoundType">
-    <xsd:sequence>
-      <xsd:element name="name" type="xsd:string"/>
-      <xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-    <xsd:attribute name="refid" type="xsd:string" use="required"/>
-    <xsd:attribute name="kind" type="CompoundKind" use="required"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="MemberType">
-    <xsd:sequence>
-      <xsd:element name="name" type="xsd:string"/>
-    </xsd:sequence>
-    <xsd:attribute name="refid" type="xsd:string" use="required"/>
-    <xsd:attribute name="kind" type="MemberKind" use="required"/>
-  </xsd:complexType>
-  
-  <xsd:simpleType name="CompoundKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="class"/>
-      <xsd:enumeration value="struct"/>
-      <xsd:enumeration value="union"/>
-      <xsd:enumeration value="interface"/>
-      <xsd:enumeration value="protocol"/>
-      <xsd:enumeration value="category"/>
-      <xsd:enumeration value="exception"/>
-      <xsd:enumeration value="file"/>
-      <xsd:enumeration value="namespace"/>
-      <xsd:enumeration value="group"/>
-      <xsd:enumeration value="page"/>
-      <xsd:enumeration value="example"/>
-      <xsd:enumeration value="dir"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="MemberKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="define"/>
-      <xsd:enumeration value="property"/>
-      <xsd:enumeration value="event"/>
-      <xsd:enumeration value="variable"/>
-      <xsd:enumeration value="typedef"/>
-      <xsd:enumeration value="enum"/>
-      <xsd:enumeration value="enumvalue"/>
-      <xsd:enumeration value="function"/>
-      <xsd:enumeration value="signal"/>
-      <xsd:enumeration value="prototype"/>
-      <xsd:enumeration value="friend"/>
-      <xsd:enumeration value="dcop"/>
-      <xsd:enumeration value="slot"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-</xsd:schema>
-
diff --git a/src/jquery_fx.js b/src/jquery_fx.js
deleted file mode 100644
index 97e5843..0000000
--- a/src/jquery_fx.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);
\ No newline at end of file
diff --git a/src/jquery_p1.js b/src/jquery_p1.js
deleted file mode 100644
index 06eb7e6..0000000
--- a/src/jquery_p1.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon Nov 21 21:11:03 2011 -0500
- */
-(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))
-}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;
-if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false
diff --git a/src/jquery_p2.js b/src/jquery_p2.js
deleted file mode 100644
index bc16cf6..0000000
--- a/src/jquery_p2.js
+++ /dev/null
@@ -1,10 +0,0 @@
-}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
-/*!
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1
-},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);
-ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;
diff --git a/src/jquery_p3.js b/src/jquery_p3.js
deleted file mode 100644
index c0f18ce..0000000
--- a/src/jquery_p3.js
+++ /dev/null
@@ -1,3 +0,0 @@
-if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)
-}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b
-})}})(window);
\ No newline at end of file
diff --git a/src/jquery_pt.js b/src/jquery_pt.js
deleted file mode 100644
index cbc428d..0000000
--- a/src/jquery_pt.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- PowerTip - v1.2.0 - 2013-04-03
- http://stevenbenner.github.com/jquery-powertip/
- Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
- Released under MIT license.
- https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
-*/
-(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));
\ No newline at end of file
diff --git a/src/jquery_ui.js b/src/jquery_ui.js
deleted file mode 100644
index 0ef321d..0000000
--- a/src/jquery_ui.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
- * jQuery UI 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
- * jQuery UI Widget 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
- * jQuery UI Mouse 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
- */
-(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;
-p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
- * jQuery hashchange event - v1.3 - 7/21/2010
- * http://benalman.com/projects/jquery-hashchange-plugin/
- * 
- * Copyright (c) 2010 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
\ No newline at end of file
diff --git a/src/lang_cfg.py b/src/lang_cfg.py
old mode 100644
new mode 100755
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 7cdfeaf..874b485 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -36,30 +36,7 @@
 #include "classlist.h"
 #include "namespacedef.h"
 #include "filename.h"
-
-static const char doxygenLatexStyle[] =
-#include "doxygen.sty.h"
-;
-
-//static QCString filterTitle(const char *s)
-//{
-//  QCString tmp=s,result;
-//  uint i;for (i=0;i<tmp.length();i++)
-//  {
-//    char c=tmp.at(i);
-//    switch(c)
-//    {
-//      case '#': result+="\\#";  break;
-//      case '"': result+="\\\""; break;
-//      case '%': result+="\\%";  break;
-//      case '[': result+="{";    break;
-//      case ']': result+="}";    break;
-//      default:  result+=c;      break;
-//    }
-//  }
-//  return result;  
-//}
-
+#include "resourcemgr.h"
 
 
 LatexGenerator::LatexGenerator() : OutputGenerator()
@@ -524,7 +501,7 @@ static void writeDefaultHeaderPart3(FTextStream &t)
 
 static void writeDefaultStyleSheet(FTextStream &t)
 {
-  t << doxygenLatexStyle;
+  t << ResourceMgr::instance().getAsString("doxygen.sty");
 }
 
 static void writeDefaultFooter(FTextStream &t)
diff --git a/src/layout_default.h b/src/layout_default.h
deleted file mode 100644
index d775926..0000000
--- a/src/layout_default.h
+++ /dev/null
@@ -1,194 +0,0 @@
-"<doxygenlayout version=\"1.0\">\n"
-"  <!-- Generated by doxygen $doxygenversion -->\n"
-"  <!-- Navigation index tabs for HTML output -->\n"
-"  <navindex>\n"
-"    <tab type=\"mainpage\" visible=\"yes\" title=\"\"/>\n"
-"    <tab type=\"pages\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    <tab type=\"modules\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    <tab type=\"namespaces\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"namespacelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"      <tab type=\"namespacemembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    </tab>\n"
-"    <tab type=\"classes\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"classlist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"      <tab type=\"classindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n"
-"      <tab type=\"hierarchy\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"      <tab type=\"classmembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    </tab>\n"
-"    <tab type=\"files\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"filelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"      <tab type=\"globals\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-"    </tab>\n"
-"    <tab type=\"examples\" visible=\"yes\" title=\"\" intro=\"\"/>  \n"
-"  </navindex>\n"
-"\n"
-"  <!-- Layout definition for a class page -->\n"
-"  <class>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n"
-"    <inheritancegraph visible=\"$CLASS_GRAPH\"/>\n"
-"    <collaborationgraph visible=\"$COLLABORATION_GRAPH\"/>\n"
-"    <memberdecl>\n"
-"      <nestedclasses visible=\"yes\" title=\"\"/>\n"
-"      <publictypes title=\"\"/>\n"
-"      <services title=\"\"/>\n"
-"      <interfaces title=\"\"/>\n"
-"      <publicslots title=\"\"/>\n"
-"      <signals title=\"\"/>\n"
-"      <publicmethods title=\"\"/>\n"
-"      <publicstaticmethods title=\"\"/>\n"
-"      <publicattributes title=\"\"/>\n"
-"      <publicstaticattributes title=\"\"/>\n"
-"      <protectedtypes title=\"\"/>\n"
-"      <protectedslots title=\"\"/>\n"
-"      <protectedmethods title=\"\"/>\n"
-"      <protectedstaticmethods title=\"\"/>\n"
-"      <protectedattributes title=\"\"/>\n"
-"      <protectedstaticattributes title=\"\"/>\n"
-"      <packagetypes title=\"\"/>\n"
-"      <packagemethods title=\"\"/>\n"
-"      <packagestaticmethods title=\"\"/>\n"
-"      <packageattributes title=\"\"/>\n"
-"      <packagestaticattributes title=\"\"/>\n"
-"      <properties title=\"\"/>\n"
-"      <events title=\"\"/>\n"
-"      <privatetypes title=\"\"/>\n"
-"      <privateslots title=\"\"/>\n"
-"      <privatemethods title=\"\"/>\n"
-"      <privatestaticmethods title=\"\"/>\n"
-"      <privateattributes title=\"\"/>\n"
-"      <privatestaticattributes title=\"\"/>\n"
-"      <friends title=\"\"/>\n"
-"      <related title=\"\" subtitle=\"\"/>\n"
-"      <membergroups visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"    <memberdef>\n"
-"      <inlineclasses title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <services title=\"\"/>\n"
-"      <interfaces title=\"\"/>\n"
-"      <constructors title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <related title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <properties title=\"\"/>\n"
-"      <events title=\"\"/>\n"
-"    </memberdef>\n"
-"    <allmemberslink visible=\"yes\"/>\n"
-"    <usedfiles visible=\"$SHOW_USED_FILES\"/>\n"
-"    <authorsection visible=\"yes\"/>\n"
-"  </class>\n"
-"\n"
-"  <!-- Layout definition for a namespace page -->\n"
-"  <namespace>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <memberdecl>\n"
-"      <nestednamespaces visible=\"yes\" title=\"\"/>\n"
-"      <constantgroups visible=\"yes\" title=\"\"/>\n"
-"      <classes visible=\"yes\" title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <membergroups visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"    <memberdef>\n"
-"      <inlineclasses title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"    </memberdef>\n"
-"    <authorsection visible=\"yes\"/>\n"
-"  </namespace>\n"
-"\n"
-"  <!-- Layout definition for a file page -->\n"
-"  <file>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n"
-"    <includegraph visible=\"$INCLUDE_GRAPH\"/>\n"
-"    <includedbygraph visible=\"$INCLUDED_BY_GRAPH\"/>\n"
-"    <sourcelink visible=\"yes\"/>\n"
-"    <memberdecl>\n"
-"      <classes visible=\"yes\" title=\"\"/>\n"
-"      <namespaces visible=\"yes\" title=\"\"/>\n"
-"      <constantgroups visible=\"yes\" title=\"\"/>\n"
-"      <defines title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <membergroups visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"    <memberdef>\n"
-"      <inlineclasses title=\"\"/>\n"
-"      <defines title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"    </memberdef>\n"
-"    <authorsection/>\n"
-"  </file>\n"
-"\n"
-"  <!-- Layout definition for a group page -->\n"
-"  <group>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <groupgraph visible=\"$GROUP_GRAPHS\"/>\n"
-"    <memberdecl>\n"
-"      <nestedgroups visible=\"yes\" title=\"\"/>\n"
-"      <dirs visible=\"yes\" title=\"\"/>\n"
-"      <files visible=\"yes\" title=\"\"/>\n"
-"      <namespaces visible=\"yes\" title=\"\"/>\n"
-"      <classes visible=\"yes\" title=\"\"/>\n"
-"      <defines title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <enumvalues title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <signals title=\"\"/>\n"
-"      <publicslots title=\"\"/>\n"
-"      <protectedslots title=\"\"/>\n"
-"      <privateslots title=\"\"/>\n"
-"      <events title=\"\"/>\n"
-"      <properties title=\"\"/>\n"
-"      <friends title=\"\"/>\n"
-"      <membergroups visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"    <memberdef>\n"
-"      <pagedocs/>\n"
-"      <inlineclasses title=\"\"/>\n"
-"      <defines title=\"\"/>\n"
-"      <typedefs title=\"\"/>\n"
-"      <enums title=\"\"/>\n"
-"      <enumvalues title=\"\"/>\n"
-"      <functions title=\"\"/>\n"
-"      <variables title=\"\"/>\n"
-"      <signals title=\"\"/>\n"
-"      <publicslots title=\"\"/>\n"
-"      <protectedslots title=\"\"/>\n"
-"      <privateslots title=\"\"/>\n"
-"      <events title=\"\"/>\n"
-"      <properties title=\"\"/>\n"
-"      <friends title=\"\"/>\n"
-"    </memberdef>\n"
-"    <authorsection visible=\"yes\"/>\n"
-"  </group>\n"
-"\n"
-"  <!-- Layout definition for a directory page -->\n"
-"  <directory>\n"
-"    <briefdescription visible=\"yes\"/>\n"
-"    <directorygraph visible=\"yes\"/>\n"
-"    <memberdecl>\n"
-"      <dirs visible=\"yes\"/>\n"
-"      <files visible=\"yes\"/>\n"
-"    </memberdecl>\n"
-"    <detaileddescription title=\"\"/>\n"
-"  </directory>\n"
-"</doxygenlayout>\n"
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 7dbc74f..39df3cd 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -98,6 +98,7 @@ HEADERS      =	arguments.h \
 		qhp.h \
 		qhpxmlwriter.h \
 		reflist.h \
+		resourcemgr.h \
                 rtfdocvisitor.h \
 		rtfgen.h \
 		rtfstyle.h \
@@ -188,6 +189,7 @@ SOURCES      =	arguments.cpp \
 		qhp.cpp \
 		qhpxmlwriter.cpp \
 		reflist.cpp \
+		resourcemgr.cpp \
                 rtfdocvisitor.cpp \
 		rtfgen.cpp \
 		rtfstyle.cpp \
@@ -220,7 +222,8 @@ SOURCES      =	arguments.cpp \
                 ../generated_src/doxygen/tclscanner.cpp \
 		../generated_src/doxygen/fortrancode.cpp \
 		../generated_src/doxygen/fortranscanner.cpp \
-		../generated_src/doxygen/version.cpp 
+		../generated_src/doxygen/version.cpp \
+		../generated_src/doxygen/resources.cpp 
 		
 		
 
diff --git a/src/libdoxygen.t.in b/src/libdoxygen.t.in
index 314e94c..58563d1 100644
--- a/src/libdoxygen.t.in
+++ b/src/libdoxygen.t.in
@@ -111,98 +111,16 @@ sub GenerateLex {
 	$(YACC) -l -d -p ce_parsexpYY constexp.y -o \$(GENERATED_SRC)/ce_parse.c 
 	-rm $(GENERATED_SRC)/ce_parse.c
 
-
-
-TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
-
 #$ GenerateDep("layout.cpp","\$(GENERATED_SRC)/layout_default.xml.h");
 
-#$ GenerateDep("cite.cpp","\$(GENERATED_SRC)/doxygen.bst.h","\$(GENERATED_SRC)/bib2xhtml.pl.h");
-
-#$ GenerateDep("ftvhelp.cpp","\$(GENERATED_SRC)/navtree.js.h","\$(GENERATED_SRC)/resize.js.h","\$(GENERATED_SRC)/navtree.css.h");
-
-#$ GenerateDep("htmlgen.cpp","\$(GENERATED_SRC)/header.html.h","\$(GENERATED_SRC)/footer.html.h","\$(GENERATED_SRC)/doxygen.css.h","\$(GENERATED_SRC)/search_functions.php.h","\$(GENERATED_SRC)/search_opensearch.php.h","\$(GENERATED_SRC)/search.css.h","\$(GENERATED_SRC)/jquery_p1.js.h","\$(GENERATED_SRC)/jquery_p2.js.h","\$(GENERATED_SRC)/jquery_p3.js.h","\$(GENERATED_SRC)/jquery_ui.js.h","\$(GENERATED_SRC)/jquery_fx.js.h","\$(GENERATED_SRC)/jquery_pt.js.h","\$(GENERATED_SRC)/svgpan.js.h","\$(GENERATED_SRC)/dynsections.js.h","\$(GENERATED_SRC)/extsearch.js.h");
-
-#$ GenerateDep("xmlgen.cpp","\$(GENERATED_SRC)/index.xsd.h","\$(GENERATED_SRC)/compound.xsd.h");
-
-#$ GenerateDep("latexgen.cpp","\$(GENERATED_SRC)/doxygen.sty.h");
-
-#$ GenerateDep("searchindex.cpp","\$(GENERATED_SRC)/search.js.h");
-
-$(GENERATED_SRC)/index.xsd.h: index.xsd
-	$(TO_C_CMD)
+$(GENERATED_SRC)/version.cpp: ../configure
+	$(PYTHON) version.py $(GENERATED_SRC)
 
-$(GENERATED_SRC)/compound.xsd.h: compound.xsd
-	$(TO_C_CMD)
+TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
 
 $(GENERATED_SRC)/layout_default.xml.h: layout_default.xml
 	$(TO_C_CMD)
 
-$(GENERATED_SRC)/header.html.h: header.html
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/footer.html.h: footer.html
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search_functions.php.h: search_functions.php
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search_opensearch.php.h: search_opensearch.php
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search.js.h: search.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/search.css.h: search.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/extsearch.js.h: extsearch.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.css.h: doxygen.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.sty.h: doxygen.sty
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/navtree.js.h: navtree.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/resize.js.h: resize.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p1.js.h: jquery_p1.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p2.js.h: jquery_p2.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p3.js.h: jquery_p3.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_ui.js.h: jquery_ui.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_fx.js.h: jquery_fx.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_pt.js.h: jquery_pt.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/navtree.css.h: navtree.css
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/svgpan.js.h: svgpan.js
-	$(TO_C_CMD)
+../generated_src/doxygen/resources.cpp: res2cc_cmd.py $(wildcard ../templates/html/*)
+	$(PYTHON) res2cc_cmd.py ../templates ../generated_src/doxygen/resources.cpp
 
-$(GENERATED_SRC)/dynsections.js.h: dynsections.js
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.bst.h: doxygen.bst
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/bib2xhtml.pl.h: bib2xhtml.pl
-	$(TO_C_CMD)
-
-$(GENERATED_SRC)/version.cpp: ../configure
-	$(PYTHON) version.py $(GENERATED_SRC)
diff --git a/src/navtree.css b/src/navtree.css
deleted file mode 100644
index a2ae30a..0000000
--- a/src/navtree.css
+++ /dev/null
@@ -1,143 +0,0 @@
-#nav-tree .children_ul {
-  margin:0;
-  padding:4px;
-}
-
-#nav-tree ul {
-  list-style:none outside none;
-  margin:0px;
-  padding:0px;
-}
-
-#nav-tree li {
-  white-space:nowrap;
-  margin:0px;
-  padding:0px;
-}
-
-#nav-tree .plus {
-  margin:0px;
-}
-
-#nav-tree .selected {
-  background-image: url('tab_a.png');
-  background-repeat:repeat-x;
-  color: #fff;
-  text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
-}
-
-#nav-tree img {
-  margin:0px;
-  padding:0px;
-  border:0px;
-  vertical-align: middle;
-}
-
-#nav-tree a {
-  text-decoration:none;
-  padding:0px;
-  margin:0px;
-  outline:none;
-}
-
-#nav-tree .label {
-  margin:0px;
-  padding:0px;
-  font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
-}
-
-#nav-tree .label a {
-  padding:2px;
-}
-
-#nav-tree .selected a {
-  text-decoration:none;
-  color:#fff;
-}
-
-#nav-tree .children_ul {
-  margin:0px;
-  padding:0px;
-}
-
-#nav-tree .item {
-  margin:0px;
-  padding:0px;
-}
-
-#nav-tree {
-  padding: 0px 0px;
-  background-color: #FAFAFF; 
-  font-size:14px;
-  overflow:auto;
-}
-
-#doc-content {
-  overflow:auto;
-  display:block;
-  padding:0px;
-  margin:0px;
-  -webkit-overflow-scrolling : touch; /* iOS 5+ */
-}
-
-#side-nav {
-  padding:0 6px 0 0;
-  margin: 0px;
-  display:block;
-  position: absolute;
-  left: 0px;
-  width: $width;
-}
-
-.ui-resizable .ui-resizable-handle {
-  display:block;
-}
-
-.ui-resizable-e {
-  background:url("ftv2splitbar.png") repeat scroll right center transparent;
-  cursor:e-resize;
-  height:100%;
-  right:0;
-  top:0;
-  width:6px;
-}
-
-.ui-resizable-handle {
-  display:none;
-  font-size:0.1px;
-  position:absolute;
-  z-index:1;
-}
-
-#nav-tree-contents {
-  margin: 6px 0px 0px 0px;
-}
-
-#nav-tree {
-  background-image:url('nav_h.png');
-  background-repeat:repeat-x;
-  background-color: ##FA;
-  -webkit-overflow-scrolling : touch; /* iOS 5+ */
-}
-
-#nav-sync {
-  position:absolute;
-  top:5px;
-  right:24px;
-  z-index:0;
-}
-
-#nav-sync img {
-  opacity:0.3;
-}
-
-#nav-sync img:hover {
-  opacity:0.9;
-}
-
-@media print
-{
-  #nav-tree { display: none; }
-  div.ui-resizable-handle { display: none; position: relative; }
-}
-
diff --git a/src/navtree.js b/src/navtree.js
deleted file mode 100644
index 3914be8..0000000
--- a/src/navtree.js
+++ /dev/null
@@ -1,527 +0,0 @@
-var navTreeSubIndices = new Array();
-
-function getData(varName)
-{
-  var i = varName.lastIndexOf('/');
-  var n = i>=0 ? varName.substring(i+1) : varName;
-  return eval(n.replace(/\-/g,'_'));
-}
-
-function stripPath(uri)
-{
-  return uri.substring(uri.lastIndexOf('/')+1);
-}
-
-function stripPath2(uri)
-{
-  var i = uri.lastIndexOf('/');
-  var s = uri.substring(i+1);
-  var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
-  return m ? uri.substring(i-6) : s;
-}
-
-function hashValue()
-{
-  return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
-}
-
-function hashUrl()
-{
-  return '#'+hashValue();
-}
-
-function pathName()
-{
-  return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
-}
-
-function localStorageSupported()
-{
-  try {
-    return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
-  }
-  catch(e) {
-    return false;
-  }
-}
-
-
-function storeLink(link)
-{
-  if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
-      window.localStorage.setItem('navpath',link);
-  }
-}
-
-function deleteLink()
-{
-  if (localStorageSupported()) {
-    window.localStorage.setItem('navpath','');
-  }
-}
-
-function cachedLink()
-{
-  if (localStorageSupported()) {
-    return window.localStorage.getItem('navpath');
-  } else {
-    return '';
-  }
-}
-
-function getScript(scriptName,func,show)
-{
-  var head = document.getElementsByTagName("head")[0]; 
-  var script = document.createElement('script');
-  script.id = scriptName;
-  script.type = 'text/javascript';
-  script.onload = func; 
-  script.src = scriptName+'.js'; 
-  if ($.browser.msie && $.browser.version<=8) { 
-    // script.onload does not work with older versions of IE
-    script.onreadystatechange = function() {
-      if (script.readyState=='complete' || script.readyState=='loaded') { 
-        func(); if (show) showRoot(); 
-      }
-    }
-  }
-  head.appendChild(script); 
-}
-
-function createIndent(o,domNode,node,level)
-{
-  var level=-1;
-  var n = node;
-  while (n.parentNode) { level++; n=n.parentNode; }
-  if (node.childrenData) {
-    var imgNode = document.createElement("img");
-    imgNode.style.paddingLeft=(16*level).toString()+'px';
-    imgNode.width  = 16;
-    imgNode.height = 22;
-    imgNode.border = 0;
-    node.plus_img = imgNode;
-    node.expandToggle = document.createElement("a");
-    node.expandToggle.href = "javascript:void(0)";
-    node.expandToggle.onclick = function() {
-      if (node.expanded) {
-        $(node.getChildrenUL()).slideUp("fast");
-        node.plus_img.src = node.relpath+"ftv2pnode.png";
-        node.expanded = false;
-      } else {
-        expandNode(o, node, false, false);
-      }
-    }
-    node.expandToggle.appendChild(imgNode);
-    domNode.appendChild(node.expandToggle);
-    imgNode.src = node.relpath+"ftv2pnode.png";
-  } else {
-    var span = document.createElement("span");
-    span.style.display = 'inline-block';
-    span.style.width   = 16*(level+1)+'px';
-    span.style.height  = '22px';
-    span.innerHTML = '&#160;';
-    domNode.appendChild(span);
-  } 
-}
-
-var animationInProgress = false;
-
-function gotoAnchor(anchor,aname,updateLocation)
-{
-  var pos, docContent = $('#doc-content');
-  var ancParent = $(anchor.parent());
-  if (ancParent.hasClass('memItemLeft') ||
-      ancParent.hasClass('fieldname') ||
-      ancParent.hasClass('fieldtype') ||
-      ancParent.is(':header'))
-  {
-    pos = ancParent.position().top;
-  } else if (anchor.position()) {
-    pos = anchor.position().top;
-  }
-  if (pos) {
-    var dist = Math.abs(Math.min(
-               pos-docContent.offset().top,
-               docContent[0].scrollHeight-
-               docContent.height()-docContent.scrollTop()));
-    animationInProgress=true;
-    docContent.animate({
-      scrollTop: pos + docContent.scrollTop() - docContent.offset().top
-    },Math.max(50,Math.min(500,dist)),function(){
-      if (updateLocation) window.location.href=aname;
-      animationInProgress=false;
-    });
-  }
-}
-
-function newNode(o, po, text, link, childrenData, lastNode)
-{
-  var node = new Object();
-  node.children = Array();
-  node.childrenData = childrenData;
-  node.depth = po.depth + 1;
-  node.relpath = po.relpath;
-  node.isLast = lastNode;
-
-  node.li = document.createElement("li");
-  po.getChildrenUL().appendChild(node.li);
-  node.parentNode = po;
-
-  node.itemDiv = document.createElement("div");
-  node.itemDiv.className = "item";
-
-  node.labelSpan = document.createElement("span");
-  node.labelSpan.className = "label";
-
-  createIndent(o,node.itemDiv,node,0);
-  node.itemDiv.appendChild(node.labelSpan);
-  node.li.appendChild(node.itemDiv);
-
-  var a = document.createElement("a");
-  node.labelSpan.appendChild(a);
-  node.label = document.createTextNode(text);
-  node.expanded = false;
-  a.appendChild(node.label);
-  if (link) {
-    var url;
-    if (link.substring(0,1)=='^') {
-      url = link.substring(1);
-      link = url;
-    } else {
-      url = node.relpath+link;
-    }
-    a.className = stripPath(link.replace('#',':'));
-    if (link.indexOf('#')!=-1) {
-      var aname = '#'+link.split('#')[1];
-      var srcPage = stripPath(pathName());
-      var targetPage = stripPath(link.split('#')[0]);
-      a.href = srcPage!=targetPage ? url : "javascript:void(0)"; 
-      a.onclick = function(){
-        storeLink(link);
-        if (!$(a).parent().parent().hasClass('selected'))
-        {
-          $('.item').removeClass('selected');
-          $('.item').removeAttr('id');
-          $(a).parent().parent().addClass('selected');
-          $(a).parent().parent().attr('id','selected');
-        }
-        var anchor = $(aname);
-        gotoAnchor(anchor,aname,true);
-      };
-    } else {
-      a.href = url;
-      a.onclick = function() { storeLink(link); }
-    }
-  } else {
-    if (childrenData != null) 
-    {
-      a.className = "nolink";
-      a.href = "javascript:void(0)";
-      a.onclick = node.expandToggle.onclick;
-    }
-  }
-
-  node.childrenUL = null;
-  node.getChildrenUL = function() {
-    if (!node.childrenUL) {
-      node.childrenUL = document.createElement("ul");
-      node.childrenUL.className = "children_ul";
-      node.childrenUL.style.display = "none";
-      node.li.appendChild(node.childrenUL);
-    }
-    return node.childrenUL;
-  };
-
-  return node;
-}
-
-function showRoot()
-{
-  var headerHeight = $("#top").height();
-  var footerHeight = $("#nav-path").height();
-  var windowHeight = $(window).height() - headerHeight - footerHeight;
-  (function (){ // retry until we can scroll to the selected item
-    try {
-      var navtree=$('#nav-tree');
-      navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
-    } catch (err) {
-      setTimeout(arguments.callee, 0);
-    }
-  })();
-}
-
-function expandNode(o, node, imm, showRoot)
-{
-  if (node.childrenData && !node.expanded) {
-    if (typeof(node.childrenData)==='string') {
-      var varName    = node.childrenData;
-      getScript(node.relpath+varName,function(){
-        node.childrenData = getData(varName);
-        expandNode(o, node, imm, showRoot);
-      }, showRoot);
-    } else {
-      if (!node.childrenVisited) {
-        getNode(o, node);
-      } if (imm || ($.browser.msie && $.browser.version>8)) { 
-        // somehow slideDown jumps to the start of tree for IE9 :-(
-        $(node.getChildrenUL()).show();
-      } else {
-        $(node.getChildrenUL()).slideDown("fast");
-      }
-      if (node.isLast) {
-        node.plus_img.src = node.relpath+"ftv2mlastnode.png";
-      } else {
-        node.plus_img.src = node.relpath+"ftv2mnode.png";
-      }
-      node.expanded = true;
-    }
-  }
-}
-
-function glowEffect(n,duration)
-{
-  n.addClass('glow').delay(duration).queue(function(next){
-    $(this).removeClass('glow');next();
-  });
-}
-
-function highlightAnchor()
-{
-  var aname = hashUrl();
-  var anchor = $(aname);
-  if (anchor.parent().attr('class')=='memItemLeft'){
-    var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
-    glowEffect(rows.children(),300); // member without details
-  } else if (anchor.parent().attr('class')=='fieldname'){
-    glowEffect(anchor.parent().parent(),1000); // enum value
-  } else if (anchor.parent().attr('class')=='fieldtype'){
-    glowEffect(anchor.parent().parent(),1000); // struct field
-  } else if (anchor.parent().is(":header")) {
-    glowEffect(anchor.parent(),1000); // section header
-  } else {
-    glowEffect(anchor.next(),1000); // normal member
-  }
-  gotoAnchor(anchor,aname,false);
-}
-
-function selectAndHighlight(hash,n)
-{
-  var a;
-  if (hash) {
-    var link=stripPath(pathName())+':'+hash.substring(1);
-    a=$('.item a[class$="'+link+'"]');
-  }
-  if (a && a.length) {
-    a.parent().parent().addClass('selected');
-    a.parent().parent().attr('id','selected');
-    highlightAnchor();
-  } else if (n) {
-    $(n.itemDiv).addClass('selected');
-    $(n.itemDiv).attr('id','selected');
-  }
-  if ($('#nav-tree-contents .item:first').hasClass('selected')) {
-    $('#nav-sync').css('top','30px');
-  } else {
-    $('#nav-sync').css('top','5px');
-  }
-  showRoot();
-}
-
-function showNode(o, node, index, hash)
-{
-  if (node && node.childrenData) {
-    if (typeof(node.childrenData)==='string') {
-      var varName    = node.childrenData;
-      getScript(node.relpath+varName,function(){
-        node.childrenData = getData(varName);
-        showNode(o,node,index,hash);
-      },true);
-    } else {
-      if (!node.childrenVisited) {
-        getNode(o, node);
-      }
-      $(node.getChildrenUL()).css({'display':'block'});
-      if (node.isLast) {
-        node.plus_img.src = node.relpath+"ftv2mlastnode.png";
-      } else {
-        node.plus_img.src = node.relpath+"ftv2mnode.png";
-      }
-      node.expanded = true;
-      var n = node.children[o.breadcrumbs[index]];
-      if (index+1<o.breadcrumbs.length) {
-        showNode(o,n,index+1,hash);
-      } else {
-        if (typeof(n.childrenData)==='string') {
-          var varName = n.childrenData;
-          getScript(n.relpath+varName,function(){
-            n.childrenData = getData(varName);
-            node.expanded=false;
-            showNode(o,node,index,hash); // retry with child node expanded
-          },true);
-        } else {
-          var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
-          if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
-            expandNode(o, n, true, true);
-          }
-          selectAndHighlight(hash,n);
-        }
-      }
-    }
-  } else {
-    selectAndHighlight(hash);
-  }
-}
-
-function removeToInsertLater(element) {
-  var parentNode = element.parentNode;
-  var nextSibling = element.nextSibling;
-  parentNode.removeChild(element);
-  return function() {
-    if (nextSibling) {
-      parentNode.insertBefore(element, nextSibling);
-    } else {
-      parentNode.appendChild(element);
-    }
-  };
-}
-
-function getNode(o, po)
-{
-  var insertFunction = removeToInsertLater(po.li);
-  po.childrenVisited = true;
-  var l = po.childrenData.length-1;
-  for (var i in po.childrenData) {
-    var nodeData = po.childrenData[i];
-    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
-      i==l);
-  }
-  insertFunction();
-}
-
-function gotoNode(o,subIndex,root,hash,relpath)
-{
-  var nti = navTreeSubIndices[subIndex][root+hash];
-  o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
-  if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
-    navTo(o,NAVTREE[0][1],"",relpath);
-    $('.item').removeClass('selected');
-    $('.item').removeAttr('id');
-  }
-  if (o.breadcrumbs) {
-    o.breadcrumbs.unshift(0); // add 0 for root node
-    showNode(o, o.node, 0, hash);
-  }
-}
-
-function navTo(o,root,hash,relpath)
-{
-  var link = cachedLink();
-  if (link) {
-    var parts = link.split('#');
-    root = parts[0];
-    if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
-    else hash='';
-  }
-  if (hash.match(/^#l\d+$/)) {
-    var anchor=$('a[name='+hash.substring(1)+']');
-    glowEffect(anchor.parent(),1000); // line number
-    hash=''; // strip line number anchors
-  }
-  var url=root+hash;
-  var i=-1;
-  while (NAVTREEINDEX[i+1]<=url) i++;
-  if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
-  if (navTreeSubIndices[i]) {
-    gotoNode(o,i,root,hash,relpath)
-  } else {
-    getScript(relpath+'navtreeindex'+i,function(){
-      navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
-      if (navTreeSubIndices[i]) {
-        gotoNode(o,i,root,hash,relpath);
-      }
-    },true);
-  }
-}
-
-function showSyncOff(n,relpath)
-{
-    n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
-}
-
-function showSyncOn(n,relpath)
-{
-    n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
-}
-
-function toggleSyncButton(relpath)
-{
-  var navSync = $('#nav-sync');
-  if (navSync.hasClass('sync')) {
-    navSync.removeClass('sync');
-    showSyncOff(navSync,relpath);
-    storeLink(stripPath2(pathName())+hashUrl());
-  } else {
-    navSync.addClass('sync');
-    showSyncOn(navSync,relpath);
-    deleteLink();
-  }
-}
-
-function initNavTree(toroot,relpath)
-{
-  var o = new Object();
-  o.toroot = toroot;
-  o.node = new Object();
-  o.node.li = document.getElementById("nav-tree-contents");
-  o.node.childrenData = NAVTREE;
-  o.node.children = new Array();
-  o.node.childrenUL = document.createElement("ul");
-  o.node.getChildrenUL = function() { return o.node.childrenUL; };
-  o.node.li.appendChild(o.node.childrenUL);
-  o.node.depth = 0;
-  o.node.relpath = relpath;
-  o.node.expanded = false;
-  o.node.isLast = true;
-  o.node.plus_img = document.createElement("img");
-  o.node.plus_img.src = relpath+"ftv2pnode.png";
-  o.node.plus_img.width = 16;
-  o.node.plus_img.height = 22;
-
-  if (localStorageSupported()) {
-    var navSync = $('#nav-sync');
-    if (cachedLink()) {
-      showSyncOff(navSync,relpath);
-      navSync.removeClass('sync');
-    } else {
-      showSyncOn(navSync,relpath);
-    }
-    navSync.click(function(){ toggleSyncButton(relpath); });
-  }
-
-  $(window).load(function(){
-    navTo(o,toroot,hashUrl(),relpath);
-    showRoot();
-  });
-
-  $(window).bind('hashchange', function(){
-     if (window.location.hash && window.location.hash.length>1){
-       var a;
-       if ($(location).attr('hash')){
-         var clslink=stripPath(pathName())+':'+hashValue();
-         a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
-       }
-       if (a==null || !$(a).parent().parent().hasClass('selected')){
-         $('.item').removeClass('selected');
-         $('.item').removeAttr('id');
-       }
-       var link=stripPath2(pathName());
-       navTo(o,link,hashUrl(),relpath);
-     } else if (!animationInProgress) {
-       $('#doc-content').scrollTop(0);
-       $('.item').removeClass('selected');
-       $('.item').removeAttr('id');
-       navTo(o,toroot,hashUrl(),relpath);
-     }
-  })
-}
-
diff --git a/src/res2cc_cmd.py b/src/res2cc_cmd.py
new file mode 100755
index 0000000..40d2906
--- /dev/null
+++ b/src/res2cc_cmd.py
@@ -0,0 +1,102 @@
+from __future__ import print_function
+from os         import listdir, stat, walk
+from os.path    import isfile, join, splitext
+import sys
+
+class File(object):
+	def __init__(self,directory,subdir,fileName,mode):
+		self.directory = directory
+		self.subdir    = subdir
+		self.fileName  = fileName
+		filePath  = join(directory,subdir,fileName)
+		self.fileSize  = stat(filePath).st_size
+		self.bareName  = fileName.replace('.','_')
+		self.inputFile = open(filePath,mode)
+
+	def formatByte(self,byte):
+		if isinstance(byte,int):
+			return "%02x" % byte
+		else:
+			return format(ord(byte),'02x')
+
+	def writeBytes(self,data,outputFile):
+		bytes_per_line=16
+		print("static const unsigned char %s_data[] = " % self.bareName,file=outputFile)
+		print("{",file=outputFile)
+		lines = [data[x:x+bytes_per_line] for x in range(0,len(data),bytes_per_line)]
+		linesAsString = ',\n  '.join([', '.join(['0x'+self.formatByte(byte) for byte in line]) for line in lines])
+		print('  %s' % linesAsString,file=outputFile)
+		print("};",file=outputFile)
+		print("const int %s_len = %d;\n" % (self.bareName,len(data)),file=outputFile)
+
+	def convertToBytes(self,outputFile):
+		lines = [x for x in self.inputFile.readlines() if not x.startswith('#')]
+		w,h = (int(x) for x in lines[0].split())
+		data = "".join(map(chr,[int(w>>8),int(w&0xFF),int(h>>8),int(h&0xFF)]+
+		                       [int(x) for line in lines[1:] for x in line.split()]))
+		self.writeBytes(data,outputFile)
+
+	@staticmethod
+	def factory(directory,subdir,fname):
+		ext = splitext(fname)[1]
+		if ext=='.lum':  return LumFile(directory,subdir,fname)
+		if ext=='.luma': return LumaFile(directory,subdir,fname)
+		if ext=='.css':  return CSSFile(directory,subdir,fname)
+		return VerbatimFile(directory,subdir,fname)
+
+class VerbatimFile(File):
+	def __init__(self,directory,subdir,fileName):
+		File.__init__(self,directory,subdir,fileName,"rb")
+	def writeContents(self,outputFile):
+		self.writeBytes(self.inputFile.read(),outputFile)
+	def writeDirEntry(self,outputFile):
+		print("  { \"%s\", \"%s\", %s_data, %s_len, Resource::Verbatim }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class CSSFile(File):
+	def __init__(self,directory,subdir,fileName):
+		File.__init__(self,directory,subdir,fileName,"r")
+	def writeContents(self,outputFile):
+		self.writeBytes(self.inputFile.read(),outputFile)
+	def writeDirEntry(self,outputFile):
+		print("  { \"%s\", \"%s\", %s_data, %s_len, Resource::CSS }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class LumFile(File):
+	def __init__(self,directory,subdir,fileName):
+		File.__init__(self,directory,subdir,fileName,"r")
+	def writeContents(self,outputFile):
+		self.convertToBytes(outputFile)
+	def writeDirEntry(self,outputFile):
+		print("  { \"%s\", \"%s\", %s_data, %s_len, Resource::Luminance }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class LumaFile(File):
+	def __init__(self,directory,subdir,fileName):
+		File.__init__(self,directory,subdir,fileName,"r")
+	def writeContents(self,outputFile):
+		self.convertToBytes(outputFile)
+	def writeDirEntry(self,outputFile):
+		print("  { \"%s\", \"%s\", %s_data, %s_len, Resource::LumAlpha }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+def main():
+	if len(sys.argv)<3:
+		sys.exit('Usage: %s directory output_file.c' % sys.argv[0])
+	directory = sys.argv[1]
+	files = []
+	for dirName, subdirList, fileList in walk(directory):
+		for fname in sorted(fileList):
+			subdir = dirName[len(directory)+1:] if dirName.startswith(directory) else dirName
+			if subdir:
+				files.append(File.factory(directory,subdir,fname))
+	outputFile = open(sys.argv[2],"w")
+	print("#include \"resourcemgr.h\"\n",file=outputFile)
+	for f in files:
+		f.writeContents(outputFile)
+	print("static Resource resourceDir[] =",file=outputFile)
+	print("{",file=outputFile)
+	for f in files:
+		f.writeDirEntry(outputFile)
+	print("};",file=outputFile)
+	print("static int resourceDir_len = %s;" % len(files), file=outputFile)
+	print("void initResources() { ResourceMgr::instance().registerResources(resourceDir,resourceDir_len); }",file=outputFile)
+
+if __name__ == '__main__':
+	main()
diff --git a/src/resize.js b/src/resize.js
deleted file mode 100644
index 304fcb6..0000000
--- a/src/resize.js
+++ /dev/null
@@ -1,97 +0,0 @@
-var cookie_namespace = 'doxygen'; 
-var sidenav,navtree,content,header;
-
-function readCookie(cookie) 
-{
-  var myCookie = cookie_namespace+"_"+cookie+"=";
-  if (document.cookie) 
-  {
-    var index = document.cookie.indexOf(myCookie);
-    if (index != -1) 
-    {
-      var valStart = index + myCookie.length;
-      var valEnd = document.cookie.indexOf(";", valStart);
-      if (valEnd == -1) 
-      {
-        valEnd = document.cookie.length;
-      }
-      var val = document.cookie.substring(valStart, valEnd);
-      return val;
-    }
-  }
-  return 0;
-}
-
-function writeCookie(cookie, val, expiration) 
-{
-  if (val==undefined) return;
-  if (expiration == null) 
-  {
-    var date = new Date();
-    date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
-    expiration = date.toGMTString();
-  }
-  document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
-}
- 
-function resizeWidth() 
-{
-  var windowWidth = $(window).width() + "px";
-  var sidenavWidth = $(sidenav).outerWidth();
-  content.css({marginLeft:parseInt(sidenavWidth)+"px"}); 
-  writeCookie('width',sidenavWidth, null);
-}
-
-function restoreWidth(navWidth)
-{
-  var windowWidth = $(window).width() + "px";
-  content.css({marginLeft:parseInt(navWidth)+6+"px"});
-  sidenav.css({width:navWidth + "px"});
-}
-
-function resizeHeight() 
-{
-  var headerHeight = header.outerHeight();
-  var footerHeight = footer.outerHeight();
-  var windowHeight = $(window).height() - headerHeight - footerHeight;
-  content.css({height:windowHeight + "px"});
-  navtree.css({height:windowHeight + "px"});
-  sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
-}
-
-function initResizable()
-{
-  header  = $("#top");
-  sidenav = $("#side-nav");
-  content = $("#doc-content");
-  navtree = $("#nav-tree");
-  footer  = $("#nav-path");
-  $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
-  $(window).resize(function() { resizeHeight(); });
-  var width = readCookie('width');
-  if (width) { restoreWidth(width); } else { resizeWidth(); }
-  resizeHeight();
-  var url = location.href;
-  var i=url.indexOf("#");
-  if (i>=0) window.location.hash=url.substr(i);
-  var _preventDefault = function(evt) { evt.preventDefault(); };
-  $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
-  $(document).bind('touchmove',function(e){
-    var device = navigator.userAgent.toLowerCase();
-    var ios = device.match(/(iphone|ipod|ipad)/);
-    if (ios) {
-      try {
-        var target = e.target;
-        while (target) {
-          if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
-          target = target.parentNode;
-        }
-        e.preventDefault();
-      } catch(err) {
-        e.preventDefault();
-      }
-    }
-  });
-}
-
-
diff --git a/src/resize_js.h b/src/resize_js.h
deleted file mode 100644
index 160b16c..0000000
--- a/src/resize_js.h
+++ /dev/null
@@ -1,93 +0,0 @@
-"var cookie_namespace = 'doxygen'; \n"
-"var sidenav,navtree,content,header;\n"
-"\n"
-"function readCookie(cookie) \n"
-"{\n"
-"  var myCookie = cookie_namespace+\"_\"+cookie+\"=\";\n"
-"  if (document.cookie) \n"
-"  {\n"
-"    var index = document.cookie.indexOf(myCookie);\n"
-"    if (index != -1) \n"
-"    {\n"
-"      var valStart = index + myCookie.length;\n"
-"      var valEnd = document.cookie.indexOf(\";\", valStart);\n"
-"      if (valEnd == -1) \n"
-"      {\n"
-"        valEnd = document.cookie.length;\n"
-"      }\n"
-"      var val = document.cookie.substring(valStart, valEnd);\n"
-"      return val;\n"
-"    }\n"
-"  }\n"
-"  return 0;\n"
-"}\n"
-"\n"
-"function writeCookie(cookie, val, expiration) \n"
-"{\n"
-"  if (val==undefined) return;\n"
-"  if (expiration == null) \n"
-"  {\n"
-"    var date = new Date();\n"
-"    date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week\n"
-"    expiration = date.toGMTString();\n"
-"  }\n"
-"  document.cookie = cookie_namespace + \"_\" + cookie + \"=\" + val + \"; expires=\" + expiration+\"; path=/\";\n"
-"}\n"
-" \n"
-"function resizeWidth() \n"
-"{\n"
-"  var windowWidth = $(window).width() + \"px\";\n"
-"  var sidenavWidth = $(sidenav).outerWidth();\n"
-"  content.css({marginLeft:parseInt(sidenavWidth)+\"px\"}); \n"
-"  writeCookie('width',sidenavWidth, null);\n"
-"}\n"
-"\n"
-"function restoreWidth(navWidth)\n"
-"{\n"
-"  var windowWidth = $(window).width() + \"px\";\n"
-"  content.css({marginLeft:parseInt(navWidth)+6+\"px\"});\n"
-"  sidenav.css({width:navWidth + \"px\"});\n"
-"}\n"
-"\n"
-"function resizeHeight() \n"
-"{\n"
-"  var headerHeight = header.outerHeight();\n"
-"  var footerHeight = footer.outerHeight();\n"
-"  var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
-"  content.css({height:windowHeight + \"px\"});\n"
-"  navtree.css({height:windowHeight + \"px\"});\n"
-"  sidenav.css({height:windowHeight + \"px\",top: headerHeight+\"px\"});\n"
-"}\n"
-"\n"
-"function initResizable()\n"
-"{\n"
-"  header  = $(\"#top\");\n"
-"  sidenav = $(\"#side-nav\");\n"
-"  content = $(\"#doc-content\");\n"
-"  navtree = $(\"#nav-tree\");\n"
-"  footer  = $(\"#nav-path\");\n"
-"  $(\".side-nav-resizable\").resizable({resize: function(e, ui) { resizeWidth(); } });\n"
-"  $(window).resize(function() { resizeHeight(); });\n"
-"  var width = readCookie('width');\n"
-"  if (width) { restoreWidth(width); } else { resizeWidth(); }\n"
-"  resizeHeight();\n"
-"  var url = location.href;\n"
-"  var i=url.indexOf(\"#\");\n"
-"  if (i>=0) window.location.hash=url.substr(i);\n"
-"  var _preventDefault = function(evt) { evt.preventDefault(); };\n"
-"  $(\"#splitbar\").bind(\"dragstart\", _preventDefault).bind(\"selectstart\", _preventDefault);\n"
-"  $(document).bind('touchmove',function(e){\n"
-"    try {\n"
-"      var target = e.target;\n"
-"      while (target) {\n"
-"        if ($(target).css('-webkit-overflow-scrolling')=='touch') return;\n"
-"        target = target.parentNode;\n"
-"      }\n"
-"      e.preventDefault();\n"
-"    } catch(err) {\n"
-"      e.preventDefault();\n"
-"    }\n"
-"  });\n"
-"}\n"
-"\n"
-"\n"
diff --git a/src/resourcemgr.cpp b/src/resourcemgr.cpp
new file mode 100644
index 0000000..a15a702
--- /dev/null
+++ b/src/resourcemgr.cpp
@@ -0,0 +1,183 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2014 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+#include <qdict.h>
+#include <qfile.h>
+#include <qcstring.h>
+#include <qglobal.h>
+#include <string.h>
+
+#include "resourcemgr.h"
+#include "util.h"
+#include "version.h"
+#include "ftextstream.h"
+#include "message.h"
+#include "config.h"
+
+class ResourceMgr::Private
+{
+  public:
+    Private() : resources(257) {}
+    QDict<Resource> resources;
+};
+
+ResourceMgr &ResourceMgr::instance()
+{
+  static ResourceMgr theInstance;
+  return theInstance;
+}
+
+ResourceMgr::ResourceMgr()
+{
+  p = new Private;
+}
+
+ResourceMgr::~ResourceMgr()
+{
+  delete p;
+}
+
+void ResourceMgr::registerResources(const Resource resources[],int numResources)
+{
+  for (int i=0;i<numResources;i++)
+  {
+    p->resources.insert(resources[i].name,&resources[i]);
+  }
+}
+
+bool ResourceMgr::copyCategory(const char *categoryName,const char *targetDir) const
+{
+  QDictIterator<Resource> it(p->resources);
+  const Resource *res;
+  for (it.toFirst();(res=it.current());++it)
+  {
+    if (qstrcmp(res->category,categoryName)==0)
+    {
+      if (!copyResource(res->name,targetDir))
+      {
+        return FALSE;
+      }
+    }
+  }
+  return TRUE;
+}
+
+bool ResourceMgr::copyResourceAs(const char *name,const char *targetDir,const char *targetName) const
+{
+  QCString pathName = QCString(targetDir)+"/"+targetName;
+  const Resource *res = get(name);
+  if (res)
+  {
+    switch (res->type)
+    {
+      case Resource::Verbatim:
+        {
+          QFile f(pathName);
+          if (f.open(IO_WriteOnly) && f.writeBlock((const char *)res->data,res->size)==res->size)
+          {
+            return TRUE;
+          }
+        }
+        break;
+      case Resource::Luminance:
+        {
+          QCString n = name;
+          n = n.left(n.length()-4)+".png"; // replace .lum by .png
+          uchar *p = (uchar*)res->data;
+          int width   = (p[0]<<8)+p[1];
+          int height  = (p[2]<<8)+p[3];
+          ColoredImgDataItem images[2];
+          images[0].name    = n;
+          images[0].width   = width;
+          images[0].height  = height;
+          images[0].content = &p[4];
+          images[0].alpha   = 0;
+          images[1].name    = 0; // terminator
+          writeColoredImgData(targetDir,images);
+          return TRUE;
+        }
+        break;
+      case Resource::LumAlpha:
+        {
+          QCString n = name;
+          n = n.left(n.length()-5)+".png"; // replace .luma by .png
+          uchar *p = (uchar*)res->data;
+          int width   = (p[0]<<8)+p[1];
+          int height  = (p[2]<<8)+p[3];
+          ColoredImgDataItem images[2];
+          images[0].name    = n;
+          images[0].width   = width;
+          images[0].height  = height;
+          images[0].content = &p[4];
+          images[0].alpha   = &p[4+width*height];
+          images[1].name    = 0; // terminator
+          writeColoredImgData(targetDir,images);
+          return TRUE;
+        }
+        break;
+      case Resource::CSS:
+        {
+          QFile f(pathName);
+          if (f.open(IO_WriteOnly))
+          {
+            QCString buf(res->size+1);
+            memcpy(buf.data(),res->data,res->size);
+            FTextStream t(&f);
+            buf = replaceColorMarkers(buf);
+            if (qstrcmp(name,"navtree.css")==0)
+            {
+              t << substitute(buf,"$width",QCString().setNum(Config_getInt("TREEVIEW_WIDTH"))+"px");
+            }
+            else
+            {
+              t << substitute(buf,"$doxygenversion",versionString);
+            }
+            return TRUE;
+          }
+        }
+        break;
+    }
+  }
+  else
+  {
+    err("requested resource '%s' not compiled in!\n",name);
+  }
+  return FALSE;
+}
+
+bool ResourceMgr::copyResource(const char *name,const char *targetDir) const
+{
+  return copyResourceAs(name,targetDir,name);
+}
+
+const Resource *ResourceMgr::get(const char *name) const
+{
+  return p->resources.find(name);
+}
+
+QCString ResourceMgr::getAsString(const char *name) const
+{
+  const Resource *res = get(name);
+  if (res)
+  {
+    QCString result(res->size+1);
+    memcpy(result.data(),res->data,res->size);
+    return result;
+  }
+  else
+  {
+    return QCString();
+  }
+}
+
diff --git a/src/resourcemgr.h b/src/resourcemgr.h
new file mode 100644
index 0000000..6347e70
--- /dev/null
+++ b/src/resourcemgr.h
@@ -0,0 +1,63 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2014 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+#ifndef RESOURCEMGR_H
+#define RESOURCEMGR_H
+
+#include <qcstring.h>
+
+/** @brief Compiled resource */
+struct Resource
+{
+  enum Type { Verbatim, Luminance, LumAlpha, CSS };
+  const char *category;
+  const char *name;
+  const unsigned char *data;
+  int size;
+  Type type;
+};
+
+/** @brief Singleton for managing resources compiled into an executable */
+class ResourceMgr
+{
+  public:
+    /** Returns the one and only instance of this class */
+    static ResourceMgr &instance();
+
+    /** Registers an array of resources */
+    void registerResources(const Resource resources[],int numResources);
+
+    /** Copies all resource belonging to a given category to a given target directory */
+    bool copyCategory(const char *categoryName,const char *targetDir) const;
+
+    /** Copies a registered resource to a given target directory */
+    bool copyResource(const char *name,const char *targetDir) const;
+
+    /** Copies a registered resource to a given target directory under a given target name */
+    bool copyResourceAs(const char *name,const char *targetDir,const char *targetName) const;
+
+    /** Returns a pointer to the resource object with the given name. */
+    const Resource *get(const char *name) const;
+
+    /** Gets the resource data as a C string */
+    QCString getAsString(const char *name) const;
+
+  private:
+    ResourceMgr();
+   ~ResourceMgr();
+    class Private;
+    Private *p;
+};
+
+#endif
diff --git a/src/search.css b/src/search.css
deleted file mode 100644
index a77ab21..0000000
--- a/src/search.css
+++ /dev/null
@@ -1,271 +0,0 @@
-/*---------------- Search Box */
-
-#FSearchBox {
-    float: left;
-}
-
-#MSearchBox {
-    white-space : nowrap;
-    position: absolute;
-    float: none;
-    display: inline;
-    margin-top: 8px;
-    right: 0px;
-    width: 170px;
-    z-index: 102;
-    background-color: white;
-}
-
-#MSearchBox .left
-{
-    display:block;
-    position:absolute;
-    left:10px;
-    width:20px;
-    height:19px;
-    background:url('search_l.png') no-repeat;
-    background-position:right;
-}
-
-#MSearchSelect {
-    display:block;
-    position:absolute;
-    width:20px;
-    height:19px;
-}
-
-.left #MSearchSelect {
-    left:4px;
-}
-
-.right #MSearchSelect {
-    right:5px;
-}
-
-#MSearchField {
-    display:block;
-    position:absolute;
-    height:19px;
-    background:url('search_m.png') repeat-x;
-    border:none;
-    width:111px;
-    margin-left:20px;
-    padding-left:4px;
-    color: #909090;
-    outline: none;
-    font: 9pt Arial, Verdana, sans-serif;
-}
-
-#FSearchBox #MSearchField {
-    margin-left:15px;
-}
-
-#MSearchBox .right {
-    display:block;
-    position:absolute;
-    right:10px;
-    top:0px;
-    width:20px;
-    height:19px;
-    background:url('search_r.png') no-repeat;
-    background-position:left;
-}
-
-#MSearchClose {
-    display: none;
-    position: absolute;
-    top: 4px;
-    background : none;
-    border: none;
-    margin: 0px 4px 0px 0px;
-    padding: 0px 0px;
-    outline: none;
-}
-
-.left #MSearchClose {
-    left: 6px;
-}
-
-.right #MSearchClose {
-    right: 2px;
-}
-
-.MSearchBoxActive #MSearchField {
-    color: #000000;
-}
-
-/*---------------- Search filter selection */
-
-#MSearchSelectWindow {
-    display: none;
-    position: absolute;
-    left: 0; top: 0;
-    border: 1px solid ##A0;
-    background-color: ##FA;
-    z-index: 1;
-    padding-top: 4px;
-    padding-bottom: 4px;
-    -moz-border-radius: 4px;
-    -webkit-border-top-left-radius: 4px;
-    -webkit-border-top-right-radius: 4px;
-    -webkit-border-bottom-left-radius: 4px;
-    -webkit-border-bottom-right-radius: 4px;
-    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-.SelectItem {
-    font: 8pt Arial, Verdana, sans-serif;
-    padding-left:  2px;
-    padding-right: 12px;
-    border: 0px;
-}
-
-span.SelectionMark {
-    margin-right: 4px;
-    font-family: monospace;
-    outline-style: none;
-    text-decoration: none;
-}
-
-a.SelectItem {
-    display: block;
-    outline-style: none;
-    color: #000000; 
-    text-decoration: none;
-    padding-left:   6px;
-    padding-right: 12px;
-}
-
-a.SelectItem:focus,
-a.SelectItem:active {
-    color: #000000; 
-    outline-style: none;
-    text-decoration: none;
-}
-
-a.SelectItem:hover {
-    color: #FFFFFF;
-    background-color: ##50;
-    outline-style: none;
-    text-decoration: none;
-    cursor: pointer;
-    display: block;
-}
-
-/*---------------- Search results window */
-
-iframe#MSearchResults {
-    width: 60ex;
-    height: 15em;
-}
-
-#MSearchResultsWindow {
-    display: none;
-    position: absolute;
-    left: 0; top: 0;
-    border: 1px solid #000;
-    background-color: ##F0;
-}
-
-/* ----------------------------------- */
-
-
-#SRIndex {
-    clear:both; 
-    padding-bottom: 15px;
-}
-
-.SREntry {
-    font-size: 10pt;
-    padding-left: 1ex;
-}
-
-.SRPage .SREntry {
-    font-size: 8pt;
-    padding: 1px 5px;
-}
-
-body.SRPage {
-    margin: 5px 2px;
-}
-
-.SRChildren {
-    padding-left: 3ex; padding-bottom: .5em 
-}
-
-.SRPage .SRChildren {
-    display: none;
-}
-
-.SRSymbol {
-    font-weight: bold; 
-    color: ##58;
-    font-family: Arial, Verdana, sans-serif;
-    text-decoration: none;
-    outline: none;
-}
-
-a.SRScope {
-    display: block;
-    color: ##58; 
-    font-family: Arial, Verdana, sans-serif;
-    text-decoration: none;
-    outline: none;
-}
-
-a.SRSymbol:focus, a.SRSymbol:active,
-a.SRScope:focus, a.SRScope:active {
-    text-decoration: underline;
-}
-
-span.SRScope {
-    padding-left: 4px;
-}
-
-.SRPage .SRStatus {
-    padding: 2px 5px;
-    font-size: 8pt;
-    font-style: italic;
-}
-
-.SRResult {
-    display: none;
-}
-
-DIV.searchresults {
-    margin-left: 10px;
-    margin-right: 10px;
-}
-
-/*---------------- External search page results */
-
-.searchresult {
-    background-color: ##F2;
-}
-
-.pages b {
-   color: white;
-   padding: 5px 5px 3px 5px;
-   background-image: url("../tab_a.png");
-   background-repeat: repeat-x;
-   text-shadow: 0 1px 1px #000000;
-}
-
-.pages {
-    line-height: 17px;
-    margin-left: 4px;
-    text-decoration: none;
-}
-
-.hl {
-    font-weight: bold;
-}
-
-#searchresults {
-    margin-bottom: 20px;
-}
-
-.searchpages {
-    margin-top: 10px;
-}
-
diff --git a/src/search.js b/src/search.js
deleted file mode 100644
index 10cee88..0000000
--- a/src/search.js
+++ /dev/null
@@ -1,776 +0,0 @@
-function convertToId(search)
-{
-  var result = '';
-  for (i=0;i<search.length;i++)
-  {
-    var c = search.charAt(i);
-    var cn = c.charCodeAt(0);
-    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
-    {
-      result+=c;
-    }
-    else if (cn<16) 
-    {
-      result+="_0"+cn.toString(16);
-    }
-    else 
-    {
-      result+="_"+cn.toString(16);
-    }
-  }
-  return result;
-}
-
-function getXPos(item)
-{
-  var x = 0;
-  if (item.offsetWidth)
-  {
-    while (item && item!=document.body)
-    {
-      x   += item.offsetLeft;
-      item = item.offsetParent;
-    }
-  }
-  return x;
-}
-
-function getYPos(item)
-{
-  var y = 0;
-  if (item.offsetWidth)
-  {
-     while (item && item!=document.body)
-     {
-       y   += item.offsetTop;
-       item = item.offsetParent;
-     }
-  }
-  return y;
-}
-
-/* A class handling everything associated with the search panel.
-
-   Parameters:
-   name - The name of the global variable that will be 
-          storing this instance.  Is needed to be able to set timeouts.
-   resultPath - path to use for external files
-*/
-function SearchBox(name, resultsPath, inFrame, label)
-{
-  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
-   
-  // ---------- Instance variables
-  this.name                  = name;
-  this.resultsPath           = resultsPath;
-  this.keyTimeout            = 0;
-  this.keyTimeoutLength      = 500;
-  this.closeSelectionTimeout = 300;
-  this.lastSearchValue       = "";
-  this.lastResultsPage       = "";
-  this.hideTimeout           = 0;
-  this.searchIndex           = 0;
-  this.searchActive          = false;
-  this.insideFrame           = inFrame;
-  this.searchLabel           = label;
-
-  // ----------- DOM Elements
-
-  this.DOMSearchField = function()
-  {  return document.getElementById("MSearchField");  }
-
-  this.DOMSearchSelect = function()
-  {  return document.getElementById("MSearchSelect");  }
-
-  this.DOMSearchSelectWindow = function()
-  {  return document.getElementById("MSearchSelectWindow");  }
-
-  this.DOMPopupSearchResults = function()
-  {  return document.getElementById("MSearchResults");  }
-
-  this.DOMPopupSearchResultsWindow = function()
-  {  return document.getElementById("MSearchResultsWindow");  }
-
-  this.DOMSearchClose = function()
-  {  return document.getElementById("MSearchClose"); }
-
-  this.DOMSearchBox = function()
-  {  return document.getElementById("MSearchBox");  }
-
-  // ------------ Event Handlers
-
-  // Called when focus is added or removed from the search field.
-  this.OnSearchFieldFocus = function(isActive)
-  {
-    this.Activate(isActive);
-  }
-
-  this.OnSearchSelectShow = function()
-  {
-    var searchSelectWindow = this.DOMSearchSelectWindow();
-    var searchField        = this.DOMSearchSelect();
-
-    if (this.insideFrame)
-    {
-      var left = getXPos(searchField);
-      var top  = getYPos(searchField);
-      left += searchField.offsetWidth + 6;
-      top += searchField.offsetHeight;
-
-      // show search selection popup
-      searchSelectWindow.style.display='block';
-      left -= searchSelectWindow.offsetWidth;
-      searchSelectWindow.style.left =  left + 'px';
-      searchSelectWindow.style.top  =  top  + 'px';
-    }
-    else
-    {
-      var left = getXPos(searchField);
-      var top  = getYPos(searchField);
-      top += searchField.offsetHeight;
-
-      // show search selection popup
-      searchSelectWindow.style.display='block';
-      searchSelectWindow.style.left =  left + 'px';
-      searchSelectWindow.style.top  =  top  + 'px';
-    }
-
-    // stop selection hide timer
-    if (this.hideTimeout) 
-    {
-      clearTimeout(this.hideTimeout);
-      this.hideTimeout=0;
-    }
-    return false; // to avoid "image drag" default event
-  }
-
-  this.OnSearchSelectHide = function()
-  {
-    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
-                                  this.closeSelectionTimeout);
-  }
-
-  // Called when the content of the search field is changed.
-  this.OnSearchFieldChange = function(evt)
-  {
-    if (this.keyTimeout) // kill running timer
-    {
-      clearTimeout(this.keyTimeout);
-      this.keyTimeout = 0;
-    }
-
-    var e  = (evt) ? evt : window.event; // for IE
-    if (e.keyCode==40 || e.keyCode==13)
-    {
-      if (e.shiftKey==1)
-      {
-        this.OnSearchSelectShow();
-        var win=this.DOMSearchSelectWindow(); 
-        for (i=0;i<win.childNodes.length;i++)
-        {
-          var child = win.childNodes[i]; // get span within a
-          if (child.className=='SelectItem')
-          {
-            child.focus();
-            return;
-          }
-        }
-        return;
-      }
-      else if (window.frames.MSearchResults.searchResults)
-      {
-        var elem = window.frames.MSearchResults.searchResults.NavNext(0);
-        if (elem) elem.focus();
-      }
-    }
-    else if (e.keyCode==27) // Escape out of the search field
-    {
-      this.DOMSearchField().blur();
-      this.DOMPopupSearchResultsWindow().style.display = 'none';
-      this.DOMSearchClose().style.display = 'none';
-      this.lastSearchValue = '';
-      this.Activate(false);
-      return;
-    }
-
-    // strip whitespaces
-    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
-
-    if (searchValue != this.lastSearchValue) // search value has changed
-    {
-      if (searchValue != "") // non-empty search
-      {
-        // set timer for search update
-        this.keyTimeout = setTimeout(this.name + '.Search()',
-                                     this.keyTimeoutLength);
-      }
-      else // empty search field
-      {
-        this.DOMPopupSearchResultsWindow().style.display = 'none';
-        this.DOMSearchClose().style.display = 'none';
-        this.lastSearchValue = '';
-      }
-    }
-  }
-
-  this.SelectItemCount = function(id)
-  {
-    var count=0;
-    var win=this.DOMSearchSelectWindow(); 
-    for (i=0;i<win.childNodes.length;i++)
-    {
-      var child = win.childNodes[i]; // get span within a
-      if (child.className=='SelectItem')
-      {
-        count++;
-      }
-    }
-    return count;
-  }
-
-  this.SelectItemSet = function(id)
-  {
-    var i,j=0;
-    var win=this.DOMSearchSelectWindow(); 
-    for (i=0;i<win.childNodes.length;i++)
-    {
-      var child = win.childNodes[i]; // get span within a
-      if (child.className=='SelectItem')
-      {
-        var node = child.firstChild;
-        if (j==id)
-        {
-          node.innerHTML='&#8226;';
-        }
-        else
-        {
-          node.innerHTML='&#160;';
-        }
-        j++;
-      }
-    }
-  }
-
-  // Called when an search filter selection is made.
-  // set item with index id as the active item
-  this.OnSelectItem = function(id)
-  {
-    this.searchIndex = id;
-    this.SelectItemSet(id);
-    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
-    if (searchValue!="" && this.searchActive) // something was found -> do a search
-    {
-      this.Search();
-    }
-  }
-
-  this.OnSearchSelectKey = function(evt)
-  {
-    var e = (evt) ? evt : window.event; // for IE
-    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
-    {
-      this.searchIndex++;
-      this.OnSelectItem(this.searchIndex);
-    }
-    else if (e.keyCode==38 && this.searchIndex>0) // Up
-    {
-      this.searchIndex--;
-      this.OnSelectItem(this.searchIndex);
-    }
-    else if (e.keyCode==13 || e.keyCode==27)
-    {
-      this.OnSelectItem(this.searchIndex);
-      this.CloseSelectionWindow();
-      this.DOMSearchField().focus();
-    }
-    return false;
-  }
-
-  // --------- Actions
-
-  // Closes the results window.
-  this.CloseResultsWindow = function()
-  {
-    this.DOMPopupSearchResultsWindow().style.display = 'none';
-    this.DOMSearchClose().style.display = 'none';
-    this.Activate(false);
-  }
-
-  this.CloseSelectionWindow = function()
-  {
-    this.DOMSearchSelectWindow().style.display = 'none';
-  }
-
-  // Performs a search.
-  this.Search = function()
-  {
-    this.keyTimeout = 0;
-
-    // strip leading whitespace
-    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
-
-    var code = searchValue.toLowerCase().charCodeAt(0);
-    var idxChar = searchValue.substr(0, 1).toLowerCase();
-    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
-    {
-      idxChar = searchValue.substr(0, 2);
-    }
-
-    var resultsPage;
-    var resultsPageWithSearch;
-    var hasResultsPage;
-
-    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
-    if (idx!=-1)
-    {
-       var hexCode=idx.toString(16);
-       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
-       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
-       hasResultsPage = true;
-    }
-    else // nothing available for this search term
-    {
-       resultsPage = this.resultsPath + '/nomatches.html';
-       resultsPageWithSearch = resultsPage;
-       hasResultsPage = false;
-    }
-
-    window.frames.MSearchResults.location = resultsPageWithSearch;  
-    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
-
-    if (domPopupSearchResultsWindow.style.display!='block')
-    {
-       var domSearchBox = this.DOMSearchBox();
-       this.DOMSearchClose().style.display = 'inline';
-       if (this.insideFrame)
-       {
-         var domPopupSearchResults = this.DOMPopupSearchResults();
-         domPopupSearchResultsWindow.style.position = 'relative';
-         domPopupSearchResultsWindow.style.display  = 'block';
-         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
-         domPopupSearchResultsWindow.style.width    = width + 'px';
-         domPopupSearchResults.style.width          = width + 'px';
-       }
-       else
-       {
-         var domPopupSearchResults = this.DOMPopupSearchResults();
-         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
-         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
-         domPopupSearchResultsWindow.style.display = 'block';
-         left -= domPopupSearchResults.offsetWidth;
-         domPopupSearchResultsWindow.style.top     = top  + 'px';
-         domPopupSearchResultsWindow.style.left    = left + 'px';
-       }
-    }
-
-    this.lastSearchValue = searchValue;
-    this.lastResultsPage = resultsPage;
-  }
-
-  // -------- Activation Functions
-
-  // Activates or deactivates the search panel, resetting things to 
-  // their default values if necessary. 
-  this.Activate = function(isActive)
-  {
-    if (isActive || // open it
-        this.DOMPopupSearchResultsWindow().style.display == 'block' 
-       )
-    {
-      this.DOMSearchBox().className = 'MSearchBoxActive';
-
-      var searchField = this.DOMSearchField();
-
-      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
-      {  
-        searchField.value = '';  
-        this.searchActive = true;
-      }
-    }
-    else if (!isActive) // directly remove the panel
-    {
-      this.DOMSearchBox().className = 'MSearchBoxInactive';
-      this.DOMSearchField().value   = this.searchLabel;
-      this.searchActive             = false;
-      this.lastSearchValue          = ''
-      this.lastResultsPage          = '';
-    }
-  }
-}
-
-// -----------------------------------------------------------------------
-
-// The class that handles everything on the search results page.
-function SearchResults(name)
-{
-    // The number of matches from the last run of <Search()>.
-    this.lastMatchCount = 0;
-    this.lastKey = 0;
-    this.repeatOn = false;
-
-    // Toggles the visibility of the passed element ID.
-    this.FindChildElement = function(id)
-    {
-      var parentElement = document.getElementById(id);
-      var element = parentElement.firstChild;
-
-      while (element && element!=parentElement)
-      {
-        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
-        {
-          return element;
-        }
-
-        if (element.nodeName == 'DIV' && element.hasChildNodes())
-        {  
-           element = element.firstChild;  
-        }
-        else if (element.nextSibling)
-        {  
-           element = element.nextSibling;  
-        }
-        else
-        {
-          do
-          {
-            element = element.parentNode;
-          }
-          while (element && element!=parentElement && !element.nextSibling);
-
-          if (element && element!=parentElement)
-          {  
-            element = element.nextSibling;  
-          }
-        }
-      }
-    }
-
-    this.Toggle = function(id)
-    {
-      var element = this.FindChildElement(id);
-      if (element)
-      {
-        if (element.style.display == 'block')
-        {
-          element.style.display = 'none';
-        }
-        else
-        {
-          element.style.display = 'block';
-        }
-      }
-    }
-
-    // Searches for the passed string.  If there is no parameter,
-    // it takes it from the URL query.
-    //
-    // Always returns true, since other documents may try to call it
-    // and that may or may not be possible.
-    this.Search = function(search)
-    {
-      if (!search) // get search word from URL
-      {
-        search = window.location.search;
-        search = search.substring(1);  // Remove the leading '?'
-        search = unescape(search);
-      }
-
-      search = search.replace(/^ +/, ""); // strip leading spaces
-      search = search.replace(/ +$/, ""); // strip trailing spaces
-      search = search.toLowerCase();
-      search = convertToId(search);
-
-      var resultRows = document.getElementsByTagName("div");
-      var matches = 0;
-
-      var i = 0;
-      while (i < resultRows.length)
-      {
-        var row = resultRows.item(i);
-        if (row.className == "SRResult")
-        {
-          var rowMatchName = row.id.toLowerCase();
-          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
-
-          if (search.length<=rowMatchName.length && 
-             rowMatchName.substr(0, search.length)==search)
-          {
-            row.style.display = 'block';
-            matches++;
-          }
-          else
-          {
-            row.style.display = 'none';
-          }
-        }
-        i++;
-      }
-      document.getElementById("Searching").style.display='none';
-      if (matches == 0) // no results
-      {
-        document.getElementById("NoMatches").style.display='block';
-      }
-      else // at least one result
-      {
-        document.getElementById("NoMatches").style.display='none';
-      }
-      this.lastMatchCount = matches;
-      return true;
-    }
-
-    // return the first item with index index or higher that is visible
-    this.NavNext = function(index)
-    {
-      var focusItem;
-      while (1)
-      {
-        var focusName = 'Item'+index;
-        focusItem = document.getElementById(focusName);
-        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
-        {
-          break;
-        }
-        else if (!focusItem) // last element
-        {
-          break;
-        }
-        focusItem=null;
-        index++;
-      }
-      return focusItem;
-    }
-
-    this.NavPrev = function(index)
-    {
-      var focusItem;
-      while (1)
-      {
-        var focusName = 'Item'+index;
-        focusItem = document.getElementById(focusName);
-        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
-        {
-          break;
-        }
-        else if (!focusItem) // last element
-        {
-          break;
-        }
-        focusItem=null;
-        index--;
-      }
-      return focusItem;
-    }
-
-    this.ProcessKeys = function(e)
-    {
-      if (e.type == "keydown") 
-      {
-        this.repeatOn = false;
-        this.lastKey = e.keyCode;
-      }
-      else if (e.type == "keypress")
-      {
-        if (!this.repeatOn)
-        {
-          if (this.lastKey) this.repeatOn = true;
-          return false; // ignore first keypress after keydown
-        }
-      }
-      else if (e.type == "keyup")
-      {
-        this.lastKey = 0;
-        this.repeatOn = false;
-      }
-      return this.lastKey!=0;
-    }
-
-    this.Nav = function(evt,itemIndex) 
-    {
-      var e  = (evt) ? evt : window.event; // for IE
-      if (e.keyCode==13) return true;
-      if (!this.ProcessKeys(e)) return false;
-
-      if (this.lastKey==38) // Up
-      {
-        var newIndex = itemIndex-1;
-        var focusItem = this.NavPrev(newIndex);
-        if (focusItem)
-        {
-          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
-          if (child && child.style.display == 'block') // children visible
-          { 
-            var n=0;
-            var tmpElem;
-            while (1) // search for last child
-            {
-              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
-              if (tmpElem)
-              {
-                focusItem = tmpElem;
-              }
-              else // found it!
-              {
-                break;
-              }
-              n++;
-            }
-          }
-        }
-        if (focusItem)
-        {
-          focusItem.focus();
-        }
-        else // return focus to search field
-        {
-           parent.document.getElementById("MSearchField").focus();
-        }
-      }
-      else if (this.lastKey==40) // Down
-      {
-        var newIndex = itemIndex+1;
-        var focusItem;
-        var item = document.getElementById('Item'+itemIndex);
-        var elem = this.FindChildElement(item.parentNode.parentNode.id);
-        if (elem && elem.style.display == 'block') // children visible
-        {
-          focusItem = document.getElementById('Item'+itemIndex+'_c0');
-        }
-        if (!focusItem) focusItem = this.NavNext(newIndex);
-        if (focusItem)  focusItem.focus();
-      }
-      else if (this.lastKey==39) // Right
-      {
-        var item = document.getElementById('Item'+itemIndex);
-        var elem = this.FindChildElement(item.parentNode.parentNode.id);
-        if (elem) elem.style.display = 'block';
-      }
-      else if (this.lastKey==37) // Left
-      {
-        var item = document.getElementById('Item'+itemIndex);
-        var elem = this.FindChildElement(item.parentNode.parentNode.id);
-        if (elem) elem.style.display = 'none';
-      }
-      else if (this.lastKey==27) // Escape
-      {
-        parent.searchBox.CloseResultsWindow();
-        parent.document.getElementById("MSearchField").focus();
-      }
-      else if (this.lastKey==13) // Enter
-      {
-        return true;
-      }
-      return false;
-    }
-
-    this.NavChild = function(evt,itemIndex,childIndex)
-    {
-      var e  = (evt) ? evt : window.event; // for IE
-      if (e.keyCode==13) return true;
-      if (!this.ProcessKeys(e)) return false;
-
-      if (this.lastKey==38) // Up
-      {
-        if (childIndex>0)
-        {
-          var newIndex = childIndex-1;
-          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
-        }
-        else // already at first child, jump to parent
-        {
-          document.getElementById('Item'+itemIndex).focus();
-        }
-      }
-      else if (this.lastKey==40) // Down
-      {
-        var newIndex = childIndex+1;
-        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
-        if (!elem) // last child, jump to parent next parent
-        {
-          elem = this.NavNext(itemIndex+1);
-        }
-        if (elem)
-        {
-          elem.focus();
-        } 
-      }
-      else if (this.lastKey==27) // Escape
-      {
-        parent.searchBox.CloseResultsWindow();
-        parent.document.getElementById("MSearchField").focus();
-      }
-      else if (this.lastKey==13) // Enter
-      {
-        return true;
-      }
-      return false;
-    }
-}
-
-function setKeyActions(elem,action)
-{
-  elem.setAttribute('onkeydown',action);
-  elem.setAttribute('onkeypress',action);
-  elem.setAttribute('onkeyup',action);
-}
-
-function setClassAttr(elem,attr)
-{
-  elem.setAttribute('class',attr);
-  elem.setAttribute('className',attr);
-}
-
-function createResults()
-{
-  var results = document.getElementById("SRResults");
-  for (var e=0; e<searchData.length; e++)
-  {
-    var id = searchData[e][0];
-    var srResult = document.createElement('div');
-    srResult.setAttribute('id','SR_'+id);
-    setClassAttr(srResult,'SRResult');
-    var srEntry = document.createElement('div');
-    setClassAttr(srEntry,'SREntry');
-    var srLink = document.createElement('a');
-    srLink.setAttribute('id','Item'+e);
-    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
-    setClassAttr(srLink,'SRSymbol');
-    srLink.innerHTML = searchData[e][1][0];
-    srEntry.appendChild(srLink);
-    if (searchData[e][1].length==2) // single result
-    {
-      srLink.setAttribute('href',searchData[e][1][1][0]);
-      if (searchData[e][1][1][1])
-      {
-       srLink.setAttribute('target','_parent');
-      }
-      var srScope = document.createElement('span');
-      setClassAttr(srScope,'SRScope');
-      srScope.innerHTML = searchData[e][1][1][2];
-      srEntry.appendChild(srScope);
-    }
-    else // multiple results
-    {
-      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
-      var srChildren = document.createElement('div');
-      setClassAttr(srChildren,'SRChildren');
-      for (var c=0; c<searchData[e][1].length-1; c++)
-      {
-        var srChild = document.createElement('a');
-        srChild.setAttribute('id','Item'+e+'_c'+c);
-        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
-        setClassAttr(srChild,'SRScope');
-        srChild.setAttribute('href',searchData[e][1][c+1][0]);
-        if (searchData[e][1][c+1][1])
-        {
-         srChild.setAttribute('target','_parent');
-        }
-        srChild.innerHTML = searchData[e][1][c+1][2];
-        srChildren.appendChild(srChild);
-      }
-      srEntry.appendChild(srChildren);
-    }
-    srResult.appendChild(srEntry);
-    results.appendChild(srResult);
-  }
-}
-
diff --git a/src/search_functions.php b/src/search_functions.php
deleted file mode 100644
index 5ad2e5d..0000000
--- a/src/search_functions.php
+++ /dev/null
@@ -1,366 +0,0 @@
-<script language="PHP">
-require_once "search-config.php";
-
-function end_form($value)
-{
-  global $config;
-  global $translator;
-  if ($config['DISABLE_INDEX'] == false)
-  {
-  echo "            <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"$value\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n            </form>\n          </div><div class=\"right\"></div>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div>\n";
-  }
-  if ($config['GENERATE_TREEVIEW'])
-  {
-    echo $translator['split_bar'];
-  }
-}
-
-function end_page()
-{
-  echo "</body></html>";
-}
-
-function search_results()
-{
-  global $translator;
-  return $translator['search_results_title'];
-}
-
-function matches_text($num)
-{
-  global $translator;
-  $string = $translator['search_results'][($num>2)?2:$num];
-  // The eval is used so that translator strings can contain $num.
-  eval("\$result = \"$string\";");
-  return $result;
-}
-
-function report_matches()
-{
-  global $translator;
-  return $translator['search_matches'];
-}
-
-function readInt($file)
-{
-  $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));
-  $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file));
-  return ($b1<<24)|($b2<<16)|($b3<<8)|$b4;
-}
-
-function readString($file)
-{
-  $result="";
-  while (ord($c=fgetc($file))) $result.=$c;
-  return $result;
-}
-
-function readHeader($file)
-{
-  $header =fgetc($file); $header.=fgetc($file);
-  $header.=fgetc($file); $header.=fgetc($file);
-  return $header;
-}
-
-function computeIndex($word)
-{
-  // Simple hashing that allows for substring search
-  if (strlen($word)<2) return -1;
-  // high char of the index
-  $hi = ord($word{0});
-  if ($hi==0) return -1;
-  // low char of the index
-  $lo = ord($word{1});
-  if ($lo==0) return -1;
-  // return index
-  return $hi*256+$lo;
-}
-
-function search($file,$word,&$statsList)
-{
-  $index = computeIndex($word);
-  if ($index!=-1) // found a valid index
-  {
-    fseek($file,$index*4+4); // 4 bytes per entry, skip header
-    $index = readInt($file);
-    if ($index) // found words matching the hash key
-    {
-      $start=sizeof($statsList);
-      $count=$start;
-      fseek($file,$index);
-      $w = readString($file);
-      while ($w)
-      {
-        $statIdx = readInt($file);
-        if ($word==substr($w,0,strlen($word)))
-        { // found word that matches (as substring)
-          $statsList[$count++]=array(
-              "word"=>$word,
-              "match"=>$w,
-              "index"=>$statIdx,
-              "full"=>strlen($w)==strlen($word),
-              "docs"=>array()
-              );
-        }
-        $w = readString($file);
-      }
-      $totalHi=0;
-      $totalFreqHi=0;
-      $totalFreqLo=0;
-      for ($count=$start;$count<sizeof($statsList);$count++)
-      {
-        $statInfo = &$statsList[$count];
-        $multiplier = 1;
-        // whole word matches have a double weight
-        if ($statInfo["full"]) $multiplier=2;
-        fseek($file,$statInfo["index"]); 
-        $numDocs = readInt($file);
-        $docInfo = array();
-        // read docs info + occurrence frequency of the word
-        for ($i=0;$i<$numDocs;$i++)
-        {
-          $idx=readInt($file); 
-          $freq=readInt($file); 
-          $docInfo[$i]=array("idx"  => $idx,
-                             "freq" => $freq>>1,
-                             "rank" => 0.0,
-                             "hi"   => $freq&1
-                            );
-          if ($freq&1) // word occurs in high priority doc
-          {
-            $totalHi++;
-            $totalFreqHi+=$freq*$multiplier;
-          }
-          else // word occurs in low priority doc
-          {
-            $totalFreqLo+=$freq*$multiplier;
-          }
-        }
-        // read name and url info for the doc
-        for ($i=0;$i<$numDocs;$i++)
-        {
-          fseek($file,$docInfo[$i]["idx"]);
-          $docInfo[$i]["name"]=readString($file);
-          $docInfo[$i]["url"]=readString($file);
-        }
-        $statInfo["docs"]=$docInfo;
-      }
-      $totalFreq=($totalHi+1)*$totalFreqLo + $totalFreqHi;
-      for ($count=$start;$count<sizeof($statsList);$count++)
-      {
-        $statInfo = &$statsList[$count];
-        $multiplier = 1;
-        // whole word matches have a double weight
-        if ($statInfo["full"]) $multiplier=2;
-        for ($i=0;$i<sizeof($statInfo["docs"]);$i++)
-        {
-          $docInfo = &$statInfo["docs"];
-          // compute frequency rank of the word in each doc
-          $freq=$docInfo[$i]["freq"];
-          if ($docInfo[$i]["hi"])
-          {
-            $statInfo["docs"][$i]["rank"]=
-              (float)($freq*$multiplier+$totalFreqLo)/$totalFreq;
-          }
-          else
-          {
-            $statInfo["docs"][$i]["rank"]=
-              (float)($freq*$multiplier)/$totalFreq;
-          }
-        }
-      }
-    }
-  }
-  return $statsList;
-}
-
-function combine_results($results,&$docs)
-{
-  foreach ($results as $wordInfo)
-  {
-    $docsList = &$wordInfo["docs"];
-    foreach ($docsList as $di)
-    {
-      $key=$di["url"];
-      $rank=$di["rank"];
-      if (isset($docs[$key]))
-      {
-        $docs[$key]["rank"]+=$rank;
-      }
-      else
-      {
-        $docs[$key] = array("url"=>$key,
-            "name"=>$di["name"],
-            "rank"=>$rank
-            );
-      }
-      $docs[$key]["words"][] = array(
-               "word"=>$wordInfo["word"],
-               "match"=>$wordInfo["match"],
-               "freq"=>$di["freq"]
-               );
-    }
-  }
-  return $docs;
-}
-
-function filter_results($docs,&$requiredWords,&$forbiddenWords)
-{
-  $filteredDocs=array();
-  while (list ($key, $val) = each ($docs)) 
-  {
-    $words = &$docs[$key]["words"];
-    $copy=1; // copy entry by default
-    if (sizeof($requiredWords)>0)
-    {
-      foreach ($requiredWords as $reqWord)
-      {
-        $found=0;
-        foreach ($words as $wordInfo)
-        { 
-          $found = $wordInfo["word"]==$reqWord;
-          if ($found) break;
-        }
-        if (!$found) 
-        {
-          $copy=0; // document contains none of the required words
-          break;
-        }
-      }
-    }
-    if (sizeof($forbiddenWords)>0)
-    {
-      foreach ($words as $wordInfo)
-      {
-        if (in_array($wordInfo["word"],$forbiddenWords))
-        {
-          $copy=0; // document contains a forbidden word
-          break;
-        }
-      }
-    }
-    if ($copy) $filteredDocs[$key]=$docs[$key];
-  }
-  return $filteredDocs;
-}
-
-function compare_rank($a,$b)
-{
-  if ($a["rank"] == $b["rank"]) 
-  {
-    return 0;
-  }
-  return ($a["rank"]>$b["rank"]) ? -1 : 1; 
-}
-
-function sort_results($docs,&$sorted)
-{
-  $sorted = $docs;
-  usort($sorted,"compare_rank");
-  return $sorted;
-}
-
-function report_results(&$docs)
-{
-  echo "<div class=\"header\">";
-  echo "  <div class=\"headertitle\">\n";
-  echo "    <h1>".search_results()."</h1>\n";
-  echo "  </div>\n";
-  echo "</div>\n";
-  echo "<div class=\"searchresults\">\n";
-  echo "<table cellspacing=\"2\">\n";
-  $numDocs = sizeof($docs);
-  if ($numDocs==0)
-  {
-    echo "  <tr>\n";
-    echo "    <td colspan=\"2\">".matches_text(0)."</td>\n";
-    echo "  </tr>\n";
-  }
-  else
-  {
-    echo "  <tr>\n";
-    echo "    <td colspan=\"2\">".matches_text($numDocs);
-    echo "\n";
-    echo "    </td>\n";
-    echo "  </tr>\n";
-    $num=1;
-    foreach ($docs as $doc)
-    {
-      echo "  <tr>\n";
-      echo "    <td align=\"right\">$num.</td>";
-      echo     "<td><a class=\"el\" href=\"".$doc["url"]."\">".$doc["name"]."</a></td>\n";
-      echo "  <tr>\n";
-      echo "    <td></td><td class=\"tiny\">".report_matches()." ";
-      foreach ($doc["words"] as $wordInfo)
-      {
-        $word = $wordInfo["word"];
-        $matchRight = substr($wordInfo["match"],strlen($word));
-        echo "<b>$word</b>$matchRight(".$wordInfo["freq"].") ";
-      }
-      echo "    </td>\n";
-      echo "  </tr>\n";
-      $num++;
-    }
-  }
-  echo "</table>\n";
-  echo "</div>\n";
-}
-
-function run_query($query)
-{
-  if(strcmp('4.1.0', phpversion()) > 0) 
-  {
-    die("Error: PHP version 4.1.0 or above required!");
-  }
-  if (!($file=fopen("search/search.idx","rb"))) 
-  {
-    die("Error: Search index file could NOT be opened!");
-  }
-  if (readHeader($file)!="DOXS")
-  {
-    die("Error: Header of index file is invalid!");
-  }
-  $results = array();
-  $requiredWords = array();
-  $forbiddenWords = array();
-  $foundWords = array();
-  $word=strtok($query," ");
-  while ($word) // for each word in the search query
-  {
-    if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }
-    if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; }
-    if (!in_array($word,$foundWords))
-    {
-      $foundWords[]=$word;
-      search($file,strtolower($word),$results);
-    }
-    $word=strtok(" ");
-  }
-  fclose($file);
-  $docs = array();
-  combine_results($results,$docs);
-  // filter out documents with forbidden word or that do not contain
-  // required words
-  $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords);
-  // sort the results based on rank
-  $sorted = array();
-  sort_results($filteredDocs,$sorted);
-  return $sorted;
-}
-
-function main()
-{
-  $query = "";
-  if (array_key_exists("query", $_GET))
-  {
-    $query=$_GET["query"];
-  }
-  $sorted = run_query($query);
-  // Now output the HTML stuff...
-  // End the HTML form
-  end_form(preg_replace("/[^a-zA-Z0-9\-\_\.\x80-\xFF]/i", " ", $query ));
-  // report results to the user
-  report_results($sorted);
-  end_page();
-}
-</script>
diff --git a/src/search_opensearch.php b/src/search_opensearch.php
deleted file mode 100644
index 3b59516..0000000
--- a/src/search_opensearch.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<script language="PHP">
-require "search-functions.php";
-
-$mode = array_key_exists('v', $_GET)?$_GET['v']:"";
-$query = array_key_exists('query', $_GET)?$_GET['query']:"";
-
-$query_results = run_query($query);
-
-switch ($mode)
-{
-  case "opensearch.xml":
-    opensearch_description();
-    break;
-  case "json":
-    opensearch_json_results($query, $query_results);
-    break;
-  case "xml":
-    opensearch_xml_results($query, $query_results);
-    break;
-  default:
-    invalid_format($query, $query_results);
-    break;
-}
-
-function opensearch_description()
-{
-  global $config;
-  global $translator;
-
-  $shortname = $translator['search']." ".$config['PROJECT_NAME'];
-  $link = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']);
-  header("Content-Type: application/xml");
-  echo <<<END_OPENSEARCH
-<?xml version="1.0" encoding="UTF-8"?>
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
-<ShortName>$shortname</ShortName>
-<Description>Doxygen Search</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<!--
-<Image height="16" width="16" type="image/x-icon">
-http://dev.squello.com/doc/html/favicon.ico</Image>
--->
-<Url type="text/html" method="GET"
-template="$link/search.php?query={searchTerms}" />
-<Url type="application/x-suggestions+json" method="GET"
-template="$link/search-opensearch.php?v=json&amp;query={searchTerms}" />
-<Url type="application/x-suggestions+xml" method="GET"
-template="$link/search-opensearch.php?v=xml&amp;query={searchTerms}" />
-</OpenSearchDescription>
-END_OPENSEARCH;
-}
-
-function opensearch_xml_results($query, array $results)
-{
-  // Much as I hate copy'n'paste code re-use, this is for testing;
-  // I expect a richer version to come soon.
-  // Although I hate that IE does this richer than FF more...
-  $qs_results = array();
-  foreach ($results as $i => $val)
-  {
-    foreach ($val['words'] as $j => $word)
-    {
-      if (array_key_exists($word, $qs_results))
-        $qs_results[$word['match']]++;
-      else
-        $qs_results[$word['match']] = 1;
-    }
-  }
-  $result = <<<END_FRAG
-<?xml version="1.0"?>
-<SearchSuggestion xmlns="http://schemas.microsoft.com/Search/2008/suggestions">
-<Query>$query</Query>
-<Section>
-END_FRAG;
-  foreach ($qs_results as $word => $count)
-  {
-    $result .= <<<END_FRAG
-<Item>
-<Text>$word</Text>
-<Description>$count results</Description>
-</Item>
-END_FRAG;
-  }
-  $result .= <<<END_FRAG
-</Section>
-</SearchSuggestion>
-END_FRAG;
-  echo $result;
-}
-
-function opensearch_json_results($query, array $results)
-{
-  $qs_results = array();
-  foreach ($results as $i => $val)
-  {
-    foreach ($val['words'] as $j => $word)
-    {
-      if (array_key_exists($word, $qs_results))
-        $qs_results[$word['match']]++;
-      else
-        $qs_results[$word['match']] = 1;
-    }
-  }
-  $result = '["'.$query.'", [';
-  $json_words = "";
-  $json_descriptions = "";
-  $i = 0;
-  foreach ($qs_results as $word => $count)
-  {
-    if ($i != 0)
-    {
-      $json_words .= ", ";
-      $json_descriptions .= ", ";
-    }
-    $json_words .= '"'.$word.'"';
-    $json_descriptions .= '"'.$count.' result'.($count==1?'':'s').'"';
-    $i++;
-  }
-  print "[\"$query\", [$json_words],[$json_descriptions]]";
-}
-
-function invalid_format($query, array $results)
-{
-  print "Search results for '$query':\n\n";
-  print_r($results);
-}
-</script>
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index 27674c2..da7c391 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -36,6 +36,7 @@
 #include "memberdef.h"
 #include "filename.h"
 #include "membername.h"
+#include "resourcemgr.h"
 
 // file format: (all multi-byte values are stored in big endian format)
 //   4 byte header
@@ -583,9 +584,9 @@ void SearchIndexExternal::write(const char *fileName)
 #include "doxygen.h"
 #include "message.h"
 
-static const char search_script[]=
-#include "search.js.h"
-;
+//static const char search_script[]=
+//#include "search.js.h"
+//;
 
 #define SEARCH_INDEX_ALL         0
 #define SEARCH_INDEX_CLASSES     1
@@ -1265,15 +1266,10 @@ void writeJavascriptSearchIndex()
   }
 
   {
-    QFile f(searchDirName+"/search.js");
+    QFile f(searchDirName+"/searchdata.js");
     if (f.open(IO_WriteOnly))
     {
       FTextStream t(&f);
-      t << "// Search script generated by doxygen" << endl;
-      t << "// Copyright (C) 2009 by Dimitri van Heesch." << endl << endl;
-      t << "// The code in this file is loosly based on main.js, part of Natural Docs," << endl;
-      t << "// which is Copyright (C) 2003-2008 Greg Valure" << endl;
-      t << "// Natural Docs is licensed under the GPL." << endl << endl;
       t << "var indexSectionsWithContent =" << endl;
       t << "{" << endl;
       bool first=TRUE;
@@ -1314,8 +1310,25 @@ void writeJavascriptSearchIndex()
       }
       if (!first) t << "\n";
       t << "};" << endl << endl;
-      t << search_script;
+      t << "var indexSectionLabels =" << endl;
+      t << "{" << endl;
+      first=TRUE;
+      static SearchIndexCategoryMapping map;
+      j=0;
+      for (i=0;i<NUM_SEARCH_INDICES;i++)
+      {
+        if (g_searchIndexCount[i]>0)
+        {
+          if (!first) t << "," << endl;
+          t << "  " << j << ": \"" << convertToXML(map.categoryLabel[i]) << "\"";
+          first=FALSE;
+          j++;
+        }
+      }
+      if (!first) t << "\n";
+      t << "};" << endl << endl;
     }
+    ResourceMgr::instance().copyResource("search.js",searchDirName);
   }
   {
     QFile f(searchDirName+"/nomatches.html");
@@ -1343,6 +1356,7 @@ void writeJavascriptSearchIndex()
 
 void writeSearchCategories(FTextStream &t)
 {
+#if 0
   static SearchIndexCategoryMapping map;
   int i,j=0;
   for (i=0;i<NUM_SEARCH_INDICES;i++)
@@ -1357,6 +1371,7 @@ void writeSearchCategories(FTextStream &t)
       j++;
     }
   }
+#endif
 }
 
 //---------------------------------------------------------------------------------------------
diff --git a/src/svgpan.js b/src/svgpan.js
deleted file mode 100644
index 4218e79..0000000
--- a/src/svgpan.js
+++ /dev/null
@@ -1,319 +0,0 @@
-/**
- * The code below is based on SVGPan Library 1.2 and was modified for doxygen
- * to support both zooming and panning via the mouse and via embedded bottons.
- *
- * This code is licensed under the following BSD license:
- *
- * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- * 
- *    1. Redistributions of source code must retain the above copyright notice, this list of
- *       conditions and the following disclaimer.
- * 
- *    2. Redistributions in binary form must reproduce the above copyright notice, this list
- *       of conditions and the following disclaimer in the documentation and/or other materials
- *       provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * 
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of Andrea Leofreddi.
- */
-
-var root = document.documentElement;
-var state = 'none';
-var stateOrigin;
-var stateTf = root.createSVGMatrix();
-var cursorGrab = ' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move';
-var zoomSteps = 10;
-var zoomInFactor;
-var zoomOutFactor;
-var windowWidth;
-var windowHeight;
-var svgDoc;
-var minZoom;
-var maxZoom;
-if (!window) window=this;
-
-/**
- * Show the graph in the middle of the view, scaled to fit 
- */
-function show()
-{
-  if (window.innerHeight) // Firefox
-  {
-    windowWidth = window.innerWidth;
-    windowHeight = window.innerHeight;
-  }
-  else if (document.documentElement.clientWidth) // Chrome/Safari
-  {
-    windowWidth = document.documentElement.clientWidth
-    windowHeight = document.documentElement.clientHeight
-  }
-  if (!windowWidth || !windowHeight) // failsafe
-  {
-    windowWidth = 800;
-    windowHeight = 600;
-  }
-  minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);
-  maxZoom = minZoom+1.5;
-  zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps);
-  zoomOutFactor = 1.0/zoomInFactor;
-
-  var g = svgDoc.getElementById('viewport');
-  try
-  {
-    var bb = g.getBBox(); // this can throw an exception if css { display: none }
-    var tx = (windowWidth-viewWidth*minZoom+8)/(2*minZoom);
-    var ty = viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);
-    var a = 'scale('+minZoom+') rotate(0) translate('+tx+' '+ty+')';
-    g.setAttribute('transform',a);
-  }
-  catch(e) {}
-}
-
-/**
- * Register handlers
- */
-function init(evt) 
-{
-  svgDoc = evt.target.ownerDocument;
-  if (top.window && top.window.registerShow) // register show function in html doc for dynamic sections
-  {
-    top.window.registerShow(sectionId,show);
-  }
-  show();
-
-  setAttributes(root, {
-     "onmousedown" : "handleMouseDown(evt)",
-     "onmousemove" : "handleMouseMove(evt)",
-     "onmouseup"   : "handleMouseUp(evt)"
-  });
-
-  if (window.addEventListener)
-  {
-    if (navigator.userAgent.toLowerCase().indexOf('webkit') >= 0 || 
-        navigator.userAgent.toLowerCase().indexOf("opera") >= 0 || 
-        navigator.appVersion.indexOf("MSIE") != -1)
-    {
-      window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari/IE9
-    }
-    else
-    {
-      window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others
-    }
-  }
-}
-
-window.onresize=function()
-{
-  if (svgDoc) { show(); }
-}
-
-/**
- * Instance an SVGPoint object with given event coordinates.
- */
-function getEventPoint(evt) 
-{
-  var p = root.createSVGPoint();
-  p.x = evt.clientX;
-  p.y = evt.clientY;
-  return p;
-}
-
-/**
- * Sets the current transform matrix of an element.
- */
-function setCTM(element, matrix) 
-{
-  var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
-  element.setAttribute("transform", s);
-}
-
-/**
- * Sets attributes of an element.
- */
-function setAttributes(element, attributes)
-{
-  for (i in attributes)
-    element.setAttributeNS(null, i, attributes[i]);
-}
-
-function doZoom(g,point,zoomFactor)
-{
-  var p = point.matrixTransform(g.getCTM().inverse());
-  var k = root.createSVGMatrix().translate(p.x, p.y).scale(zoomFactor).translate(-p.x, -p.y);
-  var n = g.getCTM().multiply(k);
-  var s = Math.max(n.a,n.d);
-  if      (s>maxZoom) n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);
-  else if (s<minZoom) n=n.translate(p.x,p.y).scale(minZoom/s).translate(-p.x,-p.y);
-  setCTM(g, n);
-  stateTf = stateTf.multiply(n.inverse());
-}
-
-/**
- * Handle mouse move event.
- */
-function handleMouseWheel(evt) 
-{
-  if (!evt) evt = window.evt;
-  if (!evt.shiftKey) return; // only zoom when shift is pressed
-  if (evt.preventDefault) evt.preventDefault();
-  evt.returnValue = false;
-
-  if (state!='pan')
-  {
-    var delta;
-    if (evt.wheelDelta)
-    {
-      delta = evt.wheelDelta / 7200; // Opera/Chrome/IE9/Safari
-    }
-    else
-    {
-      delta = evt.detail / -180; // Mozilla
-    }
-    var svgDoc = evt.target.ownerDocument;
-    var g = svgDoc.getElementById("viewport");
-    var p = getEventPoint(evt);
-    doZoom(g,p,1+delta);
-  }
-}
-
-/**
- * Handle mouse move event.
- */
-function handleMouseMove(evt) 
-{
-  if(evt.preventDefault)
-    evt.preventDefault();
-
-  evt.returnValue = false;
-
-  var g = svgDoc.getElementById("viewport");
-
-  if (state == 'pan') 
-  {
-    // Pan mode
-    var p = getEventPoint(evt).matrixTransform(stateTf);
-    setCTM(g,stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));
-  } 
-}
-
-/**
- * Handle click event.
- */
-function handleMouseDown(evt) 
-{
-  if(evt.preventDefault)
-    evt.preventDefault();
-  evt.returnValue = false;
-  var g = svgDoc.getElementById("viewport");
-  state = 'pan';
-  stateTf = g.getCTM().inverse();
-  stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
-  g.style.cursor = cursorGrab;
-}
-
-/**
- * Handle mouse button release event.
- */
-function handleMouseUp(evt) 
-{
-  if (evt.preventDefault) evt.preventDefault();
-  evt.returnValue = false;
-  var g = svgDoc.getElementById("viewport");
-  g.style.cursor = "default";
-  // Quit pan mode
-  state = '';
-}
-
-/**
- * Dumps a matrix to a string (useful for debug).
- */
-function dumpMatrix(matrix) 
-{
-  var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n  " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n  0, 0, 1 ]";
-  return s;
-}
-
-/**
- * Handler for pan buttons
- */
-function handlePan(x,y)
-{
-  var g = svgDoc.getElementById("viewport");
-  setCTM(g,g.getCTM().translate(x*20/minZoom,y*20/minZoom));
-}
-
-/**
- * Handle reset button
- */
-function handleReset()
-{
-  show();
-}
-
-/**
- * Handler for zoom buttons
- */
-function handleZoom(evt,direction)
-{
-  var g = svgDoc.getElementById("viewport");
-  var factor = direction=='in' ? zoomInFactor : zoomOutFactor;
-  var m = g.getCTM();
-  var p = root.createSVGPoint();
-  p.x = windowWidth/2;
-  p.y = windowHeight/2;
-  doZoom(g,p,factor);
-}
-
-function serializeXmlNode(xmlNode) 
-{
-  if (typeof window.XMLSerializer != "undefined") {
-    return (new window.XMLSerializer()).serializeToString(xmlNode);
-  } else if (typeof xmlNode.xml != "undefined") {
-    return xmlNode.xml;
-  }
-  return "";
-}
-
-/** 
- * Handler for print function
- */
-function handlePrint(evt)
-{
-  evt.returnValue = false;
-  var g = svgDoc.getElementById("graph");
-  var xs = serializeXmlNode(g);
-  try {
-    var w = window.open('about:blank','_blank','width='+windowWidth+',height='+windowHeight+
-                        ',toolbar=0,status=0,menubar=0,scrollbars=0,resizable=0,location=0,directories=0');
-    var d = w.document;
-    d.write('<html xmlns="http://www.w3.org/1999/xhtml" '+
-            'xmlns:svg="http://www.w3.org/2000/svg" '+
-            'xmlns:xlink="http://www.w3.org/1999/xlink">');
-    d.write('<head><title>Print SVG</title></head>');
-    d.write('<body style="margin: 0px; padding: 0px;" onload="window.print();">');
-    d.write('<div id="svg" style="width:'+windowWidth+'px; height:'+windowHeight+'px;">'+xs+'</div>');
-    d.write('</body>');
-    d.write('</html>');
-    d.close();
-  } catch(e) {
-    alert('Failed to open popup window needed for printing!\n'+e.message);
-  }
-}
-
-
-
-
diff --git a/src/template.cpp b/src/template.cpp
index 942d833..2a40bfe 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -33,6 +33,7 @@
 #include "ftextstream.h"
 #include "message.h"
 #include "util.h"
+#include "resourcemgr.h"
 
 #define ENABLE_TRACING 0
 
@@ -2060,6 +2061,11 @@ class ExpressionParser
       if (p==0 || *p=='\0') return FALSE;
       while (*p==' ') p++; // skip over spaces
       char c=*p;
+      if (*p=='\0') // only spaces...
+      {
+        m_tokenStream = p;
+        return FALSE;
+      }
       const char *q = p;
       switch (c)
       {
@@ -2238,7 +2244,7 @@ class ExpressionParser
         char s[2];
         s[0]=c;
         s[1]=0;
-        warn(m_parser->templateName(),m_line,"Found unknown token %s while parsing %s",s,m_tokenStream);
+        warn(m_parser->templateName(),m_line,"Found unknown token '%s' (%d) while parsing %s",s,c,m_tokenStream);
         m_curToken.id = s;
         p++;
       }
@@ -2297,7 +2303,7 @@ class TemplateNodeList : public QList<TemplateNode>
 class TemplateImpl : public TemplateNode, public Template
 {
   public:
-    TemplateImpl(TemplateEngine *e,const QCString &name,const QCString &data);
+    TemplateImpl(TemplateEngine *e,const QCString &name,const char *data,int size);
     void render(FTextStream &ts, TemplateContext *c);
 
     TemplateEngine *engine() const { return m_engine; }
@@ -2695,6 +2701,37 @@ template<class T> class TemplateNodeCreator : public TemplateNode
       return dynamic_cast<TemplateImpl*>(root);
     }
   protected:
+    void mkpath(TemplateContextImpl *ci,const QCString &fileName)
+    {
+      int i=fileName.find('/');
+      QCString outputDir = ci->outputDirectory();
+      QDir d(outputDir);
+      if (!d.exists())
+      {
+        QDir rootDir;
+        rootDir.setPath(QDir::currentDirPath());
+        if (!rootDir.mkdir(outputDir))
+        {
+          err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+	      "exist and cannot be created\n",outputDir.data());
+          return;
+        }
+        d.setPath(outputDir);
+      }
+      int j=0;
+      while (i!=-1) // fileName contains path part
+      {
+        if (d.exists())
+        {
+          bool ok = d.mkdir(fileName.mid(j,i-j));
+          if (!ok) break;
+          QCString dirName = outputDir+'/'+fileName.left(i);
+          d = QDir(dirName);
+          j = i+1;
+        }
+        i=fileName.find('/',i+1);
+      }
+    }
     QCString m_templateName;
     int m_line;
 };
@@ -3192,7 +3229,7 @@ class TemplateNodeMsg : public TemplateNodeCreator<TemplateNodeMsg>
       QStrList stopAt;
       stopAt.append("endmsg");
       parser->parse(this,line,stopAt,m_nodes);
-      parser->removeNextToken(); // skip over endmarkers
+      parser->removeNextToken(); // skip over endmsg
       TRACE(("}TemplateNodeMsg()\n"));
     }
     void render(FTextStream &, TemplateContext *c)
@@ -3474,25 +3511,6 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
       delete m_templateExpr;
       delete m_fileExpr;
     }
-    void mkpath(TemplateContextImpl *ci,const QCString &fileName)
-    {
-      int i=fileName.find('/');
-      QCString outputDir = ci->outputDirectory();
-      QDir d(outputDir);
-      int j=0;
-      while (i!=-1) // fileName contains path part
-      {
-        if (d.exists())
-        {
-          bool ok = d.mkdir(fileName.mid(j,i-j));
-          if (!ok) break;
-          QCString dirName = outputDir+'/'+fileName.left(i);
-          d = QDir(dirName);
-          j = i+1;
-        }
-        i=fileName.find('/',i+1);
-      }
-    }
     void render(FTextStream &, TemplateContext *c)
     {
       TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
@@ -3518,7 +3536,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
             TemplateImpl *createTemplate = ct ? dynamic_cast<TemplateImpl*>(ct) : 0;
             if (createTemplate)
             {
-              //mkpath(ci,outputFile);
+              mkpath(ci,outputFile);
               QCString extension=outputFile;
               int i=extension.findRev('.');
               if (i!=-1)
@@ -4106,6 +4124,75 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
 
 //----------------------------------------------------------
 
+/** @brief Class representing an 'markers' tag in a template */
+class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource>
+{
+  public:
+    TemplateNodeResource(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+      : TemplateNodeCreator<TemplateNodeResource>(parser,parent,line)
+    {
+      TRACE(("{TemplateNodeResource(%s)\n",data.data()));
+      ExpressionParser ep(parser,line);
+      int i;
+      if (data.isEmpty())
+      {
+        parser->warn(m_templateName,line,"resource tag is missing resource file argument");
+        m_resExpr=0;
+        m_asExpr=0;
+      }
+      else if ((i=data.find(" as "))!=-1) // resource a as b
+      {
+        m_resExpr = ep.parse(data.left(i));  // part before as
+        m_asExpr  = ep.parse(data.mid(i+4)); // part after as
+      }
+      else // resource a
+      {
+        m_resExpr = ep.parse(data);
+        m_asExpr  = 0;
+      }
+      TRACE(("}TemplateNodeResource(%s)\n",data.data()));
+    }
+    void render(FTextStream &, TemplateContext *c)
+    {
+      TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+      ci->setLocation(m_templateName,m_line);
+      if (m_resExpr)
+      {
+        QCString resourceFile = m_resExpr->resolve(c).toString();
+        if (resourceFile.isEmpty())
+        {
+          ci->warn(m_templateName,m_line,"invalid parameter for resource command\n");
+        }
+        else
+        {
+          QCString outputDirectory = ci->outputDirectory();
+          if (m_asExpr)
+          {
+            QCString targetFile = m_asExpr->resolve(c).toString();
+            mkpath(ci,targetFile);
+            if (targetFile.isEmpty())
+            {
+              ci->warn(m_templateName,m_line,"invalid parameter at right side of 'as' for resource command\n");
+            }
+            else
+            {
+              ResourceMgr::instance().copyResourceAs(resourceFile,outputDirectory,targetFile);
+            }
+          }
+          else
+          {
+            ResourceMgr::instance().copyResource(resourceFile,outputDirectory);
+          }
+        }
+      }
+    }
+  private:
+    ExprAst *m_resExpr;
+    ExprAst *m_asExpr;
+};
+
+//----------------------------------------------------------
+
 /** @brief Factory class for creating tag AST nodes found in a template */
 class TemplateNodeFactory
 {
@@ -4152,23 +4239,24 @@ class TemplateNodeFactory
 };
 
 // register a handler for each start tag we support
-static TemplateNodeFactory::AutoRegister<TemplateNodeIf>        autoRefIf("if");
-static TemplateNodeFactory::AutoRegister<TemplateNodeFor>       autoRefFor("for");
-static TemplateNodeFactory::AutoRegister<TemplateNodeMsg>       autoRefMsg("msg");
-static TemplateNodeFactory::AutoRegister<TemplateNodeSet>       autoRefSet("set");
-static TemplateNodeFactory::AutoRegister<TemplateNodeTree>      autoRefTree("recursetree");
-static TemplateNodeFactory::AutoRegister<TemplateNodeWith>      autoRefWith("with");
-static TemplateNodeFactory::AutoRegister<TemplateNodeBlock>     autoRefBlock("block");
-static TemplateNodeFactory::AutoRegister<TemplateNodeCycle>     autoRefCycle("cycle");
-static TemplateNodeFactory::AutoRegister<TemplateNodeRange>     autoRefRange("range");
-static TemplateNodeFactory::AutoRegister<TemplateNodeExtend>    autoRefExtend("extend");
-static TemplateNodeFactory::AutoRegister<TemplateNodeCreate>    autoRefCreate("create");
-static TemplateNodeFactory::AutoRegister<TemplateNodeRepeat>    autoRefRepeat("repeat");
-static TemplateNodeFactory::AutoRegister<TemplateNodeInclude>   autoRefInclude("include");
-static TemplateNodeFactory::AutoRegister<TemplateNodeMarkers>   autoRefMarkers("markers");
-static TemplateNodeFactory::AutoRegister<TemplateNodeSpaceless> autoRefSpaceless("spaceless");
-static TemplateNodeFactory::AutoRegister<TemplateNodeIndexEntry> autoRefIndexEntry("indexentry");
-static TemplateNodeFactory::AutoRegister<TemplateNodeOpenSubIndex> autoRefOpenSubIndex("opensubindex");
+static TemplateNodeFactory::AutoRegister<TemplateNodeIf>            autoRefIf("if");
+static TemplateNodeFactory::AutoRegister<TemplateNodeFor>           autoRefFor("for");
+static TemplateNodeFactory::AutoRegister<TemplateNodeMsg>           autoRefMsg("msg");
+static TemplateNodeFactory::AutoRegister<TemplateNodeSet>           autoRefSet("set");
+static TemplateNodeFactory::AutoRegister<TemplateNodeTree>          autoRefTree("recursetree");
+static TemplateNodeFactory::AutoRegister<TemplateNodeWith>          autoRefWith("with");
+static TemplateNodeFactory::AutoRegister<TemplateNodeBlock>         autoRefBlock("block");
+static TemplateNodeFactory::AutoRegister<TemplateNodeCycle>         autoRefCycle("cycle");
+static TemplateNodeFactory::AutoRegister<TemplateNodeRange>         autoRefRange("range");
+static TemplateNodeFactory::AutoRegister<TemplateNodeExtend>        autoRefExtend("extend");
+static TemplateNodeFactory::AutoRegister<TemplateNodeCreate>        autoRefCreate("create");
+static TemplateNodeFactory::AutoRegister<TemplateNodeRepeat>        autoRefRepeat("repeat");
+static TemplateNodeFactory::AutoRegister<TemplateNodeInclude>       autoRefInclude("include");
+static TemplateNodeFactory::AutoRegister<TemplateNodeMarkers>       autoRefMarkers("markers");
+static TemplateNodeFactory::AutoRegister<TemplateNodeResource>      autoRefResource("resource");
+static TemplateNodeFactory::AutoRegister<TemplateNodeSpaceless>     autoRefSpaceless("spaceless");
+static TemplateNodeFactory::AutoRegister<TemplateNodeIndexEntry>    autoRefIndexEntry("indexentry");
+static TemplateNodeFactory::AutoRegister<TemplateNodeOpenSubIndex>  autoRefOpenSubIndex("opensubindex");
 static TemplateNodeFactory::AutoRegister<TemplateNodeCloseSubIndex> autoRefCloseSubIndex("closesubindex");
 
 //----------------------------------------------------------
@@ -4253,7 +4341,7 @@ void TemplateBlockContext::push(TemplateNodeBlock *block)
 class TemplateLexer
 {
   public:
-    TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const QCString &data);
+    TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const char *data,int size);
     void tokenize(QList<TemplateToken> &tokens);
   private:
     void addToken(QList<TemplateToken> &tokens,
@@ -4265,9 +4353,12 @@ class TemplateLexer
     QCString m_data;
 };
 
-TemplateLexer::TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const QCString &data) :
-  m_engine(engine), m_fileName(fileName), m_data(data)
+TemplateLexer::TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const char *data,int size) :
+  m_engine(engine), m_fileName(fileName)
 {
+  m_data.resize(size+1);
+  memcpy(m_data.data(),data,size);
+  m_data[size]=0;
 }
 
 void TemplateLexer::tokenize(QList<TemplateToken> &tokens)
@@ -4472,9 +4563,8 @@ void TemplateLexer::addToken(QList<TemplateToken> &tokens,
   if (startPos<endPos)
   {
     int len = endPos-startPos+1;
-    QCString text(len+1);
+    QCString text(len);
     qstrncpy(text.data(),data+startPos,len);
-    text[len]='\0';
     if (type!=TemplateToken::Text) text = text.stripWhiteSpace();
     tokens.append(new TemplateToken(type,text,line));
   }
@@ -4607,12 +4697,12 @@ void TemplateParser::warn(const char *fileName,int line,const char *fmt,...) con
 //----------------------------------------------------------
 
 
-TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const QCString &data)
+TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const char *data,int size)
   : TemplateNode(0)
 {
   m_name = name;
   m_engine = engine;
-  TemplateLexer lexer(engine,name,data);
+  TemplateLexer lexer(engine,name,data,size);
   QList<TemplateToken> tokens;
   tokens.setAutoDelete(TRUE);
   lexer.tokenize(tokens);
@@ -4681,6 +4771,13 @@ class TemplateEngine::Private
       Template *templ = m_templateCache.find(fileName);
       if (templ==0)
       {
+        const Resource *res = ResourceMgr::instance().get(fileName);
+        if (res)
+        {
+          templ = new TemplateImpl(m_engine,fileName,(const char *)res->data,res->size);
+          m_templateCache.insert(fileName,templ);
+        }
+#if 0
         QFile f(fileName);
         if (f.open(IO_ReadOnly))
         {
@@ -4697,6 +4794,7 @@ class TemplateEngine::Private
             delete[] data;
           }
         }
+#endif
         else
         {
           err("Cound not open template file %s\n",fileName.data());
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 549ff0f..01d7f9d 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -46,6 +46,7 @@
 #include "dirdef.h"
 #include "section.h"
 #include "htmlentity.h"
+#include "resourcemgr.h"
 
 // no debug info
 #define XML_DB(x) do {} while(0)
@@ -56,18 +57,6 @@
 
 //------------------
 
-static const char index_xsd[] =
-#include "index.xsd.h"
-;
-
-//------------------
-//
-static const char compound_xsd[] =
-#include "compound.xsd.h"
-;
-
-//------------------
-
 /** Helper class mapping MemberList::ListType to a string representing */
 class XmlSectionMapper : public QIntDict<char>
 {
@@ -1387,37 +1376,6 @@ static void generateXMLForClass(ClassDef *cd,FTextStream &ti)
       generateXMLSection(cd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
     }
   }
-#if 0
-  generateXMLSection(cd,ti,t,cd->pubTypes,"public-type");
-  generateXMLSection(cd,ti,t,cd->pubMethods,"public-func");
-  generateXMLSection(cd,ti,t,cd->pubAttribs,"public-attrib");
-  generateXMLSection(cd,ti,t,cd->pubSlots,"public-slot");
-  generateXMLSection(cd,ti,t,cd->signals,"signal");
-  generateXMLSection(cd,ti,t,cd->dcopMethods,"dcop-func");
-  generateXMLSection(cd,ti,t,cd->properties,"property");
-  generateXMLSection(cd,ti,t,cd->events,"event");
-  generateXMLSection(cd,ti,t,cd->pubStaticMethods,"public-static-func");
-  generateXMLSection(cd,ti,t,cd->pubStaticAttribs,"public-static-attrib");
-  generateXMLSection(cd,ti,t,cd->proTypes,"protected-type");
-  generateXMLSection(cd,ti,t,cd->proMethods,"protected-func");
-  generateXMLSection(cd,ti,t,cd->proAttribs,"protected-attrib");
-  generateXMLSection(cd,ti,t,cd->proSlots,"protected-slot");
-  generateXMLSection(cd,ti,t,cd->proStaticMethods,"protected-static-func");
-  generateXMLSection(cd,ti,t,cd->proStaticAttribs,"protected-static-attrib");
-  generateXMLSection(cd,ti,t,cd->pacTypes,"package-type");
-  generateXMLSection(cd,ti,t,cd->pacMethods,"package-func");
-  generateXMLSection(cd,ti,t,cd->pacAttribs,"package-attrib");
-  generateXMLSection(cd,ti,t,cd->pacStaticMethods,"package-static-func");
-  generateXMLSection(cd,ti,t,cd->pacStaticAttribs,"package-static-attrib");
-  generateXMLSection(cd,ti,t,cd->priTypes,"private-type");
-  generateXMLSection(cd,ti,t,cd->priMethods,"private-func");
-  generateXMLSection(cd,ti,t,cd->priAttribs,"private-attrib");
-  generateXMLSection(cd,ti,t,cd->priSlots,"private-slot");
-  generateXMLSection(cd,ti,t,cd->priStaticMethods,"private-static-func");
-  generateXMLSection(cd,ti,t,cd->priStaticAttribs,"private-static-attrib");
-  generateXMLSection(cd,ti,t,cd->friends,"friend");
-  generateXMLSection(cd,ti,t,cd->related,"related");
-#endif
 
   t << "    <briefdescription>" << endl;
   writeXMLDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
@@ -1519,14 +1477,6 @@ static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti)
       generateXMLSection(nd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
     }
   }
-#if 0
-  generateXMLSection(nd,ti,t,&nd->decDefineMembers,"define");
-  generateXMLSection(nd,ti,t,&nd->decProtoMembers,"prototype");
-  generateXMLSection(nd,ti,t,&nd->decTypedefMembers,"typedef");
-  generateXMLSection(nd,ti,t,&nd->decEnumMembers,"enum");
-  generateXMLSection(nd,ti,t,&nd->decFuncMembers,"func");
-  generateXMLSection(nd,ti,t,&nd->decVarMembers,"var");
-#endif
 
   t << "    <briefdescription>" << endl;
   writeXMLDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
@@ -1663,14 +1613,6 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti)
       generateXMLSection(fd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
     }
   }
-#if 0
-  generateXMLSection(fd,ti,t,fd->decDefineMembers,"define");
-  generateXMLSection(fd,ti,t,fd->decProtoMembers,"prototype");
-  generateXMLSection(fd,ti,t,fd->decTypedefMembers,"typedef");
-  generateXMLSection(fd,ti,t,fd->decEnumMembers,"enum");
-  generateXMLSection(fd,ti,t,fd->decFuncMembers,"func");
-  generateXMLSection(fd,ti,t,fd->decVarMembers,"var");
-#endif
 
   t << "    <briefdescription>" << endl;
   writeXMLDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
@@ -1753,14 +1695,6 @@ static void generateXMLForGroup(GroupDef *gd,FTextStream &ti)
       generateXMLSection(gd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
     }
   }
-#if 0
-  generateXMLSection(gd,ti,t,&gd->decDefineMembers,"define");
-  generateXMLSection(gd,ti,t,&gd->decProtoMembers,"prototype");
-  generateXMLSection(gd,ti,t,&gd->decTypedefMembers,"typedef");
-  generateXMLSection(gd,ti,t,&gd->decEnumMembers,"enum");
-  generateXMLSection(gd,ti,t,&gd->decFuncMembers,"func");
-  generateXMLSection(gd,ti,t,&gd->decVarMembers,"var");
-#endif
 
   t << "    <briefdescription>" << endl;
   writeXMLDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription());
@@ -1906,18 +1840,11 @@ void generateXML()
   QCString outputDirectory = Config_getString("XML_OUTPUT");
   QDir xmlDir(outputDirectory);
   createSubDirs(xmlDir);
-  QCString fileName=outputDirectory+"/index.xsd";
-  QFile f(fileName);
-  if (!f.open(IO_WriteOnly))
-  {
-    err("Cannot open file %s for writing!\n",fileName.data());
-    return;
-  }
-  f.writeBlock(index_xsd,qstrlen(index_xsd));
-  f.close();
 
-  fileName=outputDirectory+"/compound.xsd";
-  f.setName(fileName);
+  ResourceMgr::instance().copyResource("index.xsd",outputDirectory);
+
+  QCString fileName=outputDirectory+"/compound.xsd";
+  QFile f(fileName);
   if (!f.open(IO_WriteOnly))
   {
     err("Cannot open file %s for writing!\n",fileName.data());
@@ -1925,7 +1852,8 @@ void generateXML()
   }
 
   // write compound.xsd, but replace special marker with the entities
-  const char *startLine = compound_xsd;
+  QCString compound_xsd = ResourceMgr::instance().getAsString("compound.xsd");
+  const char *startLine = compound_xsd.data();
   while (*startLine)
   {
     // find end of the line
diff --git a/templates/html/arrowdown.luma b/templates/html/arrowdown.luma
new file mode 100644
index 0000000..df7834c
--- /dev/null
+++ b/templates/html/arrowdown.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+16 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255
+255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 255 255 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255
+255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 152 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0 231 255 255 255 255 255 255 255 216   0   0   0   0
+  0   0   0  87 255 255 255 255 255 255 255  65   0   0   0   0
+  0   0   0   0 186 255 255 255 255 255 164   0   0   0   0   0
+  0   0   0   0  38 251 255 255 255 241  25   0   0   0   0   0
+  0   0   0   0   0 127 255 255 255 107   0   0   0   0   0   0
+  0   0   0   0   0   0 221 255 204   0   0   0   0   0   0   0
+  0   0   0   0   0   0  72 253  52   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0  77   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
diff --git a/templates/html/arrowright.luma b/templates/html/arrowright.luma
new file mode 100644
index 0000000..63209b0
--- /dev/null
+++ b/templates/html/arrowright.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+16 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0 223  75   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0 255 255 176  33   0   0   0   0   0   0   0   0   0
+  0   0   0 255 255 255 248 117   0   0   0   0   0   0   0   0
+  0   0   0 255 255 255 255 255 211  60   0   0   0   0   0   0
+  0   0   0 255 255 255 255 255 255 255  77   0   0   0   0   0
+  0   0   0 255 255 255 255 255 211  60   0   0   0   0   0   0
+  0   0   0 255 255 255 248 117   0   0   0   0   0   0   0   0
+  0   0   0 255 255 176  33   0   0   0   0   0   0   0   0   0
+  0   0   0 223  75   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
diff --git a/templates/html/bc_s.luma b/templates/html/bc_s.luma
new file mode 100644
index 0000000..2aac5d6
--- /dev/null
+++ b/templates/html/bc_s.luma
@@ -0,0 +1,66 @@
+# breadcrumb tabs
+# width & height
+8 30
+# luma data
+150 187 187 148 148 148 148 148
+147 175 186 147 147 147 147 147
+146 153 185 185 146 146 146 146
+144 144 177 183 144 144 144 144
+144 144 159 182 144 144 144 144
+143 143 144 179 181 143 143 143
+142 142 142 165 180 142 142 142
+141 141 141 144 178 178 141 141
+139 139 139 139 167 176 139 139
+137 137 137 137 146 174 137 137
+137 137 137 137 137 169 173 137
+135 135 135 135 135 150 171 135
+133 133 133 133 133 135 167 169
+132 132 132 132 132 132 154 167
+129 129 129 129 129 129 140 164
+129 129 129 129 129 129 154 163
+127 127 127 127 127 128 161 161
+125 125 125 125 125 141 158 125
+123 123 123 123 123 152 156 123
+121 121 121 121 129 154 121 121
+120 120 120 120 143 152 120 120
+118 118 118 120 150 150 118 118
+117 117 117 132 148 117 117 117
+114 114 114 142 145 114 114 114
+113 113 120 143 113 113 113 113
+111 111 133 141 111 111 111 111
+110 112 140 140 110 110 110 110
+109 124 138 109 109 109 109 109
+107 133 136 107 107 107 107 107
+111 134 106 106 106 106 106 106
+# alpha data
+241 241  21   0   0   0   0   0
+162 205 117   0   0   0   0   0
+ 54 231 225   3   0   0   0   0
+  0 198 215  78   0   0   0   0
+  0  93 211 186   0   0   0   0
+  0   6 232 235  42   0   0   0
+  0   0 132 203 147   0   0   0
+  0   0  27 242 241  15   0   0
+  0   0   0 168 205 108   0   0
+  0   0   0  63 228 219   0   0
+  0   0   0   0 207 221  72   0
+  0   0   0   0 102 208 177   0
+  0   0   0   0   9 238 240  36
+  0   0   0   0   0 138 201 138
+  0   0   0   0   0  77 187 158
+  0   0   0   0   0 159 204 120
+  0   0   0   0  15 241 241  21
+  0   0   0   0 111 208 171   0
+  0   0   0   0 210 222  66   0
+  0   0   0  60 227 219   0   0
+  0   0   0 162 204 114   0   0
+  0   0  18 238 238  21   0   0
+  0   0 114 205 165   0   0   0
+  0   0 216 225  60   0   0   0
+  0  66 226 216   0   0   0   0
+  0 165 204 111   0   0   0   0
+ 21 241 241  18   0   0   0   0
+117 203 159   0   0   0   0   0
+219 227  57   0   0   0   0   0
+211 201   0   0   0   0   0   0
+
diff --git a/templates/html/bdwn.luma b/templates/html/bdwn.luma
new file mode 100644
index 0000000..17e677d
--- /dev/null
+++ b/templates/html/bdwn.luma
@@ -0,0 +1,21 @@
+# arrow down button
+# width height
+7 8
+# luma data
+  0   0   0 142   0   0   0
+  0   0   0 142   0   0   0
+  0   0   0 142   0   0   0
+142   0   0 142   0   0 142
+142 142   0 142   0 142 142
+142 142 142 142 142 142 142
+  0 142 142 142 142 142   0
+  0   0 142 142 142   0   0
+# alpha data
+  0   0   0 255   0   0   0
+  0   0   0 255   0   0   0
+  0   0   0 255   0   0   0
+128   0   0 255   0   0 128
+255 128   0 255   0 128 255
+128 255 128 255 128 255 128
+  0 128 255 255 255 128   0
+  0   0 128 255 128   0   0
diff --git a/templates/html/bib2xhtml.pl b/templates/html/bib2xhtml.pl
new file mode 100755
index 0000000..da6dc62
--- /dev/null
+++ b/templates/html/bib2xhtml.pl
@@ -0,0 +1,319 @@
+#
+# Below is a stripped down version of bib2xhtml used by doxygen.
+# For the full version see http://www.spinellis.gr/sw/textproc/bib2xhtml/
+#
+# Convert from bibtex to XHTML.
+#
+# (C) Copyright 1995, 1996 David Hull.
+# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)
+#
+# (C) Copyright 2002-2010 Diomidis Spinellis
+# http://www.spinellis.gr
+#
+# This program is free software.  You can redistribute it and/or modify
+# it under the terms of the GNU General Public License.  See the
+# files README and COPYING for details.
+#
+# This source code contains UTF-8 characters.  You might want to use
+# an appropriate editor, if you want to view/modify the LaTeX to Unicode
+# substitution commands.
+#
+
+use Getopt::Std;
+use open IO => ':crlf';
+$label_styles{'numbered'} = 	$LABEL_NUMBERED = 	2;
+$list_start[$LABEL_NUMBERED] = 'dl class="citelist"';
+$list_end[$LABEL_NUMBERED] = "/dl";
+@tmpfiles = ();
+sub html_ent {
+	s/\\i\b/i/g;
+	s/\\\'(\001\d+)\{([AEIOUaeiou])\1\}/&$2acute;/gs;
+	s/\\\'([AEIOUaeiou])/&$1acute;/g;
+	s/\\\`(\001\d+)\{([AEIOUaeiou])\1\}/&$2grave;/gs;
+	s/\\\`([AEIOUaeiou])/&$1grave;/g;
+	s/\\\"(\001\d+)\{([AEIOUaeiouy])\1\}/&$2uml;/gs;
+	s/\\\"([AEIOUaeiouy])/&$1uml;/g;
+	s/\\\~(\001\d+)\{([ANOano])\1\}/&$2tilde;/gs;
+	s/\\\~([ANOano])/&$1tilde;/g;
+	s/\\\^(\001\d+)\{([AEIOUaeiou])\1\}/&$2circ;/gs;
+	s/\\\^([AEIOUaeiou])/&$1circ;/g;
+	s/\\c(\001\d+)\{([Cc])\1\}/&$2cedil;/gs;
+	s/\\u(\001\d+)\{(.)\1\}/$2/gs;
+	s/\\v(\001\d+)\{(.)\1\}/$2/gs;
+	s/\\([lL])\b/$1/g;
+	s/\\\=(\001\d+)\{(.)\1\}/$2/gs;
+	s/\\\=(.)/$1/g;
+	s/\\\.(\001\d+)\{(.)\1\}/$2/gs;
+	s/\\\.(.)/$1/g;
+	s/\\([Oo])\b\s*/&$1slash;/g;
+	s/\\AA\b\s*/&Aring;/g;
+	s/\\aa\b\s*/&aring;/g;
+	s/\\AE\b\s*/&AElig;/g;
+	s/\\ae\b\s*/&aelig;/g;
+	s/\\ss\b\s*/&szlig;/g;
+	s/\\S\b\s*/&sect;/g;
+	s/\\P\b\s*/&para;/g;
+	s/\\pounds\b\s*/&pound;/g;
+	s/\?\`/&iquest;/g;
+	s/\!\`/&iexcl;/g;
+	s/\-\-\-/&mdash;/g;
+	s/([^\!])\-\-([^\>])/$1&ndash;$2/g;
+	s/\\([aA]lpha)\b/&$1;/g;
+	s/\\([bB]eta)\b/&$1;/g;
+	s/\\([gG]amma)\b/&$1;/g;
+	s/\\([dD]elta)\b/&$1;/g;
+	s/\\varepsilon\b/&epsilon;/g;
+	s/\\([eE]psilon)\b/&$1;/g;
+	s/\\([zZ]eta)\b/&$1;/g;
+	s/\\([eE]ta)\b/&$1;/g;
+	s/\\([tT]heta)\b/&$1;/g;
+	s/\\vartheta\b/&theta;/g;
+	s/\\([iI]ota)\b/&$1;/g;
+	s/\\([kK]appa)\b/&$1;/g;
+	s/\\([lL]ambda)\b/&$1;/g;
+	s/\\([mM]u)\b/&$1;/g;
+	s/\\([nN]u)\b/&$1;/g;
+	s/\\([xX]i)\b/&$1;/g;
+	s/\\([oO]micron)\b/&$1;/g;
+	s/\\([pP]i)\b/&$1;/g;
+	s/\\varpi\b/&pi;/g;
+	s/\\([rR]ho)\b/&$1;/g;
+	s/\\varrho\b/&rho;/g;
+	s/\\([sS]igma)\b/&$1;/g;
+	s/\\varsigma\b/&sigmaf;/g;
+	s/\\([tT]au)\b/&$1;/g;
+	s/\\([uU]psilon)\b/&$1;/g;
+	s/\\([pP]hi)\b/&$1;/g;
+	s/\\varphi\b/&phi;/g;
+	s/\\([cC]hi)\b/&$1;/g;
+	s/\\([pP]si)\b/&$1;/g;
+	s/\\([oO]mega)\b/&$1;/g;
+	s/\\S\b/&sect;/g;
+	s/^\\circ\b/&deg;/g;
+	s/\\infty\b/&infin;/g;
+	s/\\emptyset\b/&empty;/g;
+	s/\\pm\b/&plusmn;/g;
+	s/\\times\b/&times;/g;
+	s/\\cdot\b/&sdot;/g;
+	s/\\partial\b/&part;/g;
+	s/\\nabla\b/&nabla;/g;
+	s/\\surd\b/&radic;/g;
+	s/\\perp\b/&perp;/g;
+	s/\\sum\b/&sum;/g;
+	s/\\int\b/&int;/g;
+	s/\\prod\b/&prod;/g;
+	s/\\sim\b/&sim;/g;
+	s/\\approx\b/&asymp;/g;
+	s/\\ne\b/&ne;/g;
+	s/\\equiv\b/&equiv;/g;
+	s/\\propto\b/&prop;/g;
+	s/\\le\b/&le;/g;
+	s/\\ge\b/&ge;/g;
+	s/\\leftarrow\b/&larr;/g;
+	s/\\rightarrow\b/&rarr;/g;
+	s/\\in\b/&isin;/g;
+	s/\\notin\b/&notin;/g;
+	s/\\lceil\b/&lceil;/g;
+	s/\\rceil\b/&rceil;/g;
+	s/\\lfloor\b/&lfloor;/g;
+	s/\\rfloor\b/&rfloor;/g;
+}
+foreach (@ARGV) {
+  if (/\.bib$/) {
+    $bibfile = $_;
+    $bibfile =~ s/\.bib$//;
+    push(@bibfiles,$bibfile);
+  } else {
+    $htmlfile = $_;
+  }
+}
+exit(1) unless defined($htmlfile);
+$bibdatacmd="\\bibdata{".join(',',@bibfiles)."}";
+$label_style = $LABEL_NUMBERED;
+$bstfile = "doxygen";
+umask(077);
+open(HTMLFILE,">$htmlfile$$");
+if (open(OHTMLFILE, "$htmlfile")) {
+    $mode = (stat OHTMLFILE)[2] & 0xfff;
+} else {
+  print "Error opening $htmlfile\n";
+  exit(1);
+}
+$beginstring = "<!-- BEGIN CITATIONS -->";
+$endstring = "<!-- END CITATIONS -->";
+@citations = ();
+loop:
+while (<OHTMLFILE>) {
+  print HTMLFILE;
+  last loop if m/^$beginstring$/;
+}
+loop:
+while (<OHTMLFILE>) {
+  print HTMLFILE;
+  last loop if m/^$endstring$/;
+  push(@citations, $2) if m/^([^\\]*)?(.+\})(.*)?$/;
+}
+push(@citations, $bibdatacmd);
+$auxfile = "bib$$";
+push(@tmpfiles, "$auxfile.aux");
+open(AUXFILE, ">$auxfile" . ".aux");
+print AUXFILE "\\relax\n\\bibstyle{$bstfile}\n";
+foreach $citation (@citations) {
+  print AUXFILE "$citation\n";
+}
+close(AUXFILE);
+push(@tmpfiles, "$auxfile.blg");
+push(@tmpfiles, "$auxfile.bbl");
+`bibtex $auxfile 2>&1`;
+if ($?==-1)
+{
+  print "bibtex command failed: $!\n";
+}
+$beginstring = "<!-- BEGIN BIBLIOGRAPHY -->";
+$endstring = "<!-- END BIBLIOGRAPHY -->";
+loop:
+while (<OHTMLFILE>) {
+  last loop if m/^$beginstring$/;
+  print HTMLFILE;
+}
+loop:
+while (<OHTMLFILE>) {
+  last loop if m/^$endstring$/;
+}
+print HTMLFILE "$beginstring\n";
+$t = $auxfile . ".bbl";
+$/ = "";
+open(BBLFILE, "<$t") || die "error opening $t: $!\n";
+$nentry = 0;
+loop:
+while (<BBLFILE>) {
+    if (($nentry == 0) && (m/^#/)) {
+	if ((m/#\s*label-style:\s*(\S+)/) && (! defined $label_style)) {
+	    $label_style = $label_styles{$1};
+	    if (! defined $label_style) {
+		print STDERR "label style unknown: \n";
+		next loop;
+	    }
+	}
+	next loop;
+    }
+    $nentry++;
+    ($bcite, $blabel) = m+<dt><a name=\"([^\"]*)\">\[([^\]]*)\]</a></dt><dd>+;
+    $blabel = "$nentry";
+    $bibcite{$bcite} = $blabel;
+}
+close(BBLFILE);
+$label_style = $LABEL_DEFAULT if (! defined $label_style);
+$list_start = $list_start[$label_style];
+$list_end = $list_end[$label_style];
+print HTMLFILE "<$list_start>\n\n";
+open(BBLFILE, "<$t") || die "error opening $t: $!\n";
+$nentry = 0;
+loop:
+while (<BBLFILE>) {
+    next loop if (($nentry == 0) && (m/^#/));
+    $nentry++;
+    s/\\\{/\002/g;
+    s/\\\}/\003/g;
+    s/\\\$/\004/g;
+    {
+	local ($c, $l, $z) = (0, 0, ());
+	s/([\{\}])/join("","\001",($1 eq "\{" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;
+    }
+    s/\%\n//g;
+    s/(\.(<\/cite>|<\/a>|\')+)\./$1/g;
+    s:(<dt><a name=\"[^\"]*\">\[)[^\]]*(\]</a></dt><dd>):$1$nentry$2:;
+    while (m/(\\(cite(label)?)(\001\d+)\{([^\001]+)\4\})/) {
+	$old = $1;
+	$cmd = $2;
+	$doxref = defined($3);
+	$bcite = $5;
+	if (! defined $bibcite{$bcite}) {
+	    $blabel = " [" . $bcite . "]";
+	} elsif ($doxref) {
+	    $blabel = " <a href=\"#$bcite\">[" . $bibcite{$bcite} . "]<\/a>";
+	} else {
+	    $blabel = " [" . $bibcite{$bcite} . "]";
+	}
+	$old =~ s/(\W)/\\$1/g;
+	s/\s*$old/$blabel/g;
+    }
+    s/In (<a href=\"[^\"]*\">)([^\[]+) \[(\2)/In $1\[$2/;
+    s/\\htmladdnormallink(foot)?(\001\d+)\{([^\001]+)\2\}(\001\d+)\{([^\001]+)\4\}/<a href="$5">$3<\/a>/gs;
+    s/\&amp;/\005/g;
+    s/\\?&/&amp;/g;
+    s/\005/&amp;/g;
+    html_ent();
+    while (m/\\char([\'\"]?[0-9a-fA-F]+)/) {
+	$o = $r = $1;
+	if ($r =~ s/^\'//) {
+	    $r = oct($r);
+	} elsif ($r =~ s/^\"//) {
+	    $r = hex($r);
+	}
+	s/\\char$o\s*/&#$r;/g;
+    }
+    s/{\\etalchar\001(\d+)\{(.)}\001\1\}/$2/g;
+    s/\\par\b/<p \/>/g;
+    s/\\url(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
+    s/\\href(\001\d+)\{(.*)\1\}(\001\d+)\{([^\001]*)\3\}/<a href="$2">$4<\/a>/gs;
+    s/\\href(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
+    s/(\001\d+)\{\\rm\s+(.*)\1\}/$2/gs;
+    s/\\textrm(\001\d+)\{(.*)\1\}/$2/gs;
+    s/(\001\d+)\{\\em\s+(.*)\1\}/<em>$2<\/em>/gs;
+    s/(\001\d+)\{\\it\s+(.*)\1\}/<i>$2<\/i>/gs;
+    s/(\001\d+)\{\\bf\s+(.*)\1\}/<b>$2<\/b>/gs;
+    s/(\001\d+)\{\\tt\s+(.*)\1\}/<tt>$2<\/tt>/gs;
+    s/\\emph(\001\d+)\{(.*)\1\}/<em>$2<\/em>/gs;
+    s/\\textit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
+    s/\\textbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
+    s/\\texttt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
+    s/\\mathrm(\001\d+)\{(.*)\1\}/$2/gs;
+    s/\\mathnormal(\001\d+)\{(.*)\1\}/$2/gs;
+    s/\\mathsf(\001\d+)\{(.*)\1\}/$2/gs;
+    s/\\mathbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
+    s/\\mathcal(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
+    s/\\mathit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
+    s/\\mathtt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
+    s/\\bibxhtmlname(\001\d+)\{(.*)\1\}/$2/ges;
+    sub domath {
+      local($t) = @_;
+      $t =~ s/\^(\001\d+)\{\\circ\1\}/\&\#176;/gs;
+      $t =~ s/\^\\circ/\&\#176;/g;
+      $t =~ s/\^(\001\d+)\{(.*)\1\}/<sup>$2<\/sup>/gs;
+      $t =~ s/\^(\w)/<sup>$1<\/sup>/g;
+      $t =~ s/\_(\001\d+)\{(.*)\1\}/<sub>$2<\/sub>/gs;
+      $t =~ s/\_(\w)/<sub>$1<\/sub>/g;
+      $t;
+    }
+    s/(\$([^\$]+)\$)/&domath($2)/ge;
+    s/(\\\((([^\\]|\\[^\(\)])+)\\\))/&domath($2)/ge;
+    s/\\mbox(\001\d+)\{(.*)\1\}/$2/gs;
+    while (s/(\<a href\=\"[^"]*?)\~/$1\005/g) { ; }
+    s/([^\\])~/$1&nbsp;/g;
+    s/\\\,/&thinsp;/g;
+    s/\\ldots\b/&hellip;/g;
+    s/\\dots\b/&hellip;/g;
+    s/\005/\~/g;
+    s/\\ / /g;
+    s/\\textasciitilde\b\s*/~/g;
+    s/\\([\#\&\%\~\_\^\|])/$1/g;
+    s/\\\W//g;
+    s/\001(\d+)\{\\[A-Za-z]+\001(\d+)\{([^\001]*)\001\2\}\001\1\}/$3/g;
+    s/\\([A-Za-z]+)/ $1 /g;
+    s+In <a href=\"[^\"]*\"></a>++;
+    s/\001\d+[\{\}]//gs;
+    tr/\002\003\004/{}$/;
+    print HTMLFILE $_;
+}
+close(BBLFILE);
+print HTMLFILE "<$list_end>\n\n$endstring\n";
+while (<OHTMLFILE>) {
+  print HTMLFILE;
+}
+close (OHTMLFILE);
+close(HTMLFILE);
+chmod($mode, "$htmlfile$$");
+rename("$htmlfile$$", $htmlfile);
+unlink(@tmpfiles);
+exit(0);
diff --git a/templates/html/close.png b/templates/html/close.png
new file mode 100644
index 0000000..9342d3d
Binary files /dev/null and b/templates/html/close.png differ
diff --git a/templates/html/closed.luma b/templates/html/closed.luma
new file mode 100644
index 0000000..1f57335
--- /dev/null
+++ b/templates/html/closed.luma
@@ -0,0 +1,23 @@
+# tree closed icon
+# width & height
+9 9
+# luma data
+0   0   0   0 142   0   0   0   0
+0   0   0   0 142 142   0   0   0
+0   0   0   0 142 142 142   0   0
+0   0   0   0 142 142 142 142   0
+0   0   0   0 142 142 142 142 142
+0   0   0   0 142 142 142 142   0
+0   0   0   0 142 142 142   0   0
+0   0   0   0 142 142   0   0   0
+0   0   0   0 142   0   0   0   0
+# alpha data
+0   0   0   0 255   0   0   0   0
+0   0   0   0 255 255   0   0   0
+0   0   0   0 255 255 255   0   0
+0   0   0   0 255 255 255 255   0
+0   0   0   0 255 255 255 255 255
+0   0   0   0 255 255 255 255   0
+0   0   0   0 255 255 255   0   0
+0   0   0   0 255 255   0   0   0
+0   0   0   0 255   0   0   0   0
diff --git a/templates/html/doc.luma b/templates/html/doc.luma
new file mode 100644
index 0000000..cdcd810
--- /dev/null
+++ b/templates/html/doc.luma
@@ -0,0 +1,50 @@
+# document icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 218 214 208 208 204 191 179 190 197 209 231 255 255 255 255 255 255 255 255
+255 255 255 255 255 195 224 226 226 222 214 204 181 203 229 188 225 255 255 255 255 255 255 255
+255 255 255 255 255 198 226 228 227 227 224 215 203 180 252 229 184 224 255 255 255 255 255 255
+255 255 255 255 255 198 229 230 229 229 228 224 214 154 252 252 229 187 235 255 255 255 255 255
+255 255 255 255 255 198 232 233 233 232 231 230 223 176 154 144 165 177 216 255 255 255 255 255
+255 255 255 255 255 198 236 236 216 226 238 219 232 225 209 190 189 166 193 255 255 255 255 255
+255 255 255 255 255 198 239 240 178 177 230 175 169 184 188 219 208 189 187 255 255 255 255 255
+255 255 255 255 255 198 241 242 240 218 237 236 240 235 241 244 221 208 182 255 255 255 255 255
+255 255 255 255 255 198 243 243 188 154 183 158 166 140 185 198 231 219 177 255 255 255 255 255
+255 255 255 255 255 198 243 245 248 228 241 241 226 249 237 227 239 232 177 255 255 255 255 255
+255 255 255 255 255 198 244 246 213 172 163 149 171 200 167 149 242 239 177 255 255 255 255 255
+255 255 255 255 255 198 249 248 240 218 237 236 240 235 241 244 244 242 177 255 255 255 255 255
+255 255 255 255 255 198 249 251 188 155 184 158 166 140 185 198 246 244 177 255 255 255 255 255
+255 255 255 255 255 198 251 253 248 228 241 241 226 249 237 227 249 246 177 255 255 255 255 255
+255 255 255 255 255 196 253 252 252 252 252 251 251 250 250 249 249 248 175 255 255 255 255 255
+255 255 255 255 255 194  64  30  37  37  37  37  37  37  37  37  30  64 188 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+
diff --git a/templates/html/doxygen.bst b/templates/html/doxygen.bst
new file mode 100644
index 0000000..c6ae7a8
--- /dev/null
+++ b/templates/html/doxygen.bst
@@ -0,0 +1,1388 @@
+	% $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+	% 
+	% This file is either "html-btxbst.doc" or was derived from
+	% "html-btxbst.doc" using cpp.  "html-btxbst.doc" itself was edited
+	% from "btxbst.doc" and "named.bst".
+	% The following copyright information is from btxbst.doc:
+	% version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+	% Copyright (C) 1985, all rights reserved.
+	% Copying of this file is authorized only if either
+	% (1) you make absolutely no changes to your copy, including name, or
+	% (2) if you do make changes, you name it something other than
+	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+	% This restriction helps ensure that all standard styles are identical.
+	% The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+    dvi
+    html
+    keywords
+    pdf
+    postscript
+    url
+    doi
+    mailto
+  }
+  {}
+  { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	}
+	{ output.state before.all =
+	    'write$
+	    { add.period$ " " * write$ }
+	  if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+  author empty$
+    { editor empty$
+	{ organization empty$
+	    'skip$
+	    { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+          if$
+	} 
+        { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+      if$
+    }
+    { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+  if$
+  keywords empty$
+    'skip$
+    { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+  if$
+  "<dt><a name=" quote$ * "CITEREF_" * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  postscript empty$
+    'skip$
+    { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+  if$
+  pdf empty$
+    'skip$
+    { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+  if$
+  dvi empty$
+    'skip$
+    { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+  if$
+  doi empty$
+    'skip$
+    { newline$ "<!-- DOI: " doi * " -->" * write$ }
+  if$
+  "</dd>" write$
+  newline$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {str.to.int}
+{
+  's :=
+  #0
+    { s empty$ not }
+    { % Multiply the number on the top of the stack by 10 = 1010 binary
+      duplicate$ +			% x2
+      duplicate$			% x2 x2
+      duplicate$ + duplicate$ +		% x2 x8
+      +
+      s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+      s #2 global.max$ substring$ 's :=
+    }
+  while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<em>" swap$ * "</em>" * }
+  if$
+}
+
+FUNCTION {add.link} % title
+{
+  't :=
+  t empty$
+    { "" }
+    { url empty$
+	{ html empty$
+	    { t }
+	    { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+	  if$ }
+	{ "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+  't :=
+  t empty$
+    { "" }
+    { mailto empty$
+        { t }
+        { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+      "\bibxhtmlname{" t * "}" * 't :=
+      nameptr #1 >
+	{ namesleft #1 >
+	    { ", " * t * }
+	    { numnames #2 >
+		{ "," * }
+		'skip$
+	      if$
+	      t "others" =
+		{ " et~al." * }
+		{ " and " * t * }
+	      if$
+	    }
+	  if$
+	}
+	't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+  add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ ", editors" * }
+	{ ", editor" * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ }
+  if$
+  add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+    { month empty$
+	{ "" }
+	{ "there's a month but no year in " cite$ * warning$
+	  month
+	}
+      if$
+    }
+    { month empty$
+	'year
+	{ month " " * year * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+  add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { "volume" volume tie.or.space.connect
+      series empty$
+	'skip$
+	{ " of " * series emphasize * }
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+	{ series field.or.null }
+	{ output.state mid.sentence =
+	    { "number" }
+	    { "Number" }
+	  if$
+	  number tie.or.space.connect
+	  series empty$
+	    { "there's a number but no series in " cite$ * warning$ }
+	    { " in " * series * }
+	  if$
+	}
+      if$
+    }
+    { "" }
+  if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+	{ edition "l" change.case$ " edition" * }
+	{ edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+	{ #1 'multiresult := }
+	{ t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pages" pages n.dashify tie.or.space.connect }
+	{ "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ":" * pages n.dashify * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+	{ "chapter" }
+	{ type "l" change.case$ }
+      if$
+      chapter tie.or.space.connect
+      pages empty$
+	'skip$
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+	{ "In " booktitle emphasize * }
+	{ "In " format.editors * ", " * booktitle emphasize * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { "Technical Report" }
+    'type
+  if$
+  number empty$
+    { "t" change.case$ }
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{
+  "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+  key empty$
+    { journal empty$
+	{ "need key or journal for " cite$ * " to crossref " * crossref *
+	  warning$
+	  ""
+	}
+        { "<cite>" * journal * "</cite>" * }
+      if$
+    }
+    { key * }
+  if$
+  "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { pop$ " et~al." * }
+    { #2 <
+	'skip$
+	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+	    { " et~al." * }
+	    { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ series empty$
+	    { "need editor, key, or series for " cite$ * " to crossref " *
+	      crossref * warning$
+	      "" *
+	    }
+            { "<cite>" * series * "</cite>" * }
+	  if$
+	}
+	{ key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+  "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ booktitle empty$
+	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+            { "<cite>" * booktitle * "</cite>" * }
+	  if$
+	}
+        { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+	{ organization publisher new.sentence.checkb
+	  organization output
+	  publisher output
+	  format.date "year" output.check
+	}
+	{ address output.nonnull
+	  format.date "year" output.check
+	  new.sentence
+	  organization output
+	  publisher output
+	}
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+	'skip$
+	{ organization output.nonnull
+	  address output
+	}
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+	{ address new.block.checka
+	  address output
+	}
+	'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+	{ publisher new.sentence.checka }
+	{ organization publisher new.sentence.checkb
+	  organization output
+	}
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+	'skip$
+	{ organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+  s num.names$ 'numnames :=
+  numnames #1 =
+    { s #1 "{vv }{ll}" format.name$ }
+    { numnames #2 =
+        { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+        { s #1 "{vv }{ll }" format.name$ "et~al." * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+	{ cite$ #1 #3 substring$ }
+	{ key }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { cite$ #1 #3 substring$ }
+	    { key }
+	  if$
+	}
+	{ editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {month.to.int}
+{
+	"l" change.case$ #3 text.prefix$
+	's :=
+	s "jan" = { #1 }  {
+	s "feb" = { #2 }  {
+	s "mar" = { #3 }  {
+	s "apr" = { #4 }  {
+	s "may" = { #5 }  {
+	s "jun" = { #6 }  {
+	s "jul" = { #7 }  {
+	s "aug" = { #8 }  {
+	s "sep" = { #9 }  {
+	s "oct" = { #10 } {
+	s "nov" = { #11 } {
+    s "dec" = { #12 } { #13 }  % 13 if nothing matches
+    if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c } 
+FUNCTION { get.day }
+{ month field.or.null 's :=
+  
+  % Strip out month name
+  #0 'done := 
+  { s "" = not done not and }
+  { s #1 #1 substring$ " " = 'done :=
+    s #2 global.max$ substring$ 's :=
+  }
+  while$
+
+  % Build up first number in t
+  "0" 't :=
+  #0 'done :=
+  { s "" = not done not and }
+  { s #1 #1 substring$ chr.to.int$ 'c :=
+    c #47 > c #58 < and
+      { t c int.to.chr$ * 't := }
+      { #1 'done := }
+    if$
+    s #2 global.max$ substring$ 's :=
+  }
+  while$
+
+  t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+  s empty$
+    { "0000" }
+    { s
+    }
+  if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+  s empty$
+    { "00" }
+    { s
+      str.to.int #10 + int.to.str$
+    }
+  if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+	'editor.key.organization.label
+	{ type$ "manual" =
+	    'author.key.organization.label
+	    'author.key.label
+	  if$
+	}
+      if$
+    }
+  if$
+  duplicate$
+
+  year empty$
+    'skip$
+    { ", " * }
+  if$
+  year field.or.null purify$ *  % CHANGED - pfps - 15 Feb 1989
+  'label :=
+
+  year field.or.null purify$
+  #-1 #4 substring$ 
+  sortify.fourdigit 
+  "  " *
+  month field.or.null month.to.int int.to.str$ sortify.twodigit *
+  "  " *  
+  get.day int.to.str$ sortify.twodigit *
+  "  " *
+  * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al." * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ calc.label
+  sort.label
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  *
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      sort.label 'last.sort.label :=
+    }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  label extra.label * 'label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+  "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css
new file mode 100644
index 0000000..a7a1e4f
--- /dev/null
+++ b/templates/html/doxygen.css
@@ -0,0 +1,1440 @@
+/* The standard CSS for doxygen $doxygenversion */
+
+body, table, div, p, dl {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font: 400 14px/28px Roboto,sans-serif;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid ##99;
+	color: ##44;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: ##ee;
+	border: 1px solid ##b0;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: ##50;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: ##60;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: ##AA;
+	color: #ffffff;
+	border: 1px double ##98;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+	background-color: ##FC;
+	border: 1px solid ##CC;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+div.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: ##ee;
+	font-weight: bold;
+	border: 1px solid ##cc;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: ##ee;
+	border: 1px solid ##cc;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: ##f0;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: ##F8;
+        border-left: 2px solid ##AA;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid ##b0;
+}
+
+th.dirtab {
+	background: ##ee;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid ##66;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: ##FA;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: ##60;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: ##60;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: ##ee;
+	border: 1px solid ##b0;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid ##B4;
+        border-left: 1px solid ##B4;
+        border-right: 1px solid ##B4;
+        padding: 6px 0px 6px 0px;
+        color: ##2b;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: ##E6;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid ##B4;      
+        border-left: 1px solid ##B4;      
+        border-right: 1px solid ##B4; 
+        padding: 6px 10px 2px 10px;
+        background-color: ##FC;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: ##88;
+        border-top:1px solid ##70;
+        border-left:1px solid ##70;
+        border-right:1px solid ##CC;
+        border-bottom:1px solid ##CC;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid ##AA;
+        border-bottom: 1px solid ##AA;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: ##F8;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: ##50;
+}
+
+.arrow {
+    color: ##AA;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    font-size: 80%;
+    display: inline-block;
+    width: 16px;
+    height: 22px;
+}
+
+.icon {
+    font-family: Arial, Helvetica;
+    font-weight: bold;
+    font-size: 12px;
+    height: 14px;
+    width: 16px;
+    display: inline-block;
+    background-color: ##88;
+    color: white;
+    text-align: center;
+    border-radius: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.icona {
+    width: 24px;
+    height: 22px;
+    display: inline-block;
+}
+
+.iconfopen {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderopen.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.iconfclosed {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderclosed.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.icondoc {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('doc.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+table.directory {
+    font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: ##33;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid ##37;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: ##47;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid ##B4;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid ##B4;
+        border-bottom: 1px solid ##B4;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid ##B4;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: ##E6;
+        font-size: 90%;
+        color: ##2B;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid ##B4;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:##9b;
+	border:solid 1px ##ca;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:##45;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: ##30;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:##80;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:##45;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: ##FA;
+	margin:  0px;
+	border-bottom: 1px solid ##CC;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid ##70;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid ##A0;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:##40;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: ##F6;
+        border: 1px solid ##DD;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 20px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: ##60;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+	cursor: default;
+	white-space: nowrap;
+	background-color: white;
+	border: 1px solid gray;
+	border-radius: 4px 4px 4px 4px;
+	box-shadow: 1px 1px 7px gray;
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	opacity: 0.9;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before {
+	border-top-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
diff --git a/templates/html/doxygen.luma b/templates/html/doxygen.luma
new file mode 100644
index 0000000..48d9435
--- /dev/null
+++ b/templates/html/doxygen.luma
@@ -0,0 +1,68 @@
+# doxygen logo
+# width & height
+104 31
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32  91  91  91  91  32  32 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32 255 255 255 255  32  32 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32 253 253 253 253  32  32 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32 251 251 251 251  32  32 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 255 255 255 255 255 255 255 255
+ 32  32  32  32  32  32  32  32  32  32 249 249 249 249  32  32 249 249 249 249  32  32  32  32  32  32 249 249 249 249  32  32  32  32  32  32 249 249 249 249  32  32  32  32  32  32  32  32  32  32 249 249 249  32  32  32  32  32 249 249 249 249  32  32  32  32  32  32  32  32  32  32 249 249 249 249 249 249  32  32  32  32  32  32  32 249 249 249 249 249  32  32  32  32  32 249  32  32  32  32  32 255 255 255
+ 32  32  32  32  46 132 190 190 147  61 247 247 247 247  32  32 247 247  32  32 118 161 190 190 161 118  32  32 247  32  46  89  89  89  89  46  32 247 247  32  89  89  89  89  61  89  89  89  89  46  32 247  32  46  89  89  89  89  32 247  32  32 118 175 190 161  89  61  89  89  89  61  32 247 247 247  32  32 104 147 190 190 190 132  89  32  32 247 247  32  46  89  89  89  75  32  89 161 190 161  75  32 255 255
+ 32  32  32  74 230 244 244 244 244 244 244 244 244 244  32  32 244  32  74 216 244 244 244 244 244 244 216  74  32 244  32 187 244 244 244 159  32 244  32 117 244 244 244 230  46 173 244 244 244 131  32 244  32 131 244 244 244 173  32  32  46 173 244 244 244 244 244 230 244 244 244 131  32 244 244  32  74 202 244 244 244 244 244 244 244 173  46  32 244  32  89 244 244 244 187 145 244 244 244 244 244  89  32 255
+ 32  32  46 213 241 241 241 241 241 241 241 241 241 241  32  32  32  60 227 241 241 241 241 241 241 241 241 227  60  32  32  46 227 241 241 241 102  32  60 227 241 241 241  88  32 116 241 241 241 199  32 241  32 185 241 241 241 116  32  32 143 241 241 241 241 241 241 241 241 241 241 130  32 241  32  74 227 241 241 241 199 185 241 241 241 241 171  32 241  32  88 241 241 241 241 241 241 241 241 241 241 199  32 255
+ 32  32 128 237 237 237 223 128  87 128 237 237 237 237  32  32  32 182 237 237 237 196 100 100 196 237 237 237 182  32 237  32 100 237 237 237 223  59 196 237 237 237 141  32  32  46 237 237 237 237  59  32  46 237 237 237 237  46  32  59 237 237 237 237 169  87  87 182 237 237 237 128  32 237  32 196 237 237 237  87  32  32  73 223 237 237 237  73  32  32  87 237 237 237 237 223 182 223 237 237 237 237  46  32
+ 32  32 207 234 234 234 113  32  32  32 234 234 234 234  32  32  59 234 234 234 221  45  32  32  45 221 234 234 234  59  32 234  32 140 234 234 234 221 234 234 234 194  32  32 234  32 167 234 234 234 126  32  99 234 234 234 167  32  32 126 234 234 234 180  32  32  32 126 234 234 234 126  32  32  99 234 234 234 167  32  32  32  32 153 234 234 234 126  32  32  86 234 234 234 207  45  32  45 234 234 234 234  86  32
+ 32  45 231 231 231 218  32  32  32  32 231 231 231 231  32  32  98 231 231 231 165  32 231 231  32 165 231 231 231  98  32 231  32  45 191 231 231 231 231 231 218  72  32 231 231  32  98 231 231 231 165  32 151 231 231 231 112  32  32 165 231 231 231 112  32 231  32 125 231 231 231 125  32  32 138 231 231 231 178 125 125 125 125 178 231 231 231 178  32  32  85 231 231 231 178  32 255  32 191 231 231 231  85  32
+ 32  84 227 227 227 175  32  32  32  32 227 227 227 227  32  32 123 227 227 227 123  32 227 227  32 123 227 227 227 123  32 227 227  32  71 227 227 227 227 227 123  32 227 227 227 227  32 214 227 227 227  45 201 227 227 227  45  32  32 175 227 227 227  84  32 227  32 123 227 227 227 123  32  32 175 227 227 227 227 227 227 227 227 227 227 227 227 175  32  32  84 227 227 227 175  32 255  32 175 227 227 227  84  32
+ 32  83 223 223 223 172  32  32  32  32 223 223 223 223  32  32 121 223 223 223 121  32 223 223  32 121 223 223 223 121  32 223 223 223  32 172 223 223 223 210  45  32 223 223 223 223  32 147 223 223 223 134 223 223 223 147  32 223  32 172 223 223 223  83  32 223  32 121 223 223 223 121  32  32 172 223 223 223 223 223 223 223 223 223 223 223 223 172  32  32  83 223 223 223 172  32 255  32 172 223 223 223  83  32
+ 32  82 220 220 220 170  32  32  32  32 220 220 220 220  32  32 120 220 220 220 120  32 220 220  32 120 220 220 220 120  32 220 220  32  95 220 220 220 220 220 132  32 220 220 220 220  32  95 220 220 220 207 220 220 220  95  32 220  32 170 220 220 220 107  32 220  32 120 220 220 220 120  32  32 170 220 220 220 132  32  32  32  32  32  32  32  32  32  32  32  82 220 220 220 170  32 255  32 170 220 220 220  82  32
+ 32  57 216 216 216 216  32  32  32  32 216 216 216 216  32  32  81 216 216 216 167  32 216 216  32 155 216 216 216  81  32 216  32  57 204 216 216 216 216 216 216  93  32 216 216 216 216  32 204 216 216 216 216 216 204  32 216 216  32 118 216 216 216 167  32  32  32 130 216 216 216 118  32  32 118 216 216 216 191  32  32 216 216 216  32  32  44  57  32  32  81 216 216 216 167  32 255  32 167 216 216 216  81  32
+ 32  32 189 213 213 213 116  32  32  80 213 213 213 213  32  32  44 201 213 213 213  68  32  32  68 213 213 213 213  44  32  32  32 165 213 213 213 165 213 213 213 201  44  32 213 213 213  32 129 213 213 213 213 213 141  32 213 213  32  80 213 213 213 213 165 116 153 213 213 213 213 116  32  32  56 213 213 213 213 153  56  32  32  32  44 104 189 116  32  32  80 213 213 213 165  32 255  32 165 213 213 213  80  32
+ 32  32 139 210 210 210 210 174 174 210 210 210 210 210  32  32  32 127 210 210 210 198 127 127 198 210 210 210 127  32 210  32 115 210 210 210 174  44 139 210 210 210 163  32  32 210 210  32  68 210 210 210 210 210  91  32 210 210 210  32 174 210 210 210 210 210 210 210 210 210 210 115  32 210  32 127 210 210 210 210 210 174 163 163 210 210 210 115  32  32  79 210 210 210 163  32 255  32 163 210 210 210  79  32
+ 32  32  55 194 206 206 206 206 206 194 206 206 206 206  32  32  32  44 171 206 206 206 206 206 206 206 206 171  44  32  32  67 206 206 206 206  67  32  44 183 206 206 206 113  32 206 206 206  32 183 206 206 206 194  32 206 206 206 206  32  67 194 206 206 206 206 206 171 206 206 206 113  32 206  32  32 136 206 206 206 206 206 206 206 206 206 206 113  32  32  78 206 206 206 160  32 255  32 160 206 206 206  78  32
+ 32  32  32 100 192 203 203 203 157  55 203 203 203 203  32  32 203  32  43 135 203 203 203 203 203 203 135  43  32  32  43 180 203 203 203 112  32 203  32  66 203 203 203 203  66  32 203 203  32 157 203 203 203 135  32 203 203 203 203 203  32  43 112 157 157 123  55 112 203 203 203 112  32 203 203  32  32  78 146 203 203 203 203 203 203 169 123  55  32  32  78 203 203 203 157  32 255  32 157 203 203 203  78  32
+ 32  32  32  32  54 110 110  88  32  32  32  32  32  32  32  32 200 200  32  32  54  99 110 110  99  54  32  32 200 200  32  32  32  32  32  32  32 200 200  32  32  32  32  32  32 200 200  32  54 200 200 200 200  77  32 200 200 200 200 200  32  32  32  32  32  32  32 166 200 200 200  88  32 200 200 200 200  32  32  32  66  77  77  77  32  32  32  32 200 200  32  32  32  32  32  32 255  32  32  32  32  32  32 255
+ 32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32 198 198 198 198  32  32  32  32  32  32 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198  32 109 198 198 198 176  32 198 198 198 198 198  32  98 121  76  32  32  54 109 198 198 198 198  43  32 198 198 198 198 198 198 198  32  32  32  32 198 198 198 198 198 198 198 198 198 198 198 198 255 255 255 255 255 255 255 255
+ 32  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  33 159 191 191 191 117  36  41  41  41  41  41  34 108 191 191 191 191 191 191 191 191 191 117  36  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41 255
+ 32  41  97 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128  78  38  64 190 192 192 192  66  66  41  41  85 128  65  34 107 190 192 192 192 192 192 192 192 139  48  39  41  41 105 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128  97  41 255
+ 32  41  97 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128  96  36  95 147 148 148 139  55  41  41  85 121 128  91  38  75 137 158 190 190 190 170 139  97  49  37  41  41 105 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128  97  41 255
+ 32  41  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  41  36  45  45  45  48  38  41  41  76  76  76  76  76  37  34  42  33  33  33  39  48  59  41  41  41  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  76  41 255
+ 32  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41  41 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0  66  66  66  66   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0 145 247 247 247 247 145   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0 247 247 247 247 247 247   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0 247 247 247 247 247 247   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0 247 247 247 247 247 247   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0  16 115 181 181 132 247 247 247 247 247 247   0   0   0   0   0  99 148 181 181 148  99   0   0   0   0  16  66  66  66  66  16   0   0   0   0  66  66  66  66  33  66  66  66  66  16   0   0   0  16  66  66  66  66   0   0   0   0  99 165 181 148  66  33  66  66  66  33   0   0   0   0   0   0  82 132 181 181 181 115  66   0   0   0   0   0  16  66  66  66  49   0  66 148 181 148  49   0   0   0
+  0   0   0 129 247 247 247 247 247 247 247 247 247 247 247   0   0   0 112 214 247 247 247 247 247 247 214 112   0  16 247 247 247 247 247 247  46   0   0 145 247 247 247 247 247 247 247 247 247 247  16   0  16 247 247 247 247 247  66   0  63 165 247 247 247 247 247 247 247 247 247 247  33   0   0   0  96 198 247 247 247 247 247 247 247 165  63   0   0  16 247 247 247 247 247 145 247 247 247 247 247 145   0   0
+  0   0 112 247 247 247 247 247 247 247 247 247 247 247 247   0   0 129 247 247 247 247 247 247 247 247 247 247 129   0 181 247 247 247 247 247 148   0 129 247 247 247 247 247 247 247 247 247 247 247 115   0 115 247 247 247 247 247 165  30 247 247 247 247 247 247 247 247 247 247 247 247 115   0   0 129 247 247 247 247 247 247 247 247 247 247 247  63   0  66 247 247 247 247 247 247 247 247 247 247 247 247  96   0
+  0  16 247 247 247 247 247 247 247 247 247 247 247 247 247   0  79 247 247 247 247 247 247 247 247 247 247 247 247  79  79 247 247 247 247 247 247 129 247 247 247 247 247 247 129 247 247 247 247 247 198   0 181 247 247 247 247 247  99 145 247 247 247 247 247 247 247 247 247 247 247 247 115   0  96 247 247 247 247 247 247 247 247 247 247 247 247 165   0  66 247 247 247 247 247 247 247 247 247 247 247 247 198   0
+  0 115 247 247 247 247 247 247 247 247 247 247 247 247 247   0 181 247 247 247 247 247 247 247 247 247 247 247 247 181   0 129 247 247 247 247 247 247 247 247 247 247 247 145  16 247 247 247 247 247 247  33 247 247 247 247 247 247  33 247 247 247 247 247 247 247 247 247 247 247 247 247 115   0 198 247 247 247 247 247 198 181 247 247 247 247 247 247  49  66 247 247 247 247 247 247 247 247 247 247 247 247 247  16
+  0 214 247 247 247 247 247 129  66 247 247 247 247 247 247  33 247 247 247 247 247 247  96  96 247 247 247 247 247 247  33   0 145 247 247 247 247 247 247 247 247 247 198  30   0 165 247 247 247 247 247 115 247 247 247 247 247 165 115 247 247 247 247 247 181  66 115 247 247 247 247 247 115  82 247 247 247 247 247 165 115 115 148 247 247 247 247 247 115  66 247 247 247 247 247 247 181 247 247 247 247 247 247  66
+ 16 247 247 247 247 247 231   0   0 247 247 247 247 247 247  82 247 247 247 247 247 165   0   0 165 247 247 247 247 247  82   0  30 247 247 247 247 247 247 247 247 247  96   0   0  82 247 247 247 247 247 165 247 247 247 247 247  99 165 247 247 247 247 247  99   0 115 247 247 247 247 247 115 132 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181  66 247 247 247 247 247 181   0 198 247 247 247 247 247  66
+ 66 247 247 247 247 247 181   0   0 247 247 247 247 247 247 115 247 247 247 247 247 115   0   0 115 247 247 247 247 247 115   0   0  96 247 247 247 247 247 247 247 129   0   0   0   0 231 247 247 247 247 247 247 247 247 247 247  16 181 247 247 247 247 247  66   0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+ 66 247 247 247 247 247 181   0   0 247 247 247 247 247 247 115 247 247 247 247 247 115   0   0 115 247 247 247 247 247 115   0   0   0 181 247 247 247 247 247 247  30   0   0   0   0 148 247 247 247 247 247 247 247 247 247 148   0 181 247 247 247 247 247  66   0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+ 66 247 247 247 247 247 181   0   0 247 247 247 247 247 247 115 247 247 247 247 247 115   0   0 115 247 247 247 247 247 115   0   0 129 247 247 247 247 247 247 247 145   0   0   0   0  82 247 247 247 247 247 247 247 247 247  82   0 181 247 247 247 247 247  99   0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 181  79  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+ 33 247 247 247 247 247 247  14   0 247 247 247 247 247 247  66 247 247 247 247 247 181   0   0 165 247 247 247 247 247  66   0  79 247 247 247 247 247 247 247 247 247 129   0   0   0   0 231 247 247 247 247 247 247 247 231   0   0 115 247 247 247 247 247 181 115 165 247 247 247 247 247 115 115 247 247 247 247 247 214  63   0   0   0  16 112 247 247  33  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0 214 247 247 247 247 247 198 198 247 247 247 247 247 247  16 247 247 247 247 247 247 132 132 247 247 247 247 247 247  16  14 181 247 247 247 247 247 247 247 247 247 247  79   0   0   0 132 247 247 247 247 247 247 247 148   0   0  66 247 247 247 247 247 247 247 247 247 247 247 247 247 115  33 247 247 247 247 247 247 247 198 181 181 247 247 247 247 115  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0 148 247 247 247 247 247 247 247 247 247 247 247 247 247   0 132 247 247 247 247 247 247 247 247 247 247 247 247 145   0 145 247 247 247 247 247 247 247 247 247 247 247 181  14   0   0  49 247 247 247 247 247 247 247  82   0   0   0 198 247 247 247 247 247 247 247 247 247 247 247 247 115   0 145 247 247 247 247 247 247 247 247 247 247 247 247 247 115  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0  46 247 247 247 247 247 247 247 247 247 247 247 247 247   0  30 247 247 247 247 247 247 247 247 247 247 247 247  30 112 247 247 247 247 247 247  96 247 247 247 247 247 247 145   0   0   0 214 247 247 247 247 247 231   0   0   0   0  96 247 247 247 247 247 247 247 247 247 247 247 247 115   0  30 148 247 247 247 247 247 247 247 247 247 247 247 247 115  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0   0 129 247 247 247 247 247 247 247 247 247 247 247 247   0   0  96 247 247 247 247 247 247 247 247 247 247  96  16 247 247 247 247 247 247 145   0 112 247 247 247 247 247 247  49   0   0 181 247 247 247 247 247 148   0   0   0   0   0 129 247 247 247 247 247 247 247 247 247 247 247 115   0   0  46 148 247 247 247 247 247 247 247 247 247 247 247  33  66 247 247 247 247 247 181   0 181 247 247 247 247 247  66
+  0   0   0 129 247 247 247 247 181 145 247 247 247 247 145   0   0   0  46 148 247 247 247 247 247 247 148  46   0   0 112 214 247 247 247 145  14   0   0 145 247 247 247 247 145   0   0  33 247 247 247 247 247 247  66   0   0   0   0   0  99 132 115 181 181 132 198 247 247 247 247 247  82   0   0   0   0  66 165 247 247 247 247 247 247 198 132  33   0   0 145 247 247 247 181  79   0  79 181 247 247 247 145   0
+  0   0   0   0  33 115 115  82   0   0   0   0   0   0   0   0   0   0   0   0  33  99 115 115  99  33   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 115 247 247 247 247 247 214   0   0   0   0   0  99 247 247 247 247 247 247 247 247 247 247 247 247  16   0   0   0   0   0   0   0  49  66  66  66   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 108 224 255 255 255 255 255 255 101 164 255 255 255 143 250 255 255 255 255 255 255 255 255 255 255 255  98 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165   0
+  0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 136 251 255 255 255 255 255 255 101 130 255 255 255 153 250 255 255 255 255 255 255 255 255 255 255 121  98 189 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165   0
+  0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 198 252 255 255 255 255 255 164 164 255 255 255 255 176 249 251 255 255 255 255 255 255 255 255 150  86 192 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165   0
+  0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 164 198 255 255 255 255 201 133 164 255 255 255 255 255 145 203 255 255 255 255 255 255 255 117  79 194 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165   0
+  0  66 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102  73  73 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102  47  70 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102  66   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+
diff --git a/templates/html/dynsections.js b/templates/html/dynsections.js
new file mode 100644
index 0000000..85e1836
--- /dev/null
+++ b/templates/html/dynsections.js
@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
diff --git a/templates/html/extsearch.js b/templates/html/extsearch.js
new file mode 100644
index 0000000..47d2595
--- /dev/null
+++ b/templates/html/extsearch.js
@@ -0,0 +1,129 @@
+function SearchBox(name, resultsPath, inFrame, label)
+{
+  this.searchLabel = label;
+  this.DOMSearchField = function()
+  {  return document.getElementById("MSearchField");  }
+  this.DOMSearchBox = function()
+  {  return document.getElementById("MSearchBox");  }
+  this.OnSearchFieldFocus = function(isActive)
+  {
+    if (isActive)
+    {
+      this.DOMSearchBox().className = 'MSearchBoxActive';
+      var searchField = this.DOMSearchField();
+      if (searchField.value == this.searchLabel)
+      {
+        searchField.value = '';
+      }
+    }
+    else
+    {
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
+      this.DOMSearchField().value   = this.searchLabel;
+    }
+  }
+}
+
+function trim(s) {
+  return s?s.replace(/^\s\s*/, '').replace(/\s\s*$/, ''):'';
+}
+
+function getURLParameter(name) {
+  return decodeURIComponent((new RegExp('[?|&]'+name+
+         '='+'([^&;]+?)(&|#|;|$)').exec(location.search)
+         ||[,""])[1].replace(/\+/g, '%20'))||null;
+}
+
+var entityMap = {
+  "&": "&amp;",
+  "<": "&lt;",
+  ">": "&gt;",
+  '"': '&quot;',
+  "'": '&#39;',
+  "/": '&#x2F;'
+};
+
+function escapeHtml(s) {
+  return String(s).replace(/[&<>"'\/]/g, function (s) {
+    return entityMap[s];
+  });
+}
+
+function searchFor(query,page,count) {
+  $.getJSON(serverUrl+"?cb=?",
+  {
+    n:count,
+    p:page,
+    q:query
+  },
+  function(data) {
+    var results = $('#searchresults');
+    $('#MSearchField').val(query);
+    if (data.hits>0) {
+      if (data.hits==1) {
+        results.html('<p>'+searchResultsText[1]+'</p>');
+      } else {
+        results.html('<p>'+searchResultsText[2].replace(/\$num/,data.hits)+'</p>');
+      }
+      var r='<table>';
+      $.each(data.items, function(i,item){
+        var prefix = tagMap[item.tag];
+        if (prefix) prefix+='/'; else prefix='';
+        r+='<tr class="searchresult">'+
+           '<td align="right">'+(data.first+i+1)+'.</td>'+
+           '<td>'+escapeHtml(item.type)+'&#160;'+
+                '<a href="'+escapeHtml(prefix+item.url)+
+                '">'+escapeHtml(item.name)+'</a>';
+        if (item.type=="source") {
+          var l=item.url.match(/[1-9][0-9]*$/);
+          if (l) r+=' at line '+parseInt(l[0]);
+        }
+        r+='</td>';
+        for (var i=0;i<item.fragments.length;i++)
+        {
+          r+='<tr><td></td><td>'+item.fragments[i]+'</td></tr>';
+        }
+        r+='</tr>';
+      });
+      r+='</table>';
+      if (data.pages>1) // write multi page navigation bar
+      {
+        r+='<div class="searchpages">';
+        if (data.page>0)
+        {
+          r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+(page-1).toString()+','+count.toString()+')">&laquo;</a></span>&nbsp;';
+        }
+        var firstPage = data.page-5;
+        var lastPage  = data.page+5;
+        if (firstPage<0)
+        {
+          lastPage-=firstPage;
+          firstPage=0;
+        }  
+        if (lastPage>data.pages)
+        {
+          lastPage=data.pages;
+        }
+        for(var i=firstPage;i<lastPage;i++)
+        {
+          if (i==data.page)
+          {
+            r+='<span class="pages"><b>'+(i+1).toString()+'</b></span>&nbsp;';
+          }
+          else
+          {
+            r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+i.toString()+','+count.toString()+')">'+(i+1).toString()+'</a></span>&nbsp;';
+          }
+        }
+        if (data.page+1<data.pages)
+        {
+          r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+(page+1).toString()+','+count.toString()+')">&raquo;</a></span>';
+        }
+        r+='</div>';
+      }
+      results.append(r);
+    } else {
+      results.html('<p>'+searchResultsText[0]+'</p>');
+    }
+  });
+}
diff --git a/templates/html/folderclosed.luma b/templates/html/folderclosed.luma
new file mode 100644
index 0000000..594b36b
--- /dev/null
+++ b/templates/html/folderclosed.luma
@@ -0,0 +1,49 @@
+# folder closed icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 197 155 155 155 155 196 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 155 191 191 191 192 155 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 168 144 180 180 181 180 145 145 146 145 146 146 146 146 145 167 255 255 255 255
+255 255 255 255 147 225 226 226 225 226 225 221 221 219 215 214 212 211 213 145 255 255 255 255
+255 255 255 255 147 212 211 211 210 211 210 205 206 205 201 201 199 196 201 145 255 255 255 255
+255 255 255 255 146 204 203 204 203 203 202 200 200 197 197 196 195 194 196 145 255 255 255 255
+255 255 255 255 146 202 200 201 201 200 199 198 198 195 194 194 193 192 194 145 255 255 255 255
+255 255 255 255 145 200 196 196 196 195 195 193 192 192 190 189 189 189 191 143 255 255 255 255
+255 255 255 255 143 192 191 190 190 189 189 188 186 187 186 185 185 185 187 142 255 255 255 255
+255 255 255 255 142 186 184 183 182 183 182 183 180 181 181 181 181 181 182 141 255 255 255 255
+255 255 255 255 138 177 175 176 176 177 177 176 175 174 175 175 175 174 176 138 255 255 255 255
+255 255 255 255 138 173 169 170 168 170 169 170 170 169 171 171 171 171 174 137 255 255 255 255
+255 255 255 255 138 166 163 163 162 162 162 162 162 162 164 163 163 163 166 137 255 255 255 255
+255 255 255 255 137 124 124 124 125 124 124 124 125 125 124 124 125 124 125 138 255 255 255 255
+255 255 255 255 231 231 228 225 222 220 218 216 214 215 217 219 221 224 227 226 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0 255 255 255 255 255 255   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
diff --git a/templates/html/folderopen.luma b/templates/html/folderopen.luma
new file mode 100644
index 0000000..0b89813
--- /dev/null
+++ b/templates/html/folderopen.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 228 195 193 190 187 218 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 195 215 221 225 225 178 176 176 175 176 178 180 255 255 255 255 255 255
+255 255 255 255 255 255 189 206 215 219 226 220 214 212 207 204 200 176 255 255 255 255 255 255
+255 255 255 255 168 154 153 153 152 152 151 149 150 150 149 147 146 145 145 167 255 255 255 255
+255 255 255 255 146 187 187 188 187 187 185 183 183 182 179 178 175 173 174 145 255 255 255 255
+255 255 255 255 146 180 182 182 181 181 179 178 176 174 173 171 169 170 168 144 255 255 255 255
+255 255 255 255 144 173 176 176 177 175 175 174 171 170 168 168 166 166 164 143 255 255 255 255
+255 255 255 255 142 168 170 171 170 170 169 168 166 166 165 163 163 164 162 142 255 255 255 255
+255 255 255 255 141 162 166 164 164 165 163 163 161 161 161 161 161 160 159 141 255 255 255 255
+255 255 255 255 138 157 159 159 158 158 158 157 157 157 157 156 157 157 155 138 255 255 255 255
+255 255 255 255 137 154 153 154 154 153 154 154 154 153 154 154 154 154 154 137 255 255 255 255
+255 255 255 255 137 154 154 154 154 154 154 154 153 154 154 153 153 153 154 137 255 255 255 255
+255 255 255 255 137 125 125 125 125 124 125 124 124 125 124 124 125 124 125 138 255 255 255 255
+255 255 255 255 212 209 204 199 193 190 186 183 180 181 185 188 192 197 202 203 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0 255 255 255 255 255 255   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0
+  0   0   0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255   0   0   0   0
+  0   0   0   0 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
diff --git a/templates/html/footer.html b/templates/html/footer.html
new file mode 100644
index 0000000..d2aa9e6
--- /dev/null
+++ b/templates/html/footer.html
@@ -0,0 +1,20 @@
+<!-- start footer part -->
+<!--BEGIN GENERATE_TREEVIEW-->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    $navpath
+    <li class="footer">$generatedby
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
+  </ul>
+</div>
+<!--END GENERATE_TREEVIEW-->
+<!--BEGIN !GENERATE_TREEVIEW-->
+<hr class="footer"/><address class="footer"><small>
+$generatedby &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
+</a> $doxygenversion
+</small></address>
+<!--END !GENERATE_TREEVIEW-->
+</body>
+</html>
diff --git a/templates/html/header.html b/templates/html/header.html
new file mode 100644
index 0000000..70305df
--- /dev/null
+++ b/templates/html/header.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen $doxygenversion"/>
+<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
+$treeview
+$search
+$mathjax
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+<!--BEGIN TITLEAREA-->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <!--BEGIN PROJECT_LOGO-->
+  <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
+  <!--END PROJECT_LOGO-->
+  <!--BEGIN PROJECT_NAME-->
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">$projectname
+   <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
+   </div>
+   <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
+  </td>
+  <!--END PROJECT_NAME-->
+  <!--BEGIN !PROJECT_NAME-->
+   <!--BEGIN PROJECT_BRIEF-->
+    <td style="padding-left: 0.5em;">
+    <div id="projectbrief">$projectbrief</div>
+    </td>
+   <!--END PROJECT_BRIEF-->
+  <!--END !PROJECT_NAME-->
+  <!--BEGIN DISABLE_INDEX-->
+   <!--BEGIN SEARCHENGINE-->
+   <td>$searchbox</td>
+   <!--END SEARCHENGINE-->
+  <!--END DISABLE_INDEX-->
+ </tr>
+ </tbody>
+</table>
+</div>
+<!--END TITLEAREA-->
+<!-- end header part -->
diff --git a/templates/html/htmlallmembers.tpl b/templates/html/htmlallmembers.tpl
new file mode 100644
index 0000000..98f88d6
--- /dev/null
+++ b/templates/html/htmlallmembers.tpl
@@ -0,0 +1,22 @@
+{% extend 'htmlbase.tpl' %}
+
+{% block title %}
+  <div class="headertitle"><div class="title">{{ compound.name }} {{ tr.memberList }}</div></div>
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<p>{{ tr.theListOfAllMembers }} <a class="el" href="{{ compound.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ compound.name }}</a>{{ tr.incInheritedMembers }}</p>
+<table class="directory">
+{% for mi in compound.allMembersList %}
+  <tr {% cycle 'class="even"' '' %}>
+  {# TODO: objective-C #}
+  <td>{% with obj=mi.member text=mi.ambiguityScope|append:mi.member.name %}
+      {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+  </td>
+  </tr>
+{% endfor %}
+</table>
+</div>
+{% endblock %}
diff --git a/templates/html/htmlannotated.tpl b/templates/html/htmlannotated.tpl
new file mode 100644
index 0000000..dd72ac9
--- /dev/null
+++ b/templates/html/htmlannotated.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.classListDescription }}
+</div>
+{% indexentry nav name=tr.classes file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=classTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlbase.tpl b/templates/html/htmlbase.tpl
new file mode 100644
index 0000000..d394b45
--- /dev/null
+++ b/templates/html/htmlbase.tpl
@@ -0,0 +1,216 @@
+{% block header %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen {{ doxygen.version }}"/>
+<title>{{ config.PROJECT_NAME }}: {{ page.title }}</title>
+<link href="{{ page.relPath }}tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}jquery.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}dynsections.js"></script>
+{% if config.GENERATE_TREEVIEW %}
+<link href="{{ page.relPath }}navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}resize.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}navtreedata.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+  $(window).load(resizeHeight);
+</script>
+{% endif %}
+{% if config.SEARCHENGINE %}
+<link href="{{ page.relPath }}search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}search/search.js"></script>
+  {% if config.SERVER_BASED_SEARCH %}
+<script type="text/javascript">
+  $(document).ready(function() {
+    if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }
+  });
+</script>
+<link rel="search" href="{{ page.relPath }}search-opensearch.php?v=opensearch.xml" type="application/opensearchdescription+xml" title="{{ config.PROJECT_NAME }}"/>
+  {% else %}
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+  {% endif %}
+{% endif %}
+{% if config.USE_MATHJAX %}
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],  {# TODO: support MATHJAX_EXTENSIONS #}
+    jax: ["input/TeX","output/{{ config.MATHJAX_FORMAT }}"],
+});
+{# TODO: support MATHJAX_CODEFILE #}
+</script>
+<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+{% endif %}
+<link href="{{ page.relPath }}{{ config.HTML_STYLESHEET|default:'doxygen.css' }}" rel="stylesheet" type="text/css" />
+{% if config.HTML_EXTRA_STYLESHEET %}
+<link href="{{ page.relPath }}{{ config.HTML_EXTRA_STYLESHEET }}" rel="stylesheet" type="text/css" />
+{% endif %}
+</head>
+<body>
+{% endblock %}
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+{% block titlearea %}
+{% if config.PROJECT_NAME or config.PROJECT_BRIEF or config.PROJECT_LOGO or config.DISABLE_INDEX and config.SEARCHENGINE %}
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ {% if config.PROJECT_LOGO %}
+  <td id="projectlogo"><img alt="Logo" src="{{ page.relPath }}{{ config.PROJECT_LOGO|stripPath }}"/></td>
+ {% endif %}
+  <td style="padding-left: 0.5em;">
+ {% if config.PROJECT_NAME %}
+   <div id="projectname">{{ config.PROJECT_NAME }}
+  {% if config.PROJECT_NUMBER %}
+    <span id="projectnumber">{{ config.PROJECT_NUMBER }}</span>
+  {% endif %}
+   </div>
+ {% endif %}
+ {% if config.PROJECT_BRIEF %}
+   <div id="projectbrief">{{ config.PROJECT_BRIEF }}</div>
+ {% endif %}
+  </td>
+ {% if config.DISABLE_INDEX and config.SEARCHENGINE %}{# search box is part of title area #}
+  <td>
+  {% if config.SERVER_BASED_SEARCH %}
+   <div id="MSearchBox" class="MSearchBoxInactive">
+    <div class="left">
+     <form id="FSearchBox" action="{{ page.relPath }}{% if config.EXTERNAL_SEARCH %}search{{ doxygen.htmlFileExtension }}{% else %}search.php{% endif %}" method="get">
+      <img id="MSearchSelect" src="{{ page.relPath }}search/mag.png" alt=""/>
+      <input type="text" id="MSearchField" name="query" value="{{ tr.search }}" size="20" accesskey="S"
+                onfocus="searchBox.OnSearchFieldFocus(true)"
+                onblur="searchBox.OnSearchFieldFocus(false)"/>
+     </form>
+    </div>
+    <div class="right"></div>
+   </div>
+  {% else %}{# !SERVER_BASED_SEARCH #}
+   <div id="MSearchBox" class="MSearchBoxInactive">
+    <span class="left">
+      <img id="MSearchSelect" src="{{ page.relPath }}search/mag_sel.png"
+           onmouseover="return searchBox.OnSearchSelectShow()"
+           onmouseout="return searchBox.OnSearchSelectHide()"
+           alt=""/>
+      <input type="text" id="MSearchField" value="{{ tr.search }}" accesskey="S"
+           onfocus="searchBox.OnSearchFieldFocus(true)"
+           onblur="searchBox.OnSearchFieldFocus(false)"
+           onkeyup="searchBox.OnSearchFieldChange(event)"/>
+    </span><span class="right">
+        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img
+           id="MSearchCloseImg" border="0" src="{{ page.relPath }}search/close.png"
+           alt=""/></a>
+    </span>
+   </div>
+  </td>
+  {% endif %}{# SERVER_BASED_SEARCH #}
+ {% endif %}{# DISABLE_INDEX and SEARCHENGINE #}
+ </tr>
+ </tbody>
+</table>
+</div>
+{% endif %}{# titlearea visible #}
+{% endblock %}
+<!-- end header part -->
+<!-- Generated by Doxygen {{ doxygen.version }} -->
+{% block search %}
+{% if config.SEARCHENGINE %}{# TODO: can't we move this to the header? #}
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "{{ page.relPath }}search",false,'{{ tr.search }}');
+</script>
+{% endif %}
+{% endblock %}
+
+{% block tabs %}
+{% if not config.DISABLE_INDEX %}
+{% include 'htmltabs.tpl' %}
+{% endif %}
+{% endblock %}
+
+{% block navpath %}
+{% endblock %}
+
+
+</div><!-- top -->
+{% block splitbar %}
+{% if config.GENERATE_TREEVIEW %}
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;"
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('{{ page.fileName }}{% if page_postfix %}{{ page_postfix }}{% endif %}{{ config.HTML_FILE_EXTENSION }}','{{ page.relPath }}');});
+</script>
+<div id="doc-content">
+{% endif %}
+{% endblock %}
+
+{% block searchInfo %}
+{% if config.SEARCHENGINE and not config.SERVER_BASED_SEARCH %}
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+{# TODO: get search categories dynamically, since we don't know them here #}
+</div>
+{% endif %}
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+{% endblock %}
+
+<div class="header">
+{% block title %}
+  <div class="headertitle"><div class="title">{{ page.title }}</div></div>
+{% endblock %}
+</div>
+
+{% block content %}
+{% endblock %}
+
+{% block endsplitbar %}
+{% if config.GENERATE_TREEVIEW %}
+</div><!-- content -->
+{% endif %}
+{% endblock %}
+
+{% block footer %}
+{% if config.GENERATE_TREEVIEW %}
+<div id="nav-path" class="navpath">{# id is needed for treeview function! #}
+  <ul>
+    {# navpath #}
+    <li class="footer">
+{% if config.HTML_TIMESTAMP %}
+{{ tr.generatedAt:doxygen.date,config.PROJECT_NAME }}
+{% else %}
+{{ tr.generatedby }}
+{% endif %}
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="{{ page.relPath }}doxygen.png" alt="doxygen"/></a> {{ doxygen.version }} </li>
+  </ul>
+</div>
+{% else %}
+  <hr class="footer"/><address class="footer"><small>
+{% if config.HTML_TIMESTAMP %}
+{{ tr.generatedAt:doxygen.date,config.PROJECT_NAME }}
+{% else %}
+{{ tr.generatedby }}
+{% endif %}
+&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="{{ page.relPath }}doxygen.png" alt="doxygen"/></a> 
+  {{ doxygen.version }}
+  </small></address>
+{% endif %}
+</body>
+</html>
+{% endblock %}
diff --git a/templates/html/htmlclass.tpl b/templates/html/htmlclass.tpl
new file mode 100644
index 0000000..bb734b6
--- /dev/null
+++ b/templates/html/htmlclass.tpl
@@ -0,0 +1,452 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for class {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.classes %}
+      <a href="#nested-classes">{{ tr.classes }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.allMembersList %}
+      {% if not first %} &#124; {% endif %}
+      <a href="{{ compound.allMembersFileName }}{{ config.HTML_FILE_EXTENSION }}#all-members-list">{{ tr.listOfAllMembers }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% with memberListInfo=compound.publicTypes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.unoIDLServices %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.unoIDLInterfaces %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.signals %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicStaticMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicStaticAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedTypes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedStaticMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedStaticAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageTypes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageStaticMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.packageStaticAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.properties %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.events %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateTypes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateStaticMethods %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateStaticAttributes %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.friends %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.related %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# includes #}
+  {% if compound.includeInfo %}
+    <div class="textblock">
+    {% with ii=compound.includeInfo %}
+      {% include 'htmlinclude.tpl' %}
+    {% endwith %}
+    </div>
+  {% endif %}
+{# inheritancegraph #}
+  {% if compound.hasInheritanceDiagram %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.inheritanceDiagramFor:compound.name }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.inheritanceDiagram }}
+    </div>
+    {# TODO: legend #}
+  {% else %}
+    {# textual inheritance list #}
+    {% if compound.inherits|length>0 %}
+      <p>
+      {% markers c in compound.inherits with tr.inheritsList:compound.inherits|length %}
+        {% with obj=c.class text=c.name %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      {% endmarkers %}
+      </p>
+    {% endif %}
+    {% if compound.inheritedBy|length>0 %}
+      <p>
+      {% markers c in compound.inheritedBy with tr.inheritedByList:compound.inheritedBy|length %}
+        {% with obj=c.class text=c.name %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      {% endmarkers %}
+      </p>
+    {% endif %}
+  {% endif %}
+{# collaborationgraph #}
+  {% if compound.hasCollaborationDiagram %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.collaborationDiagramFor:compound.name }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.collaborationDiagram }}
+    </div>
+  {% endif %}
+{# memberdecls #}
+  {# TODO: isSimple #}
+    {# nestedClasses #}
+      {% with list=compound.classes label='nested-classes' title=tr.classes local=1 %}
+        {% include 'htmldeclcomp.tpl' %}
+      {% endwith %}
+    {# publicTypes #}
+      {% with memberListInfo=compound.publicTypes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# services #}
+      {% with memberListInfo=compound.unoIDLServices %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# interfaces #}
+      {% with memberListInfo=compound.unoIDLInterfaces %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicSlots #}
+      {% with memberListInfo=compound.publicSlots %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# signals #}
+      {% with memberListInfo=compound.signals %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicMethods #}
+      {% with memberListInfo=compound.publicMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicStaticMethods #}
+      {% with memberListInfo=compound.publicStaticMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicAttributes #}
+      {% with memberListInfo=compound.publicAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# publicStaticAttributes #}
+      {% with memberListInfo=compound.publicStaticAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedtypes #}
+      {% with memberListInfo=compound.protectedTypes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedslots #}
+      {% with memberListInfo=compound.protectedSlots %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedmethods #}
+      {% with memberListInfo=compound.protectedMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedstaticmethods #}
+      {% with memberListInfo=compound.protectedStaticMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedattributes #}
+      {% with memberListInfo=compound.protectedAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# protectedstaticattributes #}
+      {% with memberListInfo=compound.protectedStaticAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packagetypes #}
+      {% with memberListInfo=compound.packageTypes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packagemethods #}
+      {% with memberListInfo=compound.packageMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packagestaticmethods #}
+      {% with memberListInfo=compound.packageStaticMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packageattributes #}
+      {% with memberListInfo=compound.packageAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# packagestaticattributes #}
+      {% with memberListInfo=compound.packageStaticAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# properties #}
+      {% with memberListInfo=compound.properties %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# events #}
+      {% with memberListInfo=compound.events %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privatetypes #}
+      {% with memberListInfo=compound.privateTypes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privateslots #}
+      {% with memberListInfo=compound.privateSlots %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privatemethods #}
+      {% with memberListInfo=compound.privateMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privatestaticmethods #}
+      {% with memberListInfo=compound.privateStaticMethods %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privateattributes #}
+      {% with memberListInfo=compound.privateAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# privatestaticattributes #}
+      {% with memberListInfo=compound.privateStaticAttributes %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# friends #}
+      {% with memberListInfo=compound.friends %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# related #}
+      {% with memberListInfo=compound.related %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endwith %}
+    {# member groups #}
+      {% if compound.memberGroups %}
+        {% for memberListInfo in compound.memberGroups %}
+          {% include 'htmlmemdecls.tpl' %}
+        {% endfor %}
+      {% endif %}
+    {# additionalInheritedMembers #}
+      {% if compound.additionalInheritedMembers %}
+        <table class="memberdecls">
+        <tr class="heading"><td colspan="2"><h2 class="groupheader">
+        <a name="inherited"></a>{{ tr.additionalInheritedMembers }}
+        </h2></td></tr>
+        {# write additional inherited members #}
+        {% for info in compound.additionalInheritedMembers %}
+          {% include 'htmlmeminherit.tpl' %}
+        {% endfor %}
+        </table>
+      {% endif %}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {% if compound.anchor %}
+    <a name="{{ compound.anchor }}" id="{{ compound.anchor }}"></a>
+  {% else %}
+    <a name="details" id="details"></a>
+  {% endif %}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# template specifier #}
+  {% if compound.language=='cpp' and compound.templateDecls %}
+    <h3>{% spaceless %}
+      {% for targList in compound.templateDecls %}
+        template&lt;
+        {% for targ in targList %}
+          {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+        {% endfor %}
+        &gt;<br/>
+      {% endfor %}
+    {% endspaceless %}
+    {{ compound.compoundType }}&#160;{{ compound.name }}
+    </h3>
+  {% endif %}
+  {# brief description #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {{ compound.details }}
+  </div>
+  {# type constraints #}
+    {% with obj=compound %}
+      {% include 'htmltypeconstraints.tpl' %}
+    {% endwith %}
+  {# examples #}
+    {% if compound.examples %}
+      <dl><dt><b>{{ tr.examples }}</b><dd>
+      {% markers obj in compound.examples with tr.exampleList:compound.examples|length %}
+        {% with text=obj.text %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      {% endmarkers %}
+      </dd></dl>
+    {% endif %}
+  {# source definition #}
+    {% if compound.sourceDef %}
+      {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+        {% with text=obj.text %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      {% endmarkers %}
+    {% endif %}
+{% endif %}
+{# member definitions #}
+  {# inline classes #}
+  {% if compound.classes %}
+    {# TODO write inlined simple classes: tr.classDocumentation / tr.typeDocumentation #}
+  {% endif %}
+  {# typedefs #}
+    {% with memberListInfo=compound.detailedTypedefs %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.detailedEnums %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# services #}
+    {% with memberListInfo=compound.detailedServices %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# interfaces #}
+    {% with memberListInfo=compound.detailedInterfaces %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# constructors #}
+    {% with memberListInfo=compound.detailedConstructors %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.detailedMethods %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# related #}
+    {% with memberListInfo=compound.detailedRelated %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.detailedVariables %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# properties #}
+    {% with memberListInfo=compound.detailedProperties %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# events #}
+    {% with memberListInfo=compound.detailedEvents %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+{# used files #}
+  {% if config.SHOW_USED_FILES %}
+    <hr/>
+    {{ compound.generatedFromFiles }}
+    <ul>
+    {% for file in compound.usedFiles %}
+      <li>{% if file.sourceFileName %}
+            <a class="el" href="{{ file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">
+          {% endif %}
+          {% if not file.sourceFileName and file.isLinkable %}
+            <a class="el" href="{{ file.fileName }}{{ config.HTML_FILE_EXTENSION }}">
+          {% endif %}
+          {% if config.FULL_PATH_NAMES %}
+            {{ file.name }}
+          {% else %}
+            {{ file.name|stripPath }}
+          {% endif %}
+          {% if file.sourceFileName or file.isLinkable %}
+            </a>
+          {% endif %}
+          {% if file.versionInfo %} {{ file.versionInfo }}{% endif %}
+      </li>
+    {% endfor %}
+    </ul>
+  {% endif %}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlclasses.tpl b/templates/html/htmlclasses.tpl
new file mode 100644
index 0000000..e932c26
--- /dev/null
+++ b/templates/html/htmlclasses.tpl
@@ -0,0 +1,21 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% indexentry nav name=tr.classIndex file=page.fileName anchor='' %}
+</div>
+<div class="classindex" style="column-count:{{ config.COLS_IN_ALPHA_INDEX }};-moz-column-count:{{ config.COLS_IN_ALPHA_INDEX }};-webkit-column-count:{{ config.COLS_IN_ALPHA_INDEX}}">
+<ul>
+{% with index=classIndex.list|alphaIndex:'name' %}
+  {% for section in index %}
+    <div class="ah">&#160;&#160;{{ section.letter }}&#160;&#160;</div>
+    {% for cls in section.items %}
+      <li>{{ cls.name }}</li>
+    {% endfor %}
+  {% endfor %}
+{% endwith %}
+</ul>
+</div><!-- classindex -->
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlclmembers.tpl b/templates/html/htmlclmembers.tpl
new file mode 100644
index 0000000..29d495e
--- /dev/null
+++ b/templates/html/htmlclmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+  {{ tr.classMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlclmembersindex.tpl b/templates/html/htmlclmembersindex.tpl
new file mode 100644
index 0000000..2f15c12
--- /dev/null
+++ b/templates/html/htmlclmembersindex.tpl
@@ -0,0 +1,26 @@
+{% with page=namespaceMembersIndex %}
+  {# all members #}
+  {% with list=namespaceMembersIndex.all section='' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# functions #}
+  {% with list=namespaceMembersIndex.functions section='_func' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# variables #}
+  {% with list=namespaceMembersIndex.variables section='_vars' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# typedefs #}
+  {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# enums #}
+  {% with list=namespaceMembersIndex.enums section='_enum' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# enumValues #}
+  {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlclmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endwith %}
diff --git a/templates/html/htmldeclcomp.tpl b/templates/html/htmldeclcomp.tpl
new file mode 100644
index 0000000..4bd99d2
--- /dev/null
+++ b/templates/html/htmldeclcomp.tpl
@@ -0,0 +1,32 @@
+{# inputs: list, label, title, local #}
+{% if list %}
+  <table class="memberdecls"><tr class="heading"><td colspan="2">
+  <h2 class="groupheader"><a name="{{ label }}"></a>{{ title }}</h2></td></tr>
+  {% for nc in list %}
+    <tr class="memitem:{{ nc.anchor }}">
+    <td class="memItemLeft" align="right" valign="top">{% if nc.compoundType %}{{ nc.compoundType }}&#160;{% endif %}</td>
+    <td class="memItemRight" valign="bottom">
+    {% if local %}
+      {% with obj=nc text=nc.bareName %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% else %}
+      {% with obj=nc text=nc.name %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endif %}
+    </td></tr>
+    {# brief description #}
+      {% if nc.brief %}
+        <tr class="memdesc:{{ nc.anchor }}"><td class="mdescLeft">&#160;</td><td class="mdescRight">
+        {{ nc.brief }}
+        {% if nc.hasDetails %}
+          {# TODO: link to group if member is grouped #}
+          <a href="{{ page.relPath }}{{ nc.fileName }}{{ config.HTML_FILE_EXTENSION}}{% if nc.anchor %}#{{ nc.anchor }}{% endif %}">{{ tr.more }}</a>
+        {% endif %}
+        <br/></td></tr>
+      {% endif %}
+    <tr class="separator:{{ nc.anchor}}"><td class="memSeparator" colspan="2">&#160;</td></tr>
+  {% endfor %}
+  </table>
+{% endif %}
diff --git a/templates/html/htmldir.tpl b/templates/html/htmldir.tpl
new file mode 100644
index 0000000..7417f7b
--- /dev/null
+++ b/templates/html/htmldir.tpl
@@ -0,0 +1,78 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for directory {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+  {% if compound.navigationPath %}
+    <div id="nav-path" class="navpath">
+      <ul>
+      {% for obj in compound.navigationPath %}
+        <li class="navelem">
+          {% with text=obj.text %}
+            {% include 'htmlobjlink.tpl' %}
+          {% endwith %}
+        </li>
+      {% endfor %}
+      </ul>
+    </div>
+  {% endif %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.dirs %}
+      <a href="#subdirs">{{ tr.directories }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.files %}
+      {% if not first %} &#124; {% endif %}
+      <a href="#files">{{ tr.files }}</a>
+      {% set first=False %}
+    {% endif %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# dir graph #}
+{# TODO #}
+{# member declarations #}
+  {# directories #}
+    {% with list=compound.dirs label='subdirs' title=tr.directories local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# files #}
+    {% with list=compound.files, label='files' title=tr.files local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {# anchor #}
+  <a name="details" id="details"></a>
+  {# header #}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# brief #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {# details #}
+  {{ compound.details }}
+  </div>
+{% endif %}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmldirtree.tpl b/templates/html/htmldirtree.tpl
new file mode 100644
index 0000000..2fa266a
--- /dev/null
+++ b/templates/html/htmldirtree.tpl
@@ -0,0 +1,46 @@
+{# input tree with maxDepth, preferredDepth, and nodes #}
+<div class="directory">
+{# level selection #}
+{% if tree.maxDepth > 1 %}
+  <div class="levels">[{{ tr.detailLevel }}
+  {% range i from 1 to tree.maxDepth %}
+  <span onclick="javascript:toggleLevel({{ i }});">{{ i }}</span>
+  {% endrange %}
+  ]</div>
+{% endif %}
+{# the table with entries #}
+<table class="directory">
+{% recursetree tree.tree %}
+  {% indexentry nav name=node.name file=node.fileName anchor=node.anchor %}
+  {% spaceless %}
+  <tr id="row_{{ node.id }}" class="{% cycle 'even' 'odd' %}"{%if node.level>tree.preferredDepth %} style="display:none;"{% endif %}>
+    <td class="entry">
+  {% if node.is_leaf_node %}
+    <span style="width:{{ (node.level+1)*16 }}px;display:inline-block;">&#160;</span>
+  {% else %}
+    <span style="width:{{ (node.level)*16 }}px;display:inline-block;">&#160;</span>
+    <span id="arr_{{ node.id }}" class="arrow" onclick="toggleFolder('{{ node.id}}')">
+       {%if node.level+1<tree.preferredDepth %}&#9660;{% else %}&#9658;{% endif %}
+    </span>
+  {% endif %}
+  {% if node.namespace %}
+    <span class="icona"><span class="icon">N</span></span>
+  {% elif node.class %}
+    <span class="icona"><span class="icon">C</span></span>
+  {% elif node.dir %}
+    <span id="img_{{ node.id }}" class="iconf{%if node.level+1<tree.preferredDepth %}open{% else %}closed{% endif %}" onclick="toggleFolder('{{ node.id }}')">&#160;</span>
+  {% elif node.file %}
+    <span class="icondoc"></span>
+  {% endif %}
+  {% with obj=node text=node.name %}
+    {% include 'htmlobjlink.tpl' %}
+  {% endwith %}
+    </td><td class="desc">{{ node.brief }}</td>
+  </tr>
+  {% endspaceless %}
+  {% opensubindex nav %}
+  {{ children }}
+  {% closesubindex nav %}
+{% endrecursetree %}
+</table>
+</div><!-- directory -->
diff --git a/templates/html/htmldyncontents.tpl b/templates/html/htmldyncontents.tpl
new file mode 100644
index 0000000..37411c3
--- /dev/null
+++ b/templates/html/htmldyncontents.tpl
@@ -0,0 +1,7 @@
+{# input: obj which should have dynSectionId attribute #}
+{% if config.HTML_DYNAMIC_SECTIONS %}
+  <div id="dynsection-{{ obj.dynSectionId }}-summary" class="dynsummary" style="display:block;"></div>
+  <div class="dyncontent" id="dynsection-{{ obj.dynSectionId }}-content" style="display:none;">
+{% else %}
+  <div class="dyncontent">
+{% endif %}
diff --git a/templates/html/htmldynheader.tpl b/templates/html/htmldynheader.tpl
new file mode 100644
index 0000000..405c053
--- /dev/null
+++ b/templates/html/htmldynheader.tpl
@@ -0,0 +1,7 @@
+{# input: obj which should have dynSectionId and relPath attributes #}
+{% if config.HTML_DYNAMIC_SECTIONS %}
+<div id="dynsection-{{ obj.dynSectionId }}" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><img
+     id="dynsection-{{ obj.dynSectionId }}-trigger" src="{{ obj.relPath }}closed.png" alt="+"/>
+{% else %}
+<div class="dynheader">
+{% endif %}
diff --git a/templates/html/htmlfile.tpl b/templates/html/htmlfile.tpl
new file mode 100644
index 0000000..67af096
--- /dev/null
+++ b/templates/html/htmlfile.tpl
@@ -0,0 +1,256 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for file {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.classes %}
+      <a href="#nested-classes">{{ tr.classes }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.namespaces %}
+      {% if not first %} &#124; {% endif %}
+      <a href="#namespaces">{{ tr.namespaces }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.constantgroups %}
+      {% if not first %} &#124; {% endif %}
+      <a href="#constantgroups">{{ tr.constantgroups }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% with memberListInfo=compound.macros %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# includes #}
+  {% if compound.includeList %}
+    <div class="textblock">
+    {% for ii in compound.includeList %}
+      {% include 'htmlinclude.tpl' %}
+      <br/>
+    {% endfor %}
+    </div>
+  {% endif %}
+{# include graph #}
+  {% if compound.hasIncludeGraph %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.includeDependencyGraph:compound.name }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.includeGraph }}
+    </div>
+  {% endif %}
+{# included by graph #}
+  {% if compound.hasIncludedByGraph %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.includedByDependencyGraph }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.includedByGraph }}
+    </div>
+  {% endif %}
+{# source link #}
+  {% if compound.hasSourceFile %}
+   <p><a href="{{ page.relPath }}{{ compound.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoSourceCode }}</a></p>
+  {% endif %}
+{# member declarations #}
+  {# classes #}
+    {% with list=compound.classes label='nested-classes' title=tr.classes local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# namespaces #}
+    {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# constantgroups #}
+    {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# defines #}
+    {% with memberListInfo=compound.macros %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# membergroups #}
+    {% if compound.memberGroups %}
+      {% for memberListInfo in compound.memberGroups %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endfor %}
+    {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {# anchor #}
+  <a name="details" id="details"></a>
+  {# header #}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# brief #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {# details #}
+  {{ compound.details }}
+  {# source definition #}
+  {% if compound.sourceDef %}
+    {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+      {% with text=obj.text %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endmarkers %}
+  {% endif %}
+  </div>
+{% endif %}
+{# member definitions #}
+  {# inline classes #}
+    {% if compound.inlineClasses %}
+      <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+      {% for class in compound.inlineClasses %}
+        {# write anchor #}
+        <a class="anchor" id="{{ class.anchor }}"></a>
+        <div class="memitem">
+        <div class="memproto">
+        <table class="memname">
+          <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+        </table>
+        </div>
+        <div class="memdoc">
+        <div class="textblock">
+        {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+          {# template specifier #}
+          {% if class.language=='cpp' and class.templateDecls %}
+            <h3>{% spaceless %}
+              {% for targList in class.templateDecls %}
+                template&lt;
+                {% for targ in targList %}
+                  {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+                {% endfor %}
+                &gt;<br/>
+              {% endfor %}
+            {% endspaceless %}
+            {{ class.classType }}&#160;{{ class.name }}
+            </h3>
+          {% endif %}
+          {# brief description #}
+          {% if class.brief and config.REPEAT_BRIEF %}
+            <p>{{ class.brief }}</p>
+          {% endif %}
+          {# detailed docs #}
+          {{ class.details }}
+          {# source def #}
+          {% if class.sourceDef %}
+            {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+          {% endif %}
+        </div><!-- textblock -->
+        {# table with fields #}
+        <table class="fieldtable">
+          <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+          {% for member in class.members %}
+            <tr><td class="fieldtype">
+                   <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+                </td>
+                <td class="fieldname">
+                   {{ member.name }}
+                   {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+                   {{ member.bitfields }}
+                </td>
+                <td class="fielddoc">
+                  {% if member.brief and not member.details %}{# only brief #}
+                    {{ member.brief }}
+                  {% else %} {# only details or both #}
+                    {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+                    {{ member.details }}
+                  {% endif %}
+                </td>
+            </tr>
+          {% endfor %}
+        </table>
+        </div><!-- memdoc -->
+        </div><!-- memitem -->
+      {% endfor %}
+    {% endif %}
+  {# defines #}
+    {% with memberListInfo=compound.detailedMacros %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.detailedTypedefs %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.detailedEnums %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.detailedFunctions %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.detailedVariables %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlfiles.tpl b/templates/html/htmlfiles.tpl
new file mode 100644
index 0000000..1871d4d
--- /dev/null
+++ b/templates/html/htmlfiles.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.fileListDescription }}
+</div>
+{% indexentry nav name=tr.fileList file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=fileTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlflmembers.tpl b/templates/html/htmlflmembers.tpl
new file mode 100644
index 0000000..e2c781a
--- /dev/null
+++ b/templates/html/htmlflmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+  {{ tr.fileMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlinclude.tpl b/templates/html/htmlinclude.tpl
new file mode 100644
index 0000000..24bfac6
--- /dev/null
+++ b/templates/html/htmlinclude.tpl
@@ -0,0 +1,27 @@
+{# input: ii with attributes (file,name,isImport,isLocal), compound with attribute language #}
+{% spaceless %}
+  {% if ii.file or ii.name %}
+    <tt>
+    {% if compound.language=='java' or compound.language=='idl' %}
+      import&#160;
+    {%else %}
+      {% if ii.isImport %}
+      #import&#160;
+      {% else %}
+      #include&#160;
+      {% endif %}
+    {%endif %}
+    {% if ii.isLocal %}"{% else %}&lt;{% endif %}
+      {% if ii.name %}
+        {% if ii.file %}
+          <a class="el" href="{{ ii.file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ ii.name }}</a>
+        {% else %}
+          {{ ii.name }}
+        {% endif %}
+      {% else %}
+       <a class="el" href="{{ ii.file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ ii.file.name }}</a>
+      {% endif %}
+    {% if ii.isLocal %}"{% else %}&gt;{% endif %}
+    </tt>
+  {% endif %}
+{% endspaceless %}
diff --git a/templates/html/htmlindexpages.tpl b/templates/html/htmlindexpages.tpl
new file mode 100644
index 0000000..65bf1b6
--- /dev/null
+++ b/templates/html/htmlindexpages.tpl
@@ -0,0 +1,19 @@
+{# inputs: list, section #}
+{% with letter='' %}
+  {# create full index page #}
+  {% create page.fileName|append:section|append:config.HTML_FILE_EXTENSION from template %}
+{% endwith %}
+{% if list|length>maxItemsForMultiPageList %}
+  {% opensubindex nav %}
+  {% with index=list|alphaIndex:'name' %}
+    {% for sect in index %}
+      {% with letter=sect.letter %}
+         {% set page_postfix=section|append:'_'|append:sect.label %}
+         {% indexentry nav name=letter file=page.fileName|append:page_postfix anchor='' %}
+         {# create index pages for all globals starting with a specific letter #}
+         {% create page.fileName|append:page_postfix|append:config.HTML_FILE_EXTENSION from template %}
+      {% endwith %}
+    {% endfor %}
+  {% endwith %}
+  {% closesubindex nav %}
+{% endif %}
diff --git a/templates/html/htmljsnavindex.tpl b/templates/html/htmljsnavindex.tpl
new file mode 100644
index 0000000..07a9efc
--- /dev/null
+++ b/templates/html/htmljsnavindex.tpl
@@ -0,0 +1,7 @@
+{# input idx, entries #}
+var NAVTREEINDEX{{ idx }} =
+{
+{% for entry in entries %}
+  "{{ entry.file }}{{ config.HTML_FILE_EXTENSION }}{% if entry.anchor %}#{{ entry.anchor }}{% endif %}":[{% for e in entry.path %}{% if not forloop.first %}{{ e.index }}{% if not forloop.last%},{% endif %}{% endif %}{% endfor %}]{% if not forloop.last %},{%endif %}
+{% endfor %}
+};
diff --git a/templates/html/htmljsnavtree.tpl b/templates/html/htmljsnavtree.tpl
new file mode 100644
index 0000000..a7ad88e
--- /dev/null
+++ b/templates/html/htmljsnavtree.tpl
@@ -0,0 +1,20 @@
+var NAVTREE =
+[
+{% recursetree index.nav %}
+  [ "{{ node.name }}", {% if node.file %}"{{ node.file }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}"{% else %}null{% endif %},{% if not node.is_leaf_node %} [
+     {{ children }}
+  ]{% else %} null{% endif %} ]{% if not node.last %},{% endif %}
+{% endrecursetree %}
+];
+
+var NAVTREEINDEX =
+[
+{% with navlist=index.nav|flatten|listsort:config.HTML_FILE_EXTENSION|prepend:'{{file}}'|append:'#{{anchor}}' navpages=navlist|paginate:250 %}
+  {% for page in navpages %}
+    "{{ page.0.file }}{{ config.HTML_FILE_EXTENSION }}{% if page.0.anchor %}#{{ page.0.anchor }}{% endif %}"{% if not forloop.last %},{%endif %}
+    {% with idx=forloop.counter0 entries=page %}
+      {% create forloop.counter0|prepend:'navtreeindex'|append:'.js' from 'htmljsnavindex.tpl' %}
+    {% endwith %}
+  {% endfor %}
+{% endwith %}
+];
diff --git a/templates/html/htmllayout.tpl b/templates/html/htmllayout.tpl
new file mode 100644
index 0000000..ff99fa5
--- /dev/null
+++ b/templates/html/htmllayout.tpl
@@ -0,0 +1,232 @@
+{% msg %}----- Start generating HTML output for from template ----{% endmsg %}
+
+{# ---- copy fixed resources to the output ----- #}
+
+{% resource 'doxygen.css' %}
+{% resource 'tabs.css' %}
+{% resource 'jquery.js' %}
+{% resource 'dynsections.js %}
+{% resource 'tab_a.lum' %}
+{% resource 'tab_b.lum' %}
+{% resource 'tab_h.lum' %}
+{% resource 'tab_s.lum' %}
+{% resource 'tab_h.lum' %}
+{% resource 'bc_s.luma' %}
+{% resource 'doxygen.luma' %}
+{% resource 'closed.luma' %}
+{% resource 'open.luma' %}
+{% resource 'bdwn.luma' %}
+{% resource 'sync_on.luma' %}
+{% resource 'sync_off.luma' %}
+
+{# navigation #}
+{% resource 'nav_f.lum' %}
+{% resource 'nav_g.png' %}
+{% resource 'nav_h.lum' %}
+{% resource 'navtree.css' %}
+
+{# general search resources #}
+{% resource 'search_l.png' as 'search/search_l.png' %}
+{% resource 'search_m.png' as 'search/search_m.png' %}
+{% resource 'search_r.png' as 'search/search_r.png' %}
+{% if config.DISABLE_INDEX %}
+  {% resource 'search_noidx.css' as 'search/search.css'   %}
+{% else %}
+  {% resource 'search.css'       as 'search/search.css'   %}
+{% endif %}
+
+{% if config.SERVER_BASED_SEARCH %}
+  {# server side search resources #}
+  {% resource 'mag.png'     as 'search/mag.png'     %}
+  {% resource 'extsearch.js as 'search/search.js'   %}
+  {% resource 'search_functions.php'  as 'search/search_functions.php'  %}
+  {% resource 'search_opensearch.php' as 'search/search_opensearch.php' %}
+{% else %}
+  {# client side search resources #}
+  {% resource 'mag_sel.png' as 'search/mag_sel.png' %}
+  {% resource 'close.png'   as 'search/close.png'   %}
+  {% resource 'search.js'   as 'search/search.js'   %}
+{% endif %}
+
+{# interactive SVGs #}
+{% resource 'svgpan.js' %}
+
+{# -------------------------------------------------- #}
+
+{# global constants #}
+{% set maxItemsForFlatList=2 %}
+{% set maxItemsForMultiPageList=4 %}
+
+{# global variable #}
+{% set page_postfix='' %}
+
+{# open the global navigation index #}
+{% indexentry nav name=tr.mainPage file='index' anchor='' %}
+{% opensubindex nav %}
+
+{# ----------- HTML DOCUMENTATION PAGES ------------ #}
+
+{# write main page documentation #}
+{% if mainPage %}
+  {% with page=mainPage compound=mainPage %}
+    {% create mainPage.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpage.tpl' %}
+  {% endwith %}
+{% endif %}
+
+{# write namespace documentation pages #}
+{% for compound in namespaceList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlnamespace.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# write class documentation pages #}
+{% for compound in classList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlclass.tpl' %}
+    {% if compound.allMembersList and not config.OPTIMIZE_OUTPUT_FOR_C %}
+      {% create compound.allMembersFileName|append:config.HTML_FILE_EXTENSION from 'htmlallmembers.tpl' %}
+    {% endif %}
+  {% endwith %}
+{% endfor %}
+
+{# write the file sources #}
+{% for compound in fileList %}
+  {% with page=compound %}
+    {# TODO: to deal with clang optimisation, we need to write the sources in a different order! #}
+    {# TODO: now writing sources has the side-effect of creating cross-references. Need to split that up! #}
+    {% if compound.hasSourceFile %}
+      {% create compound.sourceFileName|append:config.HTML_FILE_EXTENSION from 'htmlsource.tpl' %}
+    {% endif %}
+  {% endwith %}
+{% endfor %}
+
+{# write file documentation pages #}
+{% for compound in fileList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlfile.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# write related page documentation #}
+{% for compound in pageList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpage.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# write module documentation #}
+{% for compound in moduleList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlmodule.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# ----------- INDEXES ------------ #}
+
+{# --- related pages --- #}
+{% if pageTree.tree %}
+  {% with page=pageTree %}
+    {% create pageTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpages.tpl' %}
+  {% endwith %}
+{% endif %}
+
+{# --- modules --- #}
+{% if moduleTree.tree %}
+  {% with page=moduleTree %}
+    {% create moduleTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlmodules.tpl' %}
+  {% endwith %}
+{% endif %}
+
+{# --- namespaces --- #}
+{% indexentry nav name=tr.namespaces file='' anchor='' %}
+{% opensubindex nav %}
+
+  {% if namespaceTree.tree %}
+    {% with page=namespaceTree %}
+      {% create namespaceTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlnamespaces.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# write symbol indices for namespace members #}
+  {% if namespaceMembersIndex.all %}
+    {% with page=namespaceMembersIndex scope='namespace' template='htmlnsmembers.tpl' %}
+      {% indexentry nav name=tr.namespaceMembers file=page.fileName anchor='' %}
+      {% include 'htmlmembersindex.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+{% closesubindex nav %}
+
+{# --- classes --- #}
+{% indexentry nav name=tr.classes file='' anchor='' %}
+{% opensubindex nav %}
+
+  {# write the annotated class list #}
+  {% if classTree.tree %}
+    {% with page=classTree %}
+      {% create classTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlannotated.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# write class index #}
+  {% if classIndex.list %}
+    {% with page=classIndex %}
+      {% create classIndex.fileName|append:config.HTML_FILE_EXTENSION from 'htmlclasses.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# TODO: write the class inheritance hierarchy #}
+  {% if classHierarchy.tree %}
+    {% with page=classHierarchy %}
+      {% create classHierarchy.fileName|append:config.HTML_FILE_EXTENSION from 'hierarchy.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# write symbol indices for class members #}
+  {% if classMembersIndex.all %}
+    {% with page=classMembersIndex scope='class' template='htmlclmembers.tpl' %}
+      {% indexentry nav name=tr.classMembers file=page.fileName anchor='' %}
+      {% include 'htmlmembersindex.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+{% closesubindex nav %}
+
+{# --- files --- #}
+{% indexentry nav name=tr.files file='' anchor='' %}
+{% opensubindex nav %}
+
+  {# write the directory/file hierarchy #}
+  {% if fileTree.tree %}
+    {% with page=fileTree %}
+      {% create fileTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlfiles.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+  {# write symbol indices for global namespace #}
+  {% if globalsIndex.all %}
+    {% with page=globalsIndex scope='file' template='htmlflmembers.tpl' %}
+      {% indexentry nav name=tr.fileMembers file=page.fileName anchor='' %}
+      {% include 'htmlmembersindex.tpl' %}
+    {% endwith %}
+  {% endif %}
+
+{% closesubindex nav %}
+
+{# write directory documentation pages #}
+{% for compound in dirList %}
+  {% with page=compound %}
+    {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmldir.tpl' %}
+  {% endwith %}
+{% endfor %}
+
+{# close the global navigation index #}
+{% closesubindex nav %}
+
+{# write the navigation tree data #}
+{% if config.GENERATE_TREEVIEW %}
+  {% create 'navtreedata.js' from 'htmljsnavtree.tpl' %}
+{% endif %}
+
+{% msg %}----- End generating HTML output for from template ----{% endmsg %}
diff --git a/templates/html/htmlmemberindex.tpl b/templates/html/htmlmemberindex.tpl
new file mode 100644
index 0000000..216dd31
--- /dev/null
+++ b/templates/html/htmlmemberindex.tpl
@@ -0,0 +1,37 @@
+{# input: list #}
+{% set singleList=(list|length<=maxItemsForFlatList) or (list|length>maxItemsForMultiPageList) %}
+{% if singleList %}
+<ul>
+{% endif %}
+{% with index=list|alphaIndex:'name' %}
+  {% for section in index %}
+    {% if not singleList or letter=='' or section.letter==letter %}
+      {% if not singleList %}
+      <a class="anchor" id="{{ section.label }}"></a><h3>- {{ section.letter }} -</h3>
+      <ul>
+      {% endif %}
+      {% for nameList in section.items|groupBy:'name' %}
+        {% spaceless %}
+          {% for item in nameList|listsort:'{{item.file.name}}' %}
+            {% if forloop.first %}
+              <li>{{ item.name }}{% if (item.isFunction or item.isSignal or item.isSlot) and not item.isObjCMethod %}(){% endif %}&#160;:&#160;
+            {% endif %}
+            {% with obj=item scope=item|get:scope text=scope.name %}
+               {% include 'htmlobjlink.tpl' %}
+            {% endwith %}
+            {% if not forloop.last %},&#160;
+            {% else %}
+              </li>
+            {% endif %}
+          {% endfor %}
+        {% endspaceless %}
+      {% endfor %}
+      {% if not singleList %}
+      </ul>
+      {% endif %}
+    {% endif %}
+  {% endfor %}
+{% endwith %}
+{% if singleList %}
+</ul>
+{% endif %}
diff --git a/templates/html/htmlmembersindex.tpl b/templates/html/htmlmembersindex.tpl
new file mode 100644
index 0000000..ef891df
--- /dev/null
+++ b/templates/html/htmlmembersindex.tpl
@@ -0,0 +1,81 @@
+{# input: page #}
+{% opensubindex nav %}
+{# all members #}
+{% with list=page.all section='' %}
+  {% indexentry nav name=tr.all file=page.fileName|append:page_postfix anchor='' %}
+  {% include 'htmlindexpages.tpl' %}
+{% endwith %}
+{# functions #}
+{% if page.functions %}
+  {% set page_postfix='_func' %}
+  {% indexentry nav name=tr.functions file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.functions section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# variables #}
+{% if page.variables %}
+  {% set page_postfix='_vars' %}
+  {% indexentry nav name=tr.variables file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.variables section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# typedefs #}
+{% if page.typedefs %}
+  {% set page_postfix='_type' %}
+  {% indexentry nav name=tr.typedefs file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.typedefs section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# enums #}
+{% if page.enums %}
+  {% set page_postfix='_enum' %}
+  {% indexentry nav name=tr.enums file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.enums section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# enumValues #}
+{% if page.enumValues %}
+  {% set page_postfix='_eval' %}
+  {% indexentry nav name=tr.enumValues file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.enumValues section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# macros #}
+{% if page.macros %}
+  {% set page_postfix='_defs' %}
+  {% indexentry nav name=tr.macros file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.macros section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# properties #}
+{% if page.properties %}
+  {% set page_postfix='_prop' %}
+  {% indexentry nav name=tr.properties file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.properties section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# events #}
+{% if page.events %}
+  {% set page_postfix='_evnt' %}
+  {% indexentry nav name=tr.events file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.events section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{# related #}
+{% if page.related %}
+  {% set page_postfix='_rela' %}
+  {% indexentry nav name=tr.related file=page.fileName|append:page_postfix anchor='' %}
+  {% with list=page.related section=page_postfix %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endif %}
+{% set page_postfix='' %}
+{% closesubindex nav %}
diff --git a/templates/html/htmlmembertabs.tpl b/templates/html/htmlmembertabs.tpl
new file mode 100644
index 0000000..93341a6
--- /dev/null
+++ b/templates/html/htmlmembertabs.tpl
@@ -0,0 +1,48 @@
+{# inputs page, list #}
+{% if not config.DISABLE_INDEX %}
+{# third row of tabs #}
+<div id="navrow3" class="tabs2">
+  <ul class="tablist">
+    <li {% if section=='' %}class="current"{% endif %}><a href="{{ page.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.all }}</a></li>
+{% if page.functions %}
+    <li {% if section=='_func' %}class="current"{% endif %}><a href="{{page.fileName}}_func{{ config.HTML_FILE_EXTENSION }}">{{ tr.functions }}</a></li>
+{% endif %}
+{% if page.variables %}
+    <li {% if section=='_vars' %}class="current"{% endif %}><a href="{{page.fileName}}_vars{{ config.HTML_FILE_EXTENSION }}">{{ tr.variables }}</a></li>
+{% endif %}
+{% if page.typedefs %}
+    <li {% if section=='_type' %}class="current"{% endif %}><a href="{{page.fileName}}_type{{ config.HTML_FILE_EXTENSION }}">{{ tr.typedefs }}</a></li>
+{% endif %}
+{% if page.enums %}
+    <li {% if section=='_enum' %}class="current"{% endif %}><a href="{{page.fileName}}_enum{{ config.HTML_FILE_EXTENSION }}">{{ tr.enums }}</a></li>
+{% endif %}
+{% if page.enumValues %}
+    <li {% if section=='_eval' %}class="current"{% endif %}><a href="{{page.fileName}}_eval{{ config.HTML_FILE_EXTENSION }}">{{ tr.enumValues }}</a></li>
+{% endif %}
+{% if page.macros %}
+    <li {% if section=='_defs' %}class="current"{% endif %}><a href="{{page.fileName}}_defs{{ config.HTML_FILE_EXTENSION }}">{{ tr.macros }}</a></li>
+{% endif %}
+{% if page.properties %}
+    <li {% if section=='_prop' %}class="current"{% endif %}><a href="{{page.fileName}}_prop{{ config.HTML_FILE_EXTENSION }}">{{ tr.properties }}</a></li>
+{% endif %}
+{% if page.events %}
+    <li {% if section=='_evnt' %}class="current"{% endif %}><a href="{{page.fileName}}_evnt{{ config.HTML_FILE_EXTENSION }}">{{ tr.events }}</a></li>
+{% endif %}
+{% if page.related %}
+    <li {% if section=='_rela' %}class="current"{% endif %}><a href="{{page.fileName}}_rela{{ config.HTML_FILE_EXTENSION }}">{{ tr.related }}</a></li>
+{% endif %}
+  </ul>
+</div>
+{# forth row of tabs #}
+{% if list|length>maxItemsForMultiPageList %}
+<div id="navrow4" class="tabs3">
+  <ul class="tablist">
+    {% with index=list|alphaIndex:'name' %}
+      {% for sect in index %}
+        <li {% if sect.letter==letter %}class="current"{% endif %}><a href="{{page.fileName}}{{section}}_{{sect.label}}{{ config.HTML_FILE_EXTENSION }}">{{ sect.letter }}</a></li>
+      {% endfor %}
+    {% endwith %}
+  </ul>
+</div>
+{% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemdecl.tpl b/templates/html/htmlmemdecl.tpl
new file mode 100644
index 0000000..6af75ce
--- /dev/null
+++ b/templates/html/htmlmemdecl.tpl
@@ -0,0 +1,214 @@
+{# inputs: member, inheritId=<string> anonymousNestingLevel=<int> #}
+{% if not member.isEnumValue %}
+  {# start member declaration #}
+  <tr class="memitem:{{ member.anchor}}{% if inheritId %} inherit {{ inheritId }}{% endif %}">
+  {% if member.isEnumeration %}
+    {% if anonymousNestingLevel>0 %}
+      <td class="memItemLeft">
+    {% else %}
+      <td class="memItemLeft" align="right" valign="top">
+    {% endif %}
+    {# write optional anchor #}
+      {% if not member.hasDetails %}
+        <a class="anchor" id="{% if member.anonymousMember %}{{ member.anonymousMember.anchor}}{% else %}{{ member.anchor }}{% endif %}"></a>
+      {% endif %}
+    {# write optional indent #}
+    {% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+    enum&#160;</td><td class="memTemplItemRight" valign="bottom">
+    {# write name #}
+    {% if not member.isAnonymous %}
+      {% with obj=member text=member.name %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endif %}
+    {% if member.enumBaseType %} : {{ member.enumBaseType }}{% endif %}
+    {% if member.enumValues|length>0 and config.ENUM_VALUES_PER_LINE>0 %}
+      {
+        {% for enumVal in member.enumValues %}
+          {% if member.enumValues|length>config.ENUM_VALUES_PER_LINE and forloop.counter0|divisibleby:config.ENUM_VALUES_PER_LINE %}
+            <br/>&#160;&#160;
+          {% endif %}
+          {% spaceless %}
+            {% with obj=enumVal text=enumVal.name %}
+              {% include 'htmlobjlink.tpl' %}
+              {% if enumVal.hasOneLineInitializer %}
+                {{ member.initializer }}
+              {% endif %}
+              {% if not forloop.last %},{% endif %}
+            {% endwith %}
+          {% endspaceless %}
+        {% endfor %}
+        {% if member.enumValues|length>config.ENUM_VALUES_PER_LINE %}
+        <br/>
+        {% endif %}
+      }
+    {% endif %}
+  {% else %}
+    {% if anonymousNestingLevel>0 or member.anonymousType %}
+      <td class="memItemLeft">
+    {% else %}
+      {% if member.templateArgs %}
+        <td class="memTemplParams" colspan="2">
+      {% else %}
+        <td class="memItemLeft" align="right" valign="top">
+      {% endif %}
+    {% endif %}
+    {# write optional anchor #}
+      {% if not member.hasDetails %}
+        <a class="anchor" id="{% if member.anonymousMember %}{{ member.anonymousMember.anchor}}{% else %}{{ member.anchor }}{% endif %}"></a>
+      {% endif %}
+    {# write optional indent #}
+    {% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+    {# write template list #}
+      {% if member.templateArgs and member.language=='cpp' %}
+        {% spaceless %}
+          template&lt;
+          {% for targ in member.templateArgs %}
+            {{ targ.type }} {{ targ.name }}{% if targ.defVal %} = {{ targ.defval }}{% endif %}{% if not forloop.last %}, {% endif %}
+          {% endfor %}
+        {% endspaceless %} &gt;
+        </td></tr><tr class="memitem:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="memTemplItemLeft" align="right" valign="top">
+      {% endif %}
+    {# write type #}
+      {% if member.anonymousType %}
+        {% with ctx=member.anonymousType anonymousNestingLevel=anonymousNestingLevel|add:1 %}
+          {{ ctx.compoundType }}
+          {% if ctx.bareName %}
+            &#160;<b>{{ ctx.bareName }}</b> {# TODO: associated documentation is lost! #}
+          {% endif %}
+          {</td></tr>
+          {# recursively write members that can appear inside the anonymous class/struct #}
+          {% with memberListInfo=ctx.publicTypes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.publicMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.publicStaticMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.publicAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.publicStaticAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedTypes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedStaticMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.protectedStaticAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateTypes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateStaticMethods %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+          {% with memberListInfo=ctx.privateStaticAttributes %}
+            {% include 'htmlmemlist.tpl' %}
+          {% endwith %}
+        {% endwith %}
+        <tr class="memitem:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}">
+        <td class="memItemLeft" valign="top">{% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+        }
+      {% else %}
+        {% if member.isObjCMethod %}
+          {% if member.isStatic %}+&#160;{% else %}-&#160;{% endif %}
+        {% else %}
+          {{ member.declType }}
+        {% endif %}
+      {% endif %}
+      {% spaceless %}
+        &#160;
+        {% if anonymousNestingLevel>0 %}
+           &#160;&#160;
+        {% else %}
+          </td><td class="{% if member.templateArgs %}memTemplItemRight{% else %}memItemRight{% endif %}" valign="bottom">
+        {% endif %}
+      {% endspaceless %}
+    {# write name #}
+      {% if not member.isAnonymous %}
+        {% if member.anonymousMember %}
+          {% with obj=member.anonymousMember text=member.anonymousMember.name %}
+            {% include 'htmlobjlink.tpl' %}
+          {% endwith %}
+        {% else %}
+          {% with obj=member text=member.name %}
+            {% include 'htmlobjlink.tpl' %}
+          {% endwith %}
+        {% endif %}
+      {% endif %}
+    {# write arguments #}
+      {% if not member.isObjCMethod %}
+        {{ member.declArgs }}
+      {% endif %}
+    {# write exceptions #}
+      {% if member.exception %}
+        {{ member.exception }}
+      {% endif %}
+    {# write bitfield #}
+      {% if member.bitfields %}
+        {{ member.bitfields }}
+      {% endif %}
+    {# write one-line initializer #}
+      {% if member.hasOneLineInitializer %}
+        {% if member.isDefine %}&#160;&#160;&#160;{% endif %}
+        {{ member.initializer }}
+      {% endif %}
+    {# write template alias #}
+      {% if member.templateAlias %}
+        {{ member.templateAlias }}
+      {% endif %}
+    {# write obj-c implementation #}
+      {% if member.isObjCMethod or member.isObjCProperty %}
+        {% if member.isImplementation %}
+          <code> [implementation]</code>
+        {% endif %}
+      {% endif %}
+    {# write getter/setter property #}
+      {% if member.isProperty and member.propertyAttrs|length>0 %}
+        <code> [
+        {% for attr in member.propertyAttrs %}
+          {{ attr }}{% if not forloop.last %},{% endif %}
+        {% endfor %}
+        ]</code>
+      {% endif %}
+    {# write event methods #}
+      {% if member.isEvent and member.eventAttrs|length>0 %}
+        <code> [
+        {% for attr in member.eventAttrs %}
+          {{ attr }}{% if not forloop.last %},{% endif %}
+        {% endfor %}
+        ]</code>
+      {% endif %}
+    {# end member declaration #}
+  {% endif %} {# member.isEnumeration #}
+  </td></tr>
+  {# brief description #}
+    {% if member.brief %}
+      <tr class="memdesc:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="mdescLeft">&#160;</td><td class="mdescRight">
+      {{ member.brief }}
+      {% if member.hasDetails %}
+        {# TODO: link to group if member is grouped #}
+        <a href="#{{ member.anchor }}">{{ tr.more }}</a>
+      {% endif %}
+      <br/></td></tr>
+    {% endif %}
+  <tr class="separator:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="memSeparator" colspan="2">&#160;</td></tr>
+{% endif %} {# not member.isEnumValue #}
diff --git a/templates/html/htmlmemdecls.tpl b/templates/html/htmlmemdecls.tpl
new file mode 100644
index 0000000..846c8f3
--- /dev/null
+++ b/templates/html/htmlmemdecls.tpl
@@ -0,0 +1,38 @@
+{# inputs: memberListInfo or memberGroupInfo #}
+{% if memberListInfo %}
+  {% if memberListInfo.members|length>0 or memberListInfo.memberGroups|length>0 %}
+    <table class="memberdecls">
+    {# section header #}
+      <tr class="heading"><td colspan="2"><h2 class="groupheader">{{ memberListInfo.title }}<a name="{{ memberListInfo.anchor }}"></a></h2></td></tr>
+    {% if memberListInfo.subtitle %}
+      <tr><td class="ititle" colspan="2">{{ memberListInfo.subtitle }}</td></tr>
+    {% endif %}
+    {# normal members #}
+    {% with inheritId='' anonymousNestingLevel=0 %}
+      {% for member in memberListInfo.members %}
+        {% include 'htmlmemdecl.tpl' %}
+      {% endfor %}
+    {% endwith %}
+    {# grouped members #}
+    {% for memgroup in memberListInfo.memberGroups %}
+      {% with memberListInfo=memgroup inheritId='' anonymousNestingLevel=0 %}
+        {% if memberListInfo.title!='[NOHEADER]' %}
+          <tr><td colspan="2"><div class="groupHeader">{{ memberListInfo.title }}</div></td></tr>
+          {% if memberListInfo.docs %}
+            <tr><td colspan="2"><div class="groupText">{{ memberListInfo.docs }}</div></td></tr>
+          {% endif %}
+        {% endif %}
+        {% for member in memberListInfo.members %}
+          {% include 'htmlmemdecl.tpl' %}
+        {% endfor %}
+      {% endwith %}
+    {% endfor %}
+    {# inherited members #}
+    {% if memberListInfo.inherited %}
+      {% for info in memberListInfo.inherited %}
+        {% include 'htmlmeminherit.tpl' %}
+      {% endfor %}
+    {% endif %}
+    </table>
+  {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemdef.tpl b/templates/html/htmlmemdef.tpl
new file mode 100644
index 0000000..c469f1f
--- /dev/null
+++ b/templates/html/htmlmemdef.tpl
@@ -0,0 +1,284 @@
+{# inputs: memberListInfo #}
+{% if memberListInfo %}
+  {% if memberListInfo.members|length>0 %}
+    <h2 class="groupheader">{{ memberListInfo.title }}</h2>
+    {% for member in memberListInfo.members %}
+      {% if member.hasDetails %}  {# TODO: not the same as isDetailedSectionVisible! #}
+        {# TODO: handle enum + anonymous members #}
+        <a class="anchor" id="{{ member.anchor }}"></a> {# TODO: for namespace members written in a file we need to prepend file_ #}
+        <div class="memitem">
+        <div class="memproto">
+        {# write template declarations #}
+        {% if member.language=='cpp' and member.templateDecls|length>0 %}
+          {% for targList in member.templateDecls %}
+            {% spaceless %}
+              <div class="memtemplate">
+              template&lt;
+              {% for targ in targList %}
+                {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+              {% endfor %}
+              &gt;
+              </div>
+            {% endspaceless %}
+          {% endfor %}
+        {% endif %}
+        {# start of labels if present #}
+        {% if member.labels|length>0 %}
+          <table class="mlabels"><tr><td class="mlabels-left">
+        {% endif %}
+        <table class="memname">
+          <tr><td class="memname">
+            {{ member.definition }}
+            {# write argument list #}
+            {# TODO: TCL #}
+            {% if member.hasParameterList %}
+              {% if member.isObjCMethod %}
+                </td><td></td>
+                {% for arg in member.parameters %}
+                  {% if not forloop.first %}
+                    <tr><td class="paramkey">{{ arg.namePart }}</td><td></td>
+                  {% endif %}
+                  <td class="paramtype">({{ arg.type }})&#160;</td><td class="paramname">
+                  {% if arg.name or arg.type=='...' %}
+                    <em>{% if not arg.name %}{{ arg.type }}{% else %}{{ arg.name }}{% endif %}</em>
+                  {% endif %}
+		  {% if not forloop.last %}
+                    ,</td></tr>
+                  {% endif %}
+                {% endfor %}
+              {% else %}
+                </td><td>(</td>
+                {% for arg in member.parameters %}
+                  {% if member.isDefine %}
+                    {% if not forloop.first %}
+                      <tr><td class="paramkey"></td><td></td>
+                    {% endif %}
+                    <td class="paramtype"></td><td class="paramname">
+		    {% spaceless %}
+                      {% if arg.type %}
+                        <em>{{ arg.type }}</em>
+                      {% endif %}
+                      {% if not forloop.last %}
+                        ,</td></tr>
+                      {% endif %}
+		    {% endspaceless %}
+                  {% else %} {# normal function/method #}
+                    {% if forloop.first %}
+                      <td class="paramtype">
+                    {% endif %}
+                    {% if arg.attrib %}{{ arg.attrib }} {% endif %}
+                    {% if arg.type!='...' %}
+                       {{ arg.type }}
+                    {% endif %}
+                    &#160;</td><td class="paramname">
+                    {% if arg.name or arg.type=='...' %}
+                      <em>{% if not arg.name %}{{ arg.type }}{% else %}{{ arg.name }}{% endif %}</em>
+                    {% endif %}
+                    {{ arg.array }}
+                    {% if arg.defVal %} = {{ arg.defVal }}{% endif %}
+		    {% if not forloop.last %}
+                      ,</td></tr><tr><td class="paramkey"></td><td></td><td class="paramtype">
+                    {% endif %}
+                  {% endif %}
+                {% endfor %}
+		{% if member.parameters|length==0 %}
+                  <td class="paramname">
+                {% endif %}
+                {% if member.parameters|length<2 %}
+                  </td><td>)</td><td>
+                {% else %}
+                  &#160;</td></tr>
+                  <tr><td></td><td>)</td><td></td><td>
+                {% endif %}
+                {{ member.extraTypeChars }}
+                {% if member.hasConstQualifier %} const {% endif %}
+                {% if member.hasVolatileQualifier %} volatile {% endif %}
+                {{ member.trailingReturnType }}
+              {% endif %}
+            {% endif %}
+            {# one line initializer #}
+            {% if member.hasOneLineInitializer %}
+              {% if member.isDefine %}&#160;&#160;&#160;{% endif %}
+              {{ member.initializer }}
+            {% endif %}
+            {# exception list #}
+            {% if member.exception %}
+              {# TODO: special exception rendering for UNO IDL... #}
+              {{ member.exception }}
+            {% endif %}
+          </td></tr>
+        </table>
+        {# end of labels if present #}
+        {% if member.labels|length>0 %}
+          </td><td class="mlabels-right">{% spaceless %}
+          {% for label in member.labels %}
+            <span class="mlabel">{{ label }}</span>
+          {% endfor %}{% endspaceless %}
+          </td></tr></table>
+        {% endif %}
+        </div>
+        <div class="memdoc">
+        {# TODO: write group include #}
+        {# multi-line initializer #}
+          {% if member.hasMultiLineInitializer %}
+            <b>{% if member.isDefine %}{{ tr.defineValue }}{% else %}{{ tr.initialValue }}{% endif %}</b>
+            <div class="fragment">{{ member.initializerAsCode }}</div>
+          {% endif %}
+        {# brief description #}
+          {% if member.brief and config.REPEAT_BRIEF and config.BRIEF_MEMBER_DESC %}
+            <p>{{ member.brief }}</p>
+          {% endif %}
+        {# detailed description #}
+          {# TODO: VHDL #}
+          {{ member.details }}
+        {# inbody description #}
+          {{ member.inbodyDocs }}
+        {# argument list #}
+          {{ member.paramDocs }}
+        {# enum values #}
+          {% if member.isEnumeration and member.enumValues|length>0 %}
+            <table class="fieldtable">
+            <tr><th colspan="2">{{ tr.enumValues }}</th></tr>
+            {% for enumVal in member.enumValues %}
+              <tr><td class="fieldname"><em><a class="anchor" id="{{ enumVal.anchor}}"></a>{{ enumVal.name }}</em>&#160;</td>
+                  <td class="fielddoc">{{ enumVal.brief }}{{ enumVal.details }}</td>
+              </tr>
+            {% endfor %}
+            </table>
+          {% endif %}
+        {# reimplements #}
+          {% if member.reimplements %}
+            <p>
+            {% markers mem in member.reimplements with tr.reimplements %}
+              {% with obj=mem text=mem.class.name %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+          {% if member.implements %}
+            <p>
+            {% markers mem in member.implements with tr.implements %}
+              {% with obj=mem text=mem.class.name %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+        {# reimplementedBy #}
+          {% if member.reimplementedBy %}
+            <p>
+            {% markers mem in member.reimplementedBy with tr.reimplementedBy:member.reimplementedBy|length %}
+              {% with obj=mem text=mem.class.name %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+          {% if member.implementedBy %}
+            <p>
+            {% markers mem in member.implementedBy with tr.implementedBy:member.implementedBy|length %}
+              {% with obj=mem text=mem.class.name %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+        {# category relation #}
+
+          {# TODO #}
+
+        {# examples #}
+          {% if member.examples %}
+            <dl><dt><b>{{ tr.examples }}</b><dd>
+            {% markers obj in member.examples with tr.exampleList:member.examples|length %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+            </dd></dl>
+          {% endif %}
+        {# type constraints #}
+          {% with obj=member %}
+            {% include 'htmltypeconstraints.tpl' %}
+          {% endwith %}
+        {# source def #}
+          {% if member.sourceDef %}
+            {% markers obj in member.sourceDef with tr.definedAtLineInSourceFile %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+          {% endif %}
+        {# source refs #}
+          {% if member.sourceRefs|length>0 %}
+            <p>
+            {% markers mem in member.sourceRefs with tr.sourceRefs:member.sourceRefs|length %}
+              {% if mem.sourceDef and config.REFERENCES_LINK_SOURCE %}
+                {% with obj=mem.sourceDef.0 text=mem.name|append:mem.functionQualifier %}
+                  {% include 'htmlobjlink.tpl' %}
+                {% endwith %}
+              {% else %}
+                {% with obj=mem text=mem.name|append:mem.functionQualifier %}
+                  {% include 'htmlobjlink.tpl' %}
+                {% endwith %}
+              {% endif %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+        {# source refs by #}
+          {% if member.sourceRefBys|length>0%}
+            <p>
+            {% markers mem in member.sourceRefBys with tr.sourceRefBys:member.sourceRefBys|length %}
+              {% if mem.sourceDef and config.REFERENCES_LINK_SOURCE %}
+                {% with obj=mem.sourceDef.0 text=mem.name|append:mem.functionQualifier %}
+                  {% include 'htmlobjlink.tpl' %}
+                {% endwith %}
+              {% else %}
+                {% with obj=mem text=mem.name|append:mem.functionQualifier %}
+                  {% include 'htmlobjlink.tpl' %}
+                {% endwith %}
+              {% endif %}
+            {% endmarkers %}
+            </p>
+          {% endif %}
+        {# inline code #}
+          {% if member.hasSources and config.INLINE_SOURCES %}
+            <div class="fragment">
+            {{ member.sourceCode }}
+            </div>
+          {% endif %}
+        {# call graph #}
+          {% if member.hasCallGraph %}
+             {% with obj=member %}
+               {% include 'htmldynheader.tpl' %}
+             {% endwith %}
+               {{ tr.callGraph }}
+             </div>
+             {% with obj=member %}
+               {% include 'htmldyncontents.tpl' %}
+             {% endwith %}
+               {{ member.callGraph }}
+             </div>
+          {% endif %}
+        {# caller graph #}
+          {% if member.hasCallerGraph %}
+             {% with obj=member %}
+               {% include 'htmldynheader.tpl' %}
+             {% endwith %}
+               {{ tr.callerGraph }}
+             </div>
+             {% with obj=member %}
+               {% include 'htmldyncontents.tpl' %}
+             {% endwith %}
+               {{ member.callerGraph }}
+             </div>
+          {% endif %}
+        </div>
+        </div>
+      {% endif %}
+    {% endfor %} {# for each member #}
+    {# TODO: write member group docs #}
+  {% endif %}
+{% endif %}
+
diff --git a/templates/html/htmlmeminherit.tpl b/templates/html/htmlmeminherit.tpl
new file mode 100644
index 0000000..830bf10
--- /dev/null
+++ b/templates/html/htmlmeminherit.tpl
@@ -0,0 +1,20 @@
+{# input: info (with .id .inheritedFrom and .members) #}
+<tr class="inherit_header {{ info.id }}">
+<td colspan="2" onclick="javascript:toggleInherit('{{ info.id }}')">
+<img src="{{ page.relPath }}closed.png" alt="-"/>&#160;
+  {% markers mark in info.inheritedFrom with tr.inheritedFrom %}
+    {% if markers.id==0 %} {# the title mark #}
+      {{ mark }}
+    {% endif %}
+    {% if markers.id==1 %} {# the class link mark #}
+      {% with obj=mark text=mark.name %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endif %}
+  {% endmarkers %}
+</td></tr>
+{% with inheritId=info.id anonymousNestingLevel=0 %}
+  {% for member in info.members %}
+    {% include 'htmlmemdecl.tpl' %}
+  {% endfor %}
+{% endwith %}
diff --git a/templates/html/htmlmemlist.tpl b/templates/html/htmlmemlist.tpl
new file mode 100644
index 0000000..30b4789
--- /dev/null
+++ b/templates/html/htmlmemlist.tpl
@@ -0,0 +1,15 @@
+{# input: memberListInfo #}
+{% if memberListInfo %}
+  {% if memberListInfo.members|length>0 or memberListInfo.memberGroups|length>0 %}
+    {% for member in memberListInfo.members %}
+      {% include 'htmlmemdecl.tpl' %}
+    {% endfor %}
+    {% for memgroup in memberListInfo.memberGroups %}
+      {% with memberListInfo=memgroup inheritId='' %}
+        {% for member in memberListInfo.members %}
+          {% include 'htmlmemdecl.tpl' %}
+        {% endfor %}
+      {% endwith %}
+    {% endfor %}
+  {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemsummary.tpl b/templates/html/htmlmemsummary.tpl
new file mode 100644
index 0000000..6b7481e
--- /dev/null
+++ b/templates/html/htmlmemsummary.tpl
@@ -0,0 +1,7 @@
+{% if memberListInfo %}
+  {% if memberListInfo.members|length>0 %}
+    {% if not first %} &#124; {% endif %}
+      <a href="#{{ memberListInfo.anchor }}">{{ memberListInfo.title }}</a>
+    {% set first=False %}
+  {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmodule.tpl b/templates/html/htmlmodule.tpl
new file mode 100644
index 0000000..ff97b2c
--- /dev/null
+++ b/templates/html/htmlmodule.tpl
@@ -0,0 +1,310 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for module {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.modules %}
+      <a href="#modules">{{ tr.modules }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.dirs %}
+      <a href="#dirs">{{ tr.dirs }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.files %}
+      <a href="#files">{{ tr.files }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.classes %}
+      <a href="#classes">{{ tr.classes }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.namespaces %}
+      {% if not first %} &#124; {% endif %}
+      <a href="#namespaces">{{ tr.namespaces }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.constantgroups %}
+      {% if not first %} &#124; {% endif %}
+      <a href="#constantgroups">{{ tr.constantgroups }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% with memberListInfo=compound.macros %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.enumvalues %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.signals %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.publicSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.protectedSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.privateSlots %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.events %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.properties %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.friends %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# group graph #}
+  {% if compound.hasGroupGraph %}
+    {% with obj=compound %}
+      {% include 'htmldynheader.tpl' %}
+    {% endwith %}
+      {{ tr.collaborationDiagramFor:compound.name }}
+    </div>
+    {% with obj=compound %}
+      {% include 'htmldyncontents.tpl' %}
+    {% endwith %}
+      {{ compound.groupGraph }}
+    </div>
+  {% endif %}
+{# member declarations #}
+  {# modules #}
+    {% with list=compound.modules label='modules' title=tr.modules local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# dirs #}
+    {% with list=compound.dirs, label='dirs' title=tr.directories local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# files #}
+    {% with list=compound.files, label='files' title=tr.files local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# namespaces #}
+    {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# classes #}
+    {% with list=compound.classes label='classes' title=tr.classes local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# constantgroups #}
+    {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# defines #}
+    {% with memberListInfo=compound.macros %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# enum values #}
+    {% with memberListInfo=compound.enumvalues %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# signals #}
+    {% with memberListInfo=compound.signals %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# public slots #}
+    {% with memberListInfo=compound.publicSlots %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# protected slots #}
+    {% with memberListInfo=compound.protectedSlots %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# private slots #}
+    {% with memberListInfo=compound.privateSlots %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# private events #}
+    {% with memberListInfo=compound.events %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# private properties #}
+    {% with memberListInfo=compound.properties %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# private friends #}
+    {% with memberListInfo=compound.friends %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# membergroups #}
+    {% if compound.memberGroups %}
+      {% for memberListInfo in compound.memberGroups %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endfor %}
+    {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {# anchor #}
+  <a name="details" id="details"></a>
+  {# header #}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# brief #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {# details #}
+  {{ compound.details }}
+  {# source definition #}
+  {% if compound.sourceDef %}
+    {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+      {% with text=obj.text %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endmarkers %}
+  {% endif %}
+  </div>
+{% endif %}
+{# member definitions #}
+  {# inline classes #}
+    {% if compound.inlineClasses %}
+      <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+      {% for class in compound.inlineClasses %}
+        {# write anchor #}
+        <a class="anchor" id="{{ class.anchor }}"></a>
+        <div class="memitem">
+        <div class="memproto">
+        <table class="memname">
+          <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+        </table>
+        </div>
+        <div class="memdoc">
+        <div class="textblock">
+        {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+          {# template specifier #}
+          {% if class.language=='cpp' and class.templateDecls %}
+            <h3>{% spaceless %}
+              {% for targList in class.templateDecls %}
+                template&lt;
+                {% for targ in targList %}
+                  {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+                {% endfor %}
+                &gt;<br/>
+              {% endfor %}
+            {% endspaceless %}
+            {{ class.classType }}&#160;{{ class.name }}
+            </h3>
+          {% endif %}
+          {# brief description #}
+          {% if class.brief and config.REPEAT_BRIEF %}
+            <p>{{ class.brief }}</p>
+          {% endif %}
+          {# detailed docs #}
+          {{ class.details }}
+          {# source def #}
+          {% if class.sourceDef %}
+            {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+          {% endif %}
+        </div><!-- textblock -->
+        {# table with fields #}
+        <table class="fieldtable">
+          <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+          {% for member in class.members %}
+            <tr><td class="fieldtype">
+                   <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+                </td>
+                <td class="fieldname">
+                   {{ member.name }}
+                   {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+                   {{ member.bitfields }}
+                </td>
+                <td class="fielddoc">
+                  {% if member.brief and not member.details %}{# only brief #}
+                    {{ member.brief }}
+                  {% else %} {# only details or both #}
+                    {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+                    {{ member.details }}
+                  {% endif %}
+                </td>
+            </tr>
+          {% endfor %}
+        </table>
+        </div><!-- memdoc -->
+        </div><!-- memitem -->
+      {% endfor %}
+    {% endif %}
+  {# defines #}
+    {% with memberListInfo=compound.detailedMacros %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.detailedTypedefs %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.detailedEnums %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.detailedFunctions %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.detailedVariables %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlmodules.tpl b/templates/html/htmlmodules.tpl
new file mode 100644
index 0000000..f19c225
--- /dev/null
+++ b/templates/html/htmlmodules.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.modulesDescription }}
+</div>
+{% indexentry nav name=tr.modules file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=moduleTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnamespace.tpl b/templates/html/htmlnamespace.tpl
new file mode 100644
index 0000000..e21ba9d
--- /dev/null
+++ b/templates/html/htmlnamespace.tpl
@@ -0,0 +1,206 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for namespace {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="summary">
+  {% with first=True %}
+    {% if compound.classes %}
+      <a href="#nested-classes">{{ tr.classes }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.namespaces %}
+      {% if not first %} &#124; {% endif %}
+      <a href="#namespaces">{{ tr.namespaces }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% if compound.constantgroups %}
+      {% if not first %} &#124; {% endif %}
+      <a href="#constantgroups">{{ tr.constantgroups }}</a>
+      {% set first=False %}
+    {% endif %}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemsummary.tpl' %}
+    {% endwith %}
+  {% endwith %}
+  </div>
+  {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+  {% if compound.brief %}
+    {{ compound.brief }}
+    {% if compound.hasDetails %}
+      <a href="#details">{{ tr.more }}</a>
+    {% endif %}
+  {% endif %}
+{# member declarations #}
+  {# classes #}
+    {% with list=compound.classes label='nested-classes' title=tr.classes local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# namespaces #}
+    {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# constantgroups #}
+    {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+      {% include 'htmldeclcomp.tpl' %}
+    {% endwith %}
+  {# typedefs #}
+    {% with memberListInfo=compound.typedefs %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.enums %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.functions %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.variables %}
+      {% include 'htmlmemdecls.tpl' %}
+    {% endwith %}
+  {# membergroups #}
+    {% if compound.memberGroups %}
+      {% for memberListInfo in compound.memberGroups %}
+        {% include 'htmlmemdecls.tpl' %}
+      {% endfor %}
+    {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+  {# anchor #}
+  <a name="details" id="details"></a>
+  {# header #}
+  <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+  <div class="textblock">
+  {# brief #}
+  {% if compound.brief and config.REPEAT_BRIEF %}
+    <p>
+    {{ compound.brief }}
+    </p>
+  {% endif %}
+  {# details #}
+  {{ compound.details }}
+  {# source definition #}
+  {% if compound.sourceDef %}
+    {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+      {% with text=obj.text %}
+        {% include 'htmlobjlink.tpl' %}
+      {% endwith %}
+    {% endmarkers %}
+  {% endif %}
+  </div>
+{% endif %}
+{# member definitions #}
+  {# inline classes #}
+    {% if compound.inlineClasses %}
+      <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+      {% for class in compound.inlineClasses %}
+        {# write anchor #}
+        <a class="anchor" id="{{ class.anchor }}"></a>
+        <div class="memitem">
+        <div class="memproto">
+        <table class="memname">
+          <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+        </table>
+        </div>
+        <div class="memdoc">
+        <div class="textblock">
+        {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+          {# template specifier #}
+          {% if class.language=='cpp' and class.templateDecls %}
+            <h3>{% spaceless %}
+              {% for targList in class.templateDecls %}
+                template&lt;
+                {% for targ in targList %}
+                  {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+                {% endfor %}
+                &gt;<br/>
+              {% endfor %}
+            {% endspaceless %}
+            {{ class.classType }}&#160;{{ class.name }}
+            </h3>
+          {% endif %}
+          {# brief description #}
+          {% if class.brief and config.REPEAT_BRIEF %}
+            <p>{{ class.brief }}</p>
+          {% endif %}
+          {# detailed docs #}
+          {{ class.details }}
+          {# source def #}
+          {% if class.sourceDef %}
+            {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+              {% with text=obj.text %}
+                {% include 'htmlobjlink.tpl' %}
+              {% endwith %}
+            {% endmarkers %}
+          {% endif %}
+        </div><!-- textblock -->
+        {# table with fields #}
+        <table class="fieldtable">
+          <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+          {% for member in class.members %}
+            <tr><td class="fieldtype">
+                   <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+                </td>
+                <td class="fieldname">
+                   {{ member.name }}
+                   {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+                   {{ member.bitfields }}
+                </td>
+                <td class="fielddoc">
+                  {% if member.brief and not member.details %}{# only brief #}
+                    {{ member.brief }}
+                  {% else %} {# only details or both #}
+                    {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+                    {{ member.details }}
+                  {% endif %}
+                </td>
+            </tr>
+          {% endfor %}
+        </table>
+        </div><!-- memdoc -->
+        </div><!-- memitem -->
+      {% endfor %}
+    {% endif %}
+  {# typedefs #}
+    {% with memberListInfo=compound.detailedTypedefs %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# enums #}
+    {% with memberListInfo=compound.detailedEnums %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# functions #}
+    {% with memberListInfo=compound.detailedFunctions %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+  {# variables #}
+    {% with memberListInfo=compound.detailedVariables %}
+      {% include 'htmlmemdef.tpl' %}
+    {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlnamespaces.tpl b/templates/html/htmlnamespaces.tpl
new file mode 100644
index 0000000..4767d13
--- /dev/null
+++ b/templates/html/htmlnamespaces.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.namespaceListDescription }}
+</div>
+{% indexentry nav name=tr.namespaceList file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=namespaceTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnavpath.tpl b/templates/html/htmlnavpath.tpl
new file mode 100644
index 0000000..5df06e1
--- /dev/null
+++ b/templates/html/htmlnavpath.tpl
@@ -0,0 +1,14 @@
+{# input: navpath which is a list of links #}
+{% if navpath %}
+  <div id="nav-path" class="navpath">
+    <ul>
+    {% for obj in navpath %}
+      <li class="navelem">
+        {% with text=obj.text %}
+          {% include 'htmlobjlink.tpl' %}
+        {% endwith %}
+      </li>
+    {% endfor %}
+    </ul>
+  </div>
+{% endif %}
diff --git a/templates/html/htmlnavtree.tpl b/templates/html/htmlnavtree.tpl
new file mode 100644
index 0000000..8da89a2
--- /dev/null
+++ b/templates/html/htmlnavtree.tpl
@@ -0,0 +1,22 @@
+var NAVTREE =
+[
+  [ "{% if mainPage.title %}mainPage.title|jsstring{% else %}{{ tr.mainPage }}{% endif %}",
+    "index{{ config.HTML_FILE_EXTENSION }}",
+  ]
+];
+
+var NAVTREEINDEX =
+[
+{# write first entry of each sub index #}
+{% for entries in navTree.subindices %}
+  "{{ entries[0].url }}"{% if not forloop.last %},{% endif %}
+{% endfor %}
+  ]
+];
+
+{# write all sub indices #}
+{% for entries in navTree.subindices %}
+  {% with idx=forloop.counter0 %}
+    {% create idx|prepend:'navtreeindex'|append:'.js' from htmlnavindex.tpl' %}
+  {% endwith %}
+{% endfor %}
diff --git a/templates/html/htmlnsmembers.tpl b/templates/html/htmlnsmembers.tpl
new file mode 100644
index 0000000..3f4c0bd
--- /dev/null
+++ b/templates/html/htmlnsmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl' %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+  {{ tr.namespaceMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnsmembersindex.tpl b/templates/html/htmlnsmembersindex.tpl
new file mode 100644
index 0000000..dc3bfd4
--- /dev/null
+++ b/templates/html/htmlnsmembersindex.tpl
@@ -0,0 +1,26 @@
+{% with page=namespaceMembersIndex %}
+  {# all members #}
+  {% with list=namespaceMembersIndex.all section='' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# functions #}
+  {% with list=namespaceMembersIndex.functions section='_func' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# variables #}
+  {% with list=namespaceMembersIndex.variables section='_vars' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# typedefs #}
+  {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# enums #}
+  {% with list=namespaceMembersIndex.enums section='_enum' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+  {# enumValues #}
+  {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlnsmembers.tpl' %}
+    {% include 'htmlindexpages.tpl' %}
+  {% endwith %}
+{% endwith %}
diff --git a/templates/html/htmlobjlink.tpl b/templates/html/htmlobjlink.tpl
new file mode 100644
index 0000000..51a281f
--- /dev/null
+++ b/templates/html/htmlobjlink.tpl
@@ -0,0 +1,6 @@
+{# inputs: obj (with .isLinkable .anchor .fileName), text, config, page.relPath #}
+{% if obj.isLinkable %}
+<a class="el" href="{{ page.relPath }}{{ obj.fileName }}{{ config.HTML_FILE_EXTENSION }}{% if obj.anchor %}#{{ obj.anchor }}{% endif %}">{{ text }}</a>
+{% else %}
+<b>{{ text }}</b>
+{% endif %}
diff --git a/templates/html/htmlpage.tpl b/templates/html/htmlpage.tpl
new file mode 100644
index 0000000..1e6a5b1
--- /dev/null
+++ b/templates/html/htmlpage.tpl
@@ -0,0 +1,14 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for page {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+  {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{{ compound.details }}
+</div>
+{% endblock %}
diff --git a/templates/html/htmlpages.tpl b/templates/html/htmlpages.tpl
new file mode 100644
index 0000000..cc00bf5
--- /dev/null
+++ b/templates/html/htmlpages.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.relatedPagesDesc }}
+</div>
+{% indexentry nav name=tr.pages file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=pageTree %}
+  {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlsource.tpl b/templates/html/htmlsource.tpl
new file mode 100644
index 0000000..cb4e65d
--- /dev/null
+++ b/templates/html/htmlsource.tpl
@@ -0,0 +1,37 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML source code for file {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+  {% if compound.navigationPath %}
+    <div id="nav-path" class="navpath">
+      <ul>
+      {% for obj in compound.navigationPath %}
+        <li class="navelem">
+          {% with text=obj.text %}
+            {% include 'htmlobjlink.tpl' %}
+          {% endwith %}
+        </li>
+      {% endfor %}
+      </ul>
+    </div>
+  {% endif %}
+{% endblock %}
+
+{% block title %}
+  {# write summary links in the title area #}
+  <div class="headertitle"><div class="title">{{ compound.name }}
+  {% if compound.version %} ({{ compound.version }}){% endif %}
+  </div></div>
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+<a href="{{ page.relPath }}{{ compound.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoDocumentation }}</a>
+</div>
+<div class="fragment">
+{{ compound.sources }}
+</div><!-- fragment -->
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmltabs.tpl b/templates/html/htmltabs.tpl
new file mode 100644
index 0000000..90c62b4
--- /dev/null
+++ b/templates/html/htmltabs.tpl
@@ -0,0 +1,92 @@
+{# main navigation row #}
+<div id="navrow1" class="tabs">
+  <ul class="tablist">
+  {# main tab #}
+   <li{% if page.highlight=='main' %} class="current"{% endif %}><a href="{{ page.relPath }}index{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.mainPage|nowrap }}</span></a></li>
+  {# pages tab #}
+    {% if pageTree.tree|length>0 %}
+   <li{% if page.highlight=='pages' %} class="current"{% endif %}><a href="{{ page.relPath }}pages{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.pages|nowrap }}</span></a></li>
+    {% endif %}
+  {# modules tab #}
+    {% if moduleTree.tree|length>0 %}
+   <li{% if page.highlight=='modules' %} class="current"{% endif %}><a href="{{ page.relPath }}modules{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.modules|nowrap }}</span></a></li>
+    {% endif %}
+  {# namespaces tab #}
+    {% if namespaceList|length>0 %}
+   <li{% if page.highlight=='namespaces' %} class="current"{% endif %}><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaces|nowrap }}</span></a></li>
+    {% endif %}
+  {# classes tab #}
+    {% if classList|length>0 %}
+   <li{% if page.highlight=='classes' %} class="current"{% endif %}><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classes|nowrap }}</span></a></li>
+    {% endif %}
+  {# files tab #}
+    {% if fileList|length>0 %}
+   <li{% if page.highlight=='files' %} class="current"{% endif %}><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.files|nowrap }}</span></a></li>
+    {% endif %}
+  {# examples tab #}
+    {% if exampleList|length>0 %}
+   <li{% if page.highlight=='examples' %} class="current"{% endif %}><a href="{{ page.relPath }}examples{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.examples|nowrap }}</span></a></li>
+    {% endif %}
+  {# search box #}
+  {% if config.SEARCHENGINE %}
+    {% if config.SERVER_BASED_SEARCH %}
+      {# server based search box #}
+   <li>
+     <div id="MSearchBox" class="MSearchBoxInactive">
+       <div class="left">
+         <form id="FSearchBox" action="{{ page.relPath }}search{% if config.EXTERNAL_SEARCH %}{{ config.HTML_FILE_EXTENSION }}{% else %}.php{% endif %}" method="get">
+           <img id="MSearchSelect" src="{{ page.relPath }}search/mag.png" alt=""/>
+      {% if page.highlight!='search' %}
+           <input type="text" id="MSearchField" name="query" value="{{ tr.search }}" size="20" accesskey="S" 
+                  onfocus="searchBox.OnSearchFieldFocus(true)" 
+                  onblur="searchBox.OnSearchFieldFocus(false)"/>
+         </form>
+       </div><div class="right"></div>
+     </div>
+   </li>
+      {% endif %}
+    {% else %}
+      {# client based search box #}
+   <li>
+     <div id="MSearchBox" class="MSearchBoxInactive">
+     <span class="left">
+       <img id="MSearchSelect" src="{{ page.relPath }}search/mag_sel.png"
+            onmouseover="return searchBox.OnSearchSelectShow()"
+            onmouseout="return searchBox.OnSearchSelectHide()"
+            alt=""/>
+       <input type="text" id="MSearchField" value="{{ tr.search }}" accesskey="S"
+            onfocus="searchBox.OnSearchFieldFocus(true)"
+            onblur="searchBox.OnSearchFieldFocus(false)"
+            onkeyup="searchBox.OnSearchFieldChange(event)"/>
+       </span><span class="right">
+         <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img
+            id="MSearchCloseImg" border="0" src="{{ page.relPath }}search/close.png" alt=""/></a>
+       </span>
+     </div>
+   </li>
+    {% endif %}
+  {% endif %}
+  </ul>
+</div>
+{# second navigation row #}
+<div id="navrow2" class="tabs2">
+  <ul class="tablist">
+  {# namespace subtabs #}
+  {% if page.highlight=='namespaces' %}
+    <li{% if page.subhighlight=='namespacelist' %} class="current"{% endif %}><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceList|nowrap }}</span></a></li>
+    <li{% if page.subhighlight=='namespacemembers' %} class="current"{% endif %}><a href="{{ page.relPath }}namespacemembers{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceMembers|nowrap }}</span></a></li>
+  {% endif %}
+  {# class subtabs #}
+  {% if page.highlight=='classes' %}
+    <li{% if page.subhighlight=='classlist' %} class="current"{% endif %}><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classList|nowrap }}</span></a></li>
+    <li{% if page.subhighlight=='classindex' %} class="current"{% endif %}><a href="{{ page.relPath }}classes{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classIndex|nowrap }}</span></a></li>
+    <li{% if page.subhighlight=='classhierarchy' %} class="current"{% endif %}><a href="{{ page.relPath }}hierarchy{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classHierarchy|nowrap }}</span></a></li>
+    <li{% if page.subhighlight=='classmembers' %} class="current"{% endif %}><a href="{{ page.relPath }}functions{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classMembers|nowrap }}</span></a></li>
+  {% endif %}
+  {# file subtabs #}
+  {% if page.highlight=='files' %}
+    <li{% if page.subhighlight=='filelist' %} class="current"{% endif %}><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileList|nowrap }}</span></a></li>
+    <li{% if page.subhighlight=='filemembers' %} class="current"{% endif %}><a href="{{ page.relPath }}globals{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileMembers|nowrap }}</span></a></li>
+  {% endif %}
+  </ul>
+</div>
diff --git a/templates/html/htmltypeconstraints.tpl b/templates/html/htmltypeconstraints.tpl
new file mode 100644
index 0000000..12c9581
--- /dev/null
+++ b/templates/html/htmltypeconstraints.tpl
@@ -0,0 +1,13 @@
+{# obj should be a class or member #}
+{% if obj.typeConstraints|length>0 %}
+  <div class="typecontraint">
+  <dl><dt><b>{{ tr.typeConstraints }}</b></dt>
+  <dd><table border="0" cellspacing="2" cellpadding="0">
+  {% for arg in obj.typeConstraints %}
+    <tr><td valign="top"><em>{{ arg.name }}</em></td>
+        <td>&#160;</td><td valign="top"><em>{{ arg.type }}</em></td>
+        <td>&#160;</td><td>{{ arg.docs }}</td>
+    </tr>
+  {% endfor %}
+  </table></dl></div>
+{% endif %}
diff --git a/templates/html/jquery.js b/templates/html/jquery.js
new file mode 100644
index 0000000..1f4d0b4
--- /dev/null
+++ b/templates/html/jquery.js
@@ -0,0 +1,68 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*!
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));
\ No newline at end of file
diff --git a/templates/html/mag.png b/templates/html/mag.png
new file mode 100644
index 0000000..492f71f
Binary files /dev/null and b/templates/html/mag.png differ
diff --git a/templates/html/mag_sel.png b/templates/html/mag_sel.png
new file mode 100644
index 0000000..81f6040
Binary files /dev/null and b/templates/html/mag_sel.png differ
diff --git a/templates/html/nav_f.lum b/templates/html/nav_f.lum
new file mode 100644
index 0000000..ab84773
--- /dev/null
+++ b/templates/html/nav_f.lum
@@ -0,0 +1,11 @@
+# function header
+# width & height
+1 56
+# luma data
+248 247 246 245 244 243 242 241
+240 239 238 237 236 235 234 233
+232 231 230 229 228 223 223 223
+223 223 223 223 223 223 223 223
+224 224 224 224 225 225 225 225
+225 226 226 226 227 227 227 227
+228 228 228 229 229 229 229 229
diff --git a/templates/html/nav_g.png b/templates/html/nav_g.png
new file mode 100644
index 0000000..2093a23
Binary files /dev/null and b/templates/html/nav_g.png differ
diff --git a/templates/html/nav_h.lum b/templates/html/nav_h.lum
new file mode 100644
index 0000000..d30ee08
--- /dev/null
+++ b/templates/html/nav_h.lum
@@ -0,0 +1,6 @@
+# shadowed header
+# width & height
+1 12
+# luma data
+255 240 241 242 243 244
+245 246 247 248 249 250
diff --git a/templates/html/navtree.css b/templates/html/navtree.css
new file mode 100644
index 0000000..c618811
--- /dev/null
+++ b/templates/html/navtree.css
@@ -0,0 +1,143 @@
+#nav-tree .children_ul {
+  margin:0;
+  padding:4px;
+}
+
+#nav-tree ul {
+  list-style:none outside none;
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree li {
+  white-space:nowrap;
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree .plus {
+  margin:0px;
+}
+
+#nav-tree .selected {
+  background-image: url('tab_a.png');
+  background-repeat:repeat-x;
+  color: #fff;
+  text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+  margin:0px;
+  padding:0px;
+  border:0px;
+  vertical-align: middle;
+}
+
+#nav-tree a {
+  text-decoration:none;
+  padding:0px;
+  margin:0px;
+  outline:none;
+}
+
+#nav-tree .label {
+  margin:0px;
+  padding:0px;
+  font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+#nav-tree .label a {
+  padding:2px;
+}
+
+#nav-tree .selected a {
+  text-decoration:none;
+  color:#fff;
+}
+
+#nav-tree .children_ul {
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree .item {
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree {
+  padding: 0px 0px;
+  background-color: #FAFAFF; 
+  font-size:14px;
+  overflow:auto;
+}
+
+#doc-content {
+  overflow:auto;
+  display:block;
+  padding:0px;
+  margin:0px;
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#side-nav {
+  padding:0 6px 0 0;
+  margin: 0px;
+  display:block;
+  position: absolute;
+  left: 0px;
+  width: $width;
+}
+
+.ui-resizable .ui-resizable-handle {
+  display:block;
+}
+
+.ui-resizable-e {
+  background:url("splitbar.png") repeat scroll right center transparent;
+  cursor:e-resize;
+  height:100%;
+  right:0;
+  top:0;
+  width:6px;
+}
+
+.ui-resizable-handle {
+  display:none;
+  font-size:0.1px;
+  position:absolute;
+  z-index:1;
+}
+
+#nav-tree-contents {
+  margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+  background-image:url('nav_h.png');
+  background-repeat:repeat-x;
+  background-color: ##FA;
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#nav-sync {
+  position:absolute;
+  top:5px;
+  right:24px;
+  z-index:0;
+}
+
+#nav-sync img {
+  opacity:0.3;
+}
+
+#nav-sync img:hover {
+  opacity:0.9;
+}
+
+@media print
+{
+  #nav-tree { display: none; }
+  div.ui-resizable-handle { display: none; position: relative; }
+}
+
diff --git a/templates/html/navtree.js b/templates/html/navtree.js
new file mode 100644
index 0000000..9df45a7
--- /dev/null
+++ b/templates/html/navtree.js
@@ -0,0 +1,523 @@
+var navTreeSubIndices = new Array();
+
+function getData(varName)
+{
+  var i = varName.lastIndexOf('/');
+  var n = i>=0 ? varName.substring(i+1) : varName;
+  return eval(n.replace(/\-/g,'_'));
+}
+
+function stripPath(uri)
+{
+  return uri.substring(uri.lastIndexOf('/')+1);
+}
+
+function stripPath2(uri)
+{
+  var i = uri.lastIndexOf('/');
+  var s = uri.substring(i+1);
+  var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
+  return m ? uri.substring(i-6) : s;
+}
+
+function hashValue()
+{
+  return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
+}
+
+function hashUrl()
+{
+  return '#'+hashValue();
+}
+
+function pathName()
+{
+  return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
+}
+
+function localStorageSupported()
+{
+  try {
+    return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
+  }
+  catch(e) {
+    return false;
+  }
+}
+
+
+function storeLink(link)
+{
+  if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
+      window.localStorage.setItem('navpath',link);
+  }
+}
+
+function deleteLink()
+{
+  if (localStorageSupported()) {
+    window.localStorage.setItem('navpath','');
+  }
+}
+
+function cachedLink()
+{
+  if (localStorageSupported()) {
+    return window.localStorage.getItem('navpath');
+  } else {
+    return '';
+  }
+}
+
+function getScript(scriptName,func,show)
+{
+  var head = document.getElementsByTagName("head")[0]; 
+  var script = document.createElement('script');
+  script.id = scriptName;
+  script.type = 'text/javascript';
+  script.onload = func; 
+  script.src = scriptName+'.js'; 
+  if ($.browser.msie && $.browser.version<=8) { 
+    // script.onload does not work with older versions of IE
+    script.onreadystatechange = function() {
+      if (script.readyState=='complete' || script.readyState=='loaded') { 
+        func(); if (show) showRoot(); 
+      }
+    }
+  }
+  head.appendChild(script); 
+}
+
+function createIndent(o,domNode,node,level)
+{
+  var level=-1;
+  var n = node;
+  while (n.parentNode) { level++; n=n.parentNode; }
+  if (node.childrenData) {
+    var imgNode = document.createElement("img");
+    imgNode.style.paddingLeft=(16*level).toString()+'px';
+    imgNode.width  = 16;
+    imgNode.height = 22;
+    imgNode.border = 0;
+    node.plus_img = imgNode;
+    node.expandToggle = document.createElement("a");
+    node.expandToggle.href = "javascript:void(0)";
+    node.expandToggle.onclick = function() {
+      if (node.expanded) {
+        $(node.getChildrenUL()).slideUp("fast");
+        node.plus_img.src = node.relpath+"arrowright.png";
+        node.expanded = false;
+      } else {
+        expandNode(o, node, false, false);
+      }
+    }
+    node.expandToggle.appendChild(imgNode);
+    domNode.appendChild(node.expandToggle);
+    imgNode.src = node.relpath+"arrowright.png";
+  } else {
+    var span = document.createElement("span");
+    span.style.display = 'inline-block';
+    span.style.width   = 16*(level+1)+'px';
+    span.style.height  = '22px';
+    span.innerHTML = '&#160;';
+    domNode.appendChild(span);
+  } 
+}
+
+var animationInProgress = false;
+
+function gotoAnchor(anchor,aname,updateLocation)
+{
+  var pos, docContent = $('#doc-content');
+  var ancParent = $(anchor.parent());
+  if (ancParent.hasClass('memItemLeft') ||
+      ancParent.hasClass('fieldname') ||
+      ancParent.hasClass('fieldtype') ||
+      ancParent.is(':header'))
+  {
+    pos = ancParent.position().top;
+  } else if (anchor.position()) {
+    pos = anchor.position().top;
+  }
+  if (pos) {
+    var dist = Math.abs(Math.min(
+               pos-docContent.offset().top,
+               docContent[0].scrollHeight-
+               docContent.height()-docContent.scrollTop()));
+    animationInProgress=true;
+    docContent.animate({
+      scrollTop: pos + docContent.scrollTop() - docContent.offset().top
+    },Math.max(50,Math.min(500,dist)),function(){
+      if (updateLocation) window.location.href=aname;
+      animationInProgress=false;
+    });
+  }
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+  var node = new Object();
+  node.children = Array();
+  node.childrenData = childrenData;
+  node.depth = po.depth + 1;
+  node.relpath = po.relpath;
+  node.isLast = lastNode;
+
+  node.li = document.createElement("li");
+  po.getChildrenUL().appendChild(node.li);
+  node.parentNode = po;
+
+  node.itemDiv = document.createElement("div");
+  node.itemDiv.className = "item";
+
+  node.labelSpan = document.createElement("span");
+  node.labelSpan.className = "label";
+
+  createIndent(o,node.itemDiv,node,0);
+  node.itemDiv.appendChild(node.labelSpan);
+  node.li.appendChild(node.itemDiv);
+
+  var a = document.createElement("a");
+  node.labelSpan.appendChild(a);
+  node.label = document.createTextNode(text);
+  node.expanded = false;
+  a.appendChild(node.label);
+  if (link) {
+    var url;
+    if (link.substring(0,1)=='^') {
+      url = link.substring(1);
+      link = url;
+    } else {
+      url = node.relpath+link;
+    }
+    a.className = stripPath(link.replace('#',':'));
+    if (link.indexOf('#')!=-1) {
+      var aname = '#'+link.split('#')[1];
+      var srcPage = stripPath(pathName());
+      var targetPage = stripPath(link.split('#')[0]);
+      a.href = srcPage!=targetPage ? url : "javascript:void(0)"; 
+      a.onclick = function(){
+        storeLink(link);
+        if (!$(a).parent().parent().hasClass('selected'))
+        {
+          $('.item').removeClass('selected');
+          $('.item').removeAttr('id');
+          $(a).parent().parent().addClass('selected');
+          $(a).parent().parent().attr('id','selected');
+        }
+        var anchor = $(aname);
+        gotoAnchor(anchor,aname,true);
+      };
+    } else {
+      a.href = url;
+      a.onclick = function() { storeLink(link); }
+    }
+  } else {
+    if (childrenData != null) 
+    {
+      a.className = "nolink";
+      a.href = "javascript:void(0)";
+      a.onclick = node.expandToggle.onclick;
+    }
+  }
+
+  node.childrenUL = null;
+  node.getChildrenUL = function() {
+    if (!node.childrenUL) {
+      node.childrenUL = document.createElement("ul");
+      node.childrenUL.className = "children_ul";
+      node.childrenUL.style.display = "none";
+      node.li.appendChild(node.childrenUL);
+    }
+    return node.childrenUL;
+  };
+
+  return node;
+}
+
+function showRoot()
+{
+  var headerHeight = $("#top").height();
+  var footerHeight = $("#nav-path").height();
+  var windowHeight = $(window).height() - headerHeight - footerHeight;
+  (function (){ // retry until we can scroll to the selected item
+    try {
+      var navtree=$('#nav-tree');
+      navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+    } catch (err) {
+      setTimeout(arguments.callee, 0);
+    }
+  })();
+}
+
+function expandNode(o, node, imm, showRoot)
+{
+  if (node.childrenData && !node.expanded) {
+    if (typeof(node.childrenData)==='string') {
+      var varName    = node.childrenData;
+      getScript(node.relpath+varName,function(){
+        node.childrenData = getData(varName);
+        expandNode(o, node, imm, showRoot);
+      }, showRoot);
+    } else {
+      if (!node.childrenVisited) {
+        getNode(o, node);
+      } if (imm || ($.browser.msie && $.browser.version>8)) { 
+        // somehow slideDown jumps to the start of tree for IE9 :-(
+        $(node.getChildrenUL()).show();
+      } else {
+        $(node.getChildrenUL()).slideDown("fast");
+      }
+      if (node.isLast) {
+        node.plus_img.src = node.relpath+"arrowdown.png";
+      } else {
+        node.plus_img.src = node.relpath+"arrowdown.png";
+      }
+      node.expanded = true;
+    }
+  }
+}
+
+function glowEffect(n,duration)
+{
+  n.addClass('glow').delay(duration).queue(function(next){
+    $(this).removeClass('glow');next();
+  });
+}
+
+function highlightAnchor()
+{
+  var aname = hashUrl();
+  var anchor = $(aname);
+  if (anchor.parent().attr('class')=='memItemLeft'){
+    var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
+    glowEffect(rows.children(),300); // member without details
+  } else if (anchor.parent().attr('class')=='fieldname'){
+    glowEffect(anchor.parent().parent(),1000); // enum value
+  } else if (anchor.parent().attr('class')=='fieldtype'){
+    glowEffect(anchor.parent().parent(),1000); // struct field
+  } else if (anchor.parent().is(":header")) {
+    glowEffect(anchor.parent(),1000); // section header
+  } else {
+    glowEffect(anchor.next(),1000); // normal member
+  }
+  gotoAnchor(anchor,aname,false);
+}
+
+function selectAndHighlight(hash,n)
+{
+  var a;
+  if (hash) {
+    var link=stripPath(pathName())+':'+hash.substring(1);
+    a=$('.item a[class$="'+link+'"]');
+  }
+  if (a && a.length) {
+    a.parent().parent().addClass('selected');
+    a.parent().parent().attr('id','selected');
+    highlightAnchor();
+  } else if (n) {
+    $(n.itemDiv).addClass('selected');
+    $(n.itemDiv).attr('id','selected');
+  }
+  if ($('#nav-tree-contents .item:first').hasClass('selected')) {
+    $('#nav-sync').css('top','30px');
+  } else {
+    $('#nav-sync').css('top','5px');
+  }
+  showRoot();
+}
+
+function showNode(o, node, index, hash)
+{
+  if (node && node.childrenData) {
+    if (typeof(node.childrenData)==='string') {
+      var varName    = node.childrenData;
+      getScript(node.relpath+varName,function(){
+        node.childrenData = getData(varName);
+        showNode(o,node,index,hash);
+      },true);
+    } else {
+      if (!node.childrenVisited) {
+        getNode(o, node);
+      }
+      $(node.getChildrenUL()).css({'display':'block'});
+      node.plus_img.src = node.relpath+"arrowdown.png";
+      node.expanded = true;
+      var n = node.children[o.breadcrumbs[index]];
+      if (index+1<o.breadcrumbs.length) {
+        showNode(o,n,index+1,hash);
+      } else {
+        if (typeof(n.childrenData)==='string') {
+          var varName = n.childrenData;
+          getScript(n.relpath+varName,function(){
+            n.childrenData = getData(varName);
+            node.expanded=false;
+            showNode(o,node,index,hash); // retry with child node expanded
+          },true);
+        } else {
+          var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
+          if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
+            expandNode(o, n, true, true);
+          }
+          selectAndHighlight(hash,n);
+        }
+      }
+    }
+  } else {
+    selectAndHighlight(hash);
+  }
+}
+
+function removeToInsertLater(element) {
+  var parentNode = element.parentNode;
+  var nextSibling = element.nextSibling;
+  parentNode.removeChild(element);
+  return function() {
+    if (nextSibling) {
+      parentNode.insertBefore(element, nextSibling);
+    } else {
+      parentNode.appendChild(element);
+    }
+  };
+}
+
+function getNode(o, po)
+{
+  var insertFunction = removeToInsertLater(po.li);
+  po.childrenVisited = true;
+  var l = po.childrenData.length-1;
+  for (var i in po.childrenData) {
+    var nodeData = po.childrenData[i];
+    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+      i==l);
+  }
+  insertFunction();
+}
+
+function gotoNode(o,subIndex,root,hash,relpath)
+{
+  var nti = navTreeSubIndices[subIndex][root+hash];
+  o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
+  if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
+    navTo(o,NAVTREE[0][1],"",relpath);
+    $('.item').removeClass('selected');
+    $('.item').removeAttr('id');
+  }
+  if (o.breadcrumbs) {
+    o.breadcrumbs.unshift(0); // add 0 for root node
+    showNode(o, o.node, 0, hash);
+  }
+}
+
+function navTo(o,root,hash,relpath)
+{
+  var link = cachedLink();
+  if (link) {
+    var parts = link.split('#');
+    root = parts[0];
+    if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
+    else hash='';
+  }
+  if (hash.match(/^#l\d+$/)) {
+    var anchor=$('a[name='+hash.substring(1)+']');
+    glowEffect(anchor.parent(),1000); // line number
+    hash=''; // strip line number anchors
+  }
+  var url=root+hash;
+  var i=-1;
+  while (NAVTREEINDEX[i+1]<=url) i++;
+  if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
+  if (navTreeSubIndices[i]) {
+    gotoNode(o,i,root,hash,relpath)
+  } else {
+    getScript(relpath+'navtreeindex'+i,function(){
+      navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
+      if (navTreeSubIndices[i]) {
+        gotoNode(o,i,root,hash,relpath);
+      }
+    },true);
+  }
+}
+
+function showSyncOff(n,relpath)
+{
+    n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
+}
+
+function showSyncOn(n,relpath)
+{
+    n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
+}
+
+function toggleSyncButton(relpath)
+{
+  var navSync = $('#nav-sync');
+  if (navSync.hasClass('sync')) {
+    navSync.removeClass('sync');
+    showSyncOff(navSync,relpath);
+    storeLink(stripPath2(pathName())+hashUrl());
+  } else {
+    navSync.addClass('sync');
+    showSyncOn(navSync,relpath);
+    deleteLink();
+  }
+}
+
+function initNavTree(toroot,relpath)
+{
+  var o = new Object();
+  o.toroot = toroot;
+  o.node = new Object();
+  o.node.li = document.getElementById("nav-tree-contents");
+  o.node.childrenData = NAVTREE;
+  o.node.children = new Array();
+  o.node.childrenUL = document.createElement("ul");
+  o.node.getChildrenUL = function() { return o.node.childrenUL; };
+  o.node.li.appendChild(o.node.childrenUL);
+  o.node.depth = 0;
+  o.node.relpath = relpath;
+  o.node.expanded = false;
+  o.node.isLast = true;
+  o.node.plus_img = document.createElement("img");
+  o.node.plus_img.src = relpath+"arrowright.png";
+  o.node.plus_img.width = 16;
+  o.node.plus_img.height = 22;
+
+  if (localStorageSupported()) {
+    var navSync = $('#nav-sync');
+    if (cachedLink()) {
+      showSyncOff(navSync,relpath);
+      navSync.removeClass('sync');
+    } else {
+      showSyncOn(navSync,relpath);
+    }
+    navSync.click(function(){ toggleSyncButton(relpath); });
+  }
+
+  $(window).load(function(){
+    navTo(o,toroot,hashUrl(),relpath);
+    showRoot();
+  });
+
+  $(window).bind('hashchange', function(){
+     if (window.location.hash && window.location.hash.length>1){
+       var a;
+       if ($(location).attr('hash')){
+         var clslink=stripPath(pathName())+':'+hashValue();
+         a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
+       }
+       if (a==null || !$(a).parent().parent().hasClass('selected')){
+         $('.item').removeClass('selected');
+         $('.item').removeAttr('id');
+       }
+       var link=stripPath2(pathName());
+       navTo(o,link,hashUrl(),relpath);
+     } else if (!animationInProgress) {
+       $('#doc-content').scrollTop(0);
+       $('.item').removeClass('selected');
+       $('.item').removeAttr('id');
+       navTo(o,toroot,hashUrl(),relpath);
+     }
+  })
+}
+
diff --git a/templates/html/open.luma b/templates/html/open.luma
new file mode 100644
index 0000000..27eb4b6
--- /dev/null
+++ b/templates/html/open.luma
@@ -0,0 +1,23 @@
+# tree open icon
+# width & height
+9 9
+# luma data
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+142 142 142 142 142 142 142 142 142
+  0 142 142 142 142 142 142 142   0
+  0   0 142 142 142 142 142   0   0
+  0   0   0 142 142 142   0   0   0
+  0   0   0   0 142   0   0   0   0
+# alpha data
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+  0   0   0   0   0   0   0   0   0
+255 255 255 255 255 255 255 255 255
+  0 255 255 255 255 255 255 255   0
+  0   0 255 255 255 255 255   0   0
+  0   0   0 255 255 255   0   0   0
+  0   0   0   0 255   0   0   0   0
diff --git a/templates/html/resize.js b/templates/html/resize.js
new file mode 100644
index 0000000..304fcb6
--- /dev/null
+++ b/templates/html/resize.js
@@ -0,0 +1,97 @@
+var cookie_namespace = 'doxygen'; 
+var sidenav,navtree,content,header;
+
+function readCookie(cookie) 
+{
+  var myCookie = cookie_namespace+"_"+cookie+"=";
+  if (document.cookie) 
+  {
+    var index = document.cookie.indexOf(myCookie);
+    if (index != -1) 
+    {
+      var valStart = index + myCookie.length;
+      var valEnd = document.cookie.indexOf(";", valStart);
+      if (valEnd == -1) 
+      {
+        valEnd = document.cookie.length;
+      }
+      var val = document.cookie.substring(valStart, valEnd);
+      return val;
+    }
+  }
+  return 0;
+}
+
+function writeCookie(cookie, val, expiration) 
+{
+  if (val==undefined) return;
+  if (expiration == null) 
+  {
+    var date = new Date();
+    date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+    expiration = date.toGMTString();
+  }
+  document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
+}
+ 
+function resizeWidth() 
+{
+  var windowWidth = $(window).width() + "px";
+  var sidenavWidth = $(sidenav).outerWidth();
+  content.css({marginLeft:parseInt(sidenavWidth)+"px"}); 
+  writeCookie('width',sidenavWidth, null);
+}
+
+function restoreWidth(navWidth)
+{
+  var windowWidth = $(window).width() + "px";
+  content.css({marginLeft:parseInt(navWidth)+6+"px"});
+  sidenav.css({width:navWidth + "px"});
+}
+
+function resizeHeight() 
+{
+  var headerHeight = header.outerHeight();
+  var footerHeight = footer.outerHeight();
+  var windowHeight = $(window).height() - headerHeight - footerHeight;
+  content.css({height:windowHeight + "px"});
+  navtree.css({height:windowHeight + "px"});
+  sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
+}
+
+function initResizable()
+{
+  header  = $("#top");
+  sidenav = $("#side-nav");
+  content = $("#doc-content");
+  navtree = $("#nav-tree");
+  footer  = $("#nav-path");
+  $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+  $(window).resize(function() { resizeHeight(); });
+  var width = readCookie('width');
+  if (width) { restoreWidth(width); } else { resizeWidth(); }
+  resizeHeight();
+  var url = location.href;
+  var i=url.indexOf("#");
+  if (i>=0) window.location.hash=url.substr(i);
+  var _preventDefault = function(evt) { evt.preventDefault(); };
+  $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+  $(document).bind('touchmove',function(e){
+    var device = navigator.userAgent.toLowerCase();
+    var ios = device.match(/(iphone|ipod|ipad)/);
+    if (ios) {
+      try {
+        var target = e.target;
+        while (target) {
+          if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
+          target = target.parentNode;
+        }
+        e.preventDefault();
+      } catch(err) {
+        e.preventDefault();
+      }
+    }
+  });
+}
+
+
diff --git a/templates/html/search.css b/templates/html/search.css
new file mode 100644
index 0000000..a77ab21
--- /dev/null
+++ b/templates/html/search.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+    float: left;
+}
+
+#MSearchBox {
+    white-space : nowrap;
+    position: absolute;
+    float: none;
+    display: inline;
+    margin-top: 8px;
+    right: 0px;
+    width: 170px;
+    z-index: 102;
+    background-color: white;
+}
+
+#MSearchBox .left
+{
+    display:block;
+    position:absolute;
+    left:10px;
+    width:20px;
+    height:19px;
+    background:url('search_l.png') no-repeat;
+    background-position:right;
+}
+
+#MSearchSelect {
+    display:block;
+    position:absolute;
+    width:20px;
+    height:19px;
+}
+
+.left #MSearchSelect {
+    left:4px;
+}
+
+.right #MSearchSelect {
+    right:5px;
+}
+
+#MSearchField {
+    display:block;
+    position:absolute;
+    height:19px;
+    background:url('search_m.png') repeat-x;
+    border:none;
+    width:111px;
+    margin-left:20px;
+    padding-left:4px;
+    color: #909090;
+    outline: none;
+    font: 9pt Arial, Verdana, sans-serif;
+}
+
+#FSearchBox #MSearchField {
+    margin-left:15px;
+}
+
+#MSearchBox .right {
+    display:block;
+    position:absolute;
+    right:10px;
+    top:0px;
+    width:20px;
+    height:19px;
+    background:url('search_r.png') no-repeat;
+    background-position:left;
+}
+
+#MSearchClose {
+    display: none;
+    position: absolute;
+    top: 4px;
+    background : none;
+    border: none;
+    margin: 0px 4px 0px 0px;
+    padding: 0px 0px;
+    outline: none;
+}
+
+.left #MSearchClose {
+    left: 6px;
+}
+
+.right #MSearchClose {
+    right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid ##A0;
+    background-color: ##FA;
+    z-index: 1;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-top-left-radius: 4px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+    font: 8pt Arial, Verdana, sans-serif;
+    padding-left:  2px;
+    padding-right: 12px;
+    border: 0px;
+}
+
+span.SelectionMark {
+    margin-right: 4px;
+    font-family: monospace;
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem {
+    display: block;
+    outline-style: none;
+    color: #000000; 
+    text-decoration: none;
+    padding-left:   6px;
+    padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+    color: #000000; 
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem:hover {
+    color: #FFFFFF;
+    background-color: ##50;
+    outline-style: none;
+    text-decoration: none;
+    cursor: pointer;
+    display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+    width: 60ex;
+    height: 15em;
+}
+
+#MSearchResultsWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #000;
+    background-color: ##F0;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+    clear:both; 
+    padding-bottom: 15px;
+}
+
+.SREntry {
+    font-size: 10pt;
+    padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+    font-size: 8pt;
+    padding: 1px 5px;
+}
+
+body.SRPage {
+    margin: 5px 2px;
+}
+
+.SRChildren {
+    padding-left: 3ex; padding-bottom: .5em 
+}
+
+.SRPage .SRChildren {
+    display: none;
+}
+
+.SRSymbol {
+    font-weight: bold; 
+    color: ##58;
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRScope {
+    display: block;
+    color: ##58; 
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+    text-decoration: underline;
+}
+
+span.SRScope {
+    padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+}
+
+.SRResult {
+    display: none;
+}
+
+DIV.searchresults {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+    background-color: ##F2;
+}
+
+.pages b {
+   color: white;
+   padding: 5px 5px 3px 5px;
+   background-image: url("../tab_a.png");
+   background-repeat: repeat-x;
+   text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+    line-height: 17px;
+    margin-left: 4px;
+    text-decoration: none;
+}
+
+.hl {
+    font-weight: bold;
+}
+
+#searchresults {
+    margin-bottom: 20px;
+}
+
+.searchpages {
+    margin-top: 10px;
+}
+
diff --git a/templates/html/search.js b/templates/html/search.js
new file mode 100644
index 0000000..dedce3b
--- /dev/null
+++ b/templates/html/search.js
@@ -0,0 +1,791 @@
+function convertToId(search)
+{
+  var result = '';
+  for (i=0;i<search.length;i++)
+  {
+    var c = search.charAt(i);
+    var cn = c.charCodeAt(0);
+    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+    {
+      result+=c;
+    }
+    else if (cn<16)
+    {
+      result+="_0"+cn.toString(16);
+    }
+    else
+    {
+      result+="_"+cn.toString(16);
+    }
+  }
+  return result;
+}
+
+function getXPos(item)
+{
+  var x = 0;
+  if (item.offsetWidth)
+  {
+    while (item && item!=document.body)
+    {
+      x   += item.offsetLeft;
+      item = item.offsetParent;
+    }
+  }
+  return x;
+}
+
+function getYPos(item)
+{
+  var y = 0;
+  if (item.offsetWidth)
+  {
+     while (item && item!=document.body)
+     {
+       y   += item.offsetTop;
+       item = item.offsetParent;
+     }
+  }
+  return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+   Parameters:
+   name - The name of the global variable that will be
+          storing this instance.  Is needed to be able to set timeouts.
+   resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
+
+  // ---------- Instance variables
+  this.name                  = name;
+  this.resultsPath           = resultsPath;
+  this.keyTimeout            = 0;
+  this.keyTimeoutLength      = 500;
+  this.closeSelectionTimeout = 300;
+  this.lastSearchValue       = "";
+  this.lastResultsPage       = "";
+  this.hideTimeout           = 0;
+  this.searchIndex           = 0;
+  this.searchActive          = false;
+  this.insideFrame           = inFrame;
+  this.searchLabel           = label;
+
+  // ----------- DOM Elements
+
+  this.DOMSearchField = function()
+  {  return document.getElementById("MSearchField");  }
+
+  this.DOMSearchSelect = function()
+  {  return document.getElementById("MSearchSelect");  }
+
+  this.DOMSearchSelectWindow = function()
+  {  return document.getElementById("MSearchSelectWindow");  }
+
+  this.DOMPopupSearchResults = function()
+  {  return document.getElementById("MSearchResults");  }
+
+  this.DOMPopupSearchResultsWindow = function()
+  {  return document.getElementById("MSearchResultsWindow");  }
+
+  this.DOMSearchClose = function()
+  {  return document.getElementById("MSearchClose"); }
+
+  this.DOMSearchBox = function()
+  {  return document.getElementById("MSearchBox");  }
+
+  // ------------ Event Handlers
+
+  // Called when focus is added or removed from the search field.
+  this.OnSearchFieldFocus = function(isActive)
+  {
+    this.Activate(isActive);
+  }
+
+  this.OnSearchSelectShow = function()
+  {
+    var searchSelectWindow = this.DOMSearchSelectWindow();
+    var searchField        = this.DOMSearchSelect();
+
+    if (this.insideFrame)
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      left += searchField.offsetWidth + 6;
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      left -= searchSelectWindow.offsetWidth;
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+    else
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+
+    // stop selection hide timer
+    if (this.hideTimeout)
+    {
+      clearTimeout(this.hideTimeout);
+      this.hideTimeout=0;
+    }
+    return false; // to avoid "image drag" default event
+  }
+
+  this.OnSearchSelectHide = function()
+  {
+    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+                                  this.closeSelectionTimeout);
+  }
+
+  // Called when the content of the search field is changed.
+  this.OnSearchFieldChange = function(evt)
+  {
+    if (this.keyTimeout) // kill running timer
+    {
+      clearTimeout(this.keyTimeout);
+      this.keyTimeout = 0;
+    }
+
+    var e  = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 || e.keyCode==13)
+    {
+      if (e.shiftKey==1)
+      {
+        this.OnSearchSelectShow();
+        var win=this.DOMSearchSelectWindow();
+        for (i=0;i<win.childNodes.length;i++)
+        {
+          var child = win.childNodes[i]; // get span within a
+          if (child.className=='SelectItem')
+          {
+            child.focus();
+            return;
+          }
+        }
+        return;
+      }
+      else if (window.frames.MSearchResults.searchResults)
+      {
+        var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+        if (elem) elem.focus();
+      }
+    }
+    else if (e.keyCode==27) // Escape out of the search field
+    {
+      this.DOMSearchField().blur();
+      this.DOMPopupSearchResultsWindow().style.display = 'none';
+      this.DOMSearchClose().style.display = 'none';
+      this.lastSearchValue = '';
+      this.Activate(false);
+      return;
+    }
+
+    // strip whitespaces
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+    if (searchValue != this.lastSearchValue) // search value has changed
+    {
+      if (searchValue != "") // non-empty search
+      {
+        // set timer for search update
+        this.keyTimeout = setTimeout(this.name + '.Search()',
+                                     this.keyTimeoutLength);
+      }
+      else // empty search field
+      {
+        this.DOMPopupSearchResultsWindow().style.display = 'none';
+        this.DOMSearchClose().style.display = 'none';
+        this.lastSearchValue = '';
+      }
+    }
+  }
+
+  this.SelectItemCount = function(id)
+  {
+    var count=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        count++;
+      }
+    }
+    return count;
+  }
+
+  this.SelectItemSet = function(id)
+  {
+    var i,j=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        var node = child.firstChild;
+        if (j==id)
+        {
+          node.innerHTML='&#8226;';
+        }
+        else
+        {
+          node.innerHTML='&#160;';
+        }
+        j++;
+      }
+    }
+  }
+
+  // Called when an search filter selection is made.
+  // set item with index id as the active item
+  this.OnSelectItem = function(id)
+  {
+    this.searchIndex = id;
+    this.SelectItemSet(id);
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+    if (searchValue!="" && this.searchActive) // something was found -> do a search
+    {
+      this.Search();
+    }
+  }
+
+  this.OnSearchSelectKey = function(evt)
+  {
+    var e = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+    {
+      this.searchIndex++;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==38 && this.searchIndex>0) // Up
+    {
+      this.searchIndex--;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==13 || e.keyCode==27)
+    {
+      this.OnSelectItem(this.searchIndex);
+      this.CloseSelectionWindow();
+      this.DOMSearchField().focus();
+    }
+    return false;
+  }
+
+  // --------- Actions
+
+  // Closes the results window.
+  this.CloseResultsWindow = function()
+  {
+    this.DOMPopupSearchResultsWindow().style.display = 'none';
+    this.DOMSearchClose().style.display = 'none';
+    this.Activate(false);
+  }
+
+  this.CloseSelectionWindow = function()
+  {
+    this.DOMSearchSelectWindow().style.display = 'none';
+  }
+
+  // Performs a search.
+  this.Search = function()
+  {
+    this.keyTimeout = 0;
+
+    // strip leading whitespace
+    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+    var code = searchValue.toLowerCase().charCodeAt(0);
+    var idxChar = searchValue.substr(0, 1).toLowerCase();
+    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+    {
+      idxChar = searchValue.substr(0, 2);
+    }
+
+    var resultsPage;
+    var resultsPageWithSearch;
+    var hasResultsPage;
+
+    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+    if (idx!=-1)
+    {
+       var hexCode=idx.toString(16);
+       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+       hasResultsPage = true;
+    }
+    else // nothing available for this search term
+    {
+       resultsPage = this.resultsPath + '/nomatches.html';
+       resultsPageWithSearch = resultsPage;
+       hasResultsPage = false;
+    }
+
+    window.frames.MSearchResults.location = resultsPageWithSearch;
+    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+    if (domPopupSearchResultsWindow.style.display!='block')
+    {
+       var domSearchBox = this.DOMSearchBox();
+       this.DOMSearchClose().style.display = 'inline';
+       if (this.insideFrame)
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         domPopupSearchResultsWindow.style.position = 'relative';
+         domPopupSearchResultsWindow.style.display  = 'block';
+         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+         domPopupSearchResultsWindow.style.width    = width + 'px';
+         domPopupSearchResults.style.width          = width + 'px';
+       }
+       else
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
+         domPopupSearchResultsWindow.style.display = 'block';
+         left -= domPopupSearchResults.offsetWidth;
+         domPopupSearchResultsWindow.style.top     = top  + 'px';
+         domPopupSearchResultsWindow.style.left    = left + 'px';
+       }
+    }
+
+    this.lastSearchValue = searchValue;
+    this.lastResultsPage = resultsPage;
+  }
+
+  // -------- Activation Functions
+
+  // Activates or deactivates the search panel, resetting things to
+  // their default values if necessary.
+  this.Activate = function(isActive)
+  {
+    if (isActive || // open it
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
+       )
+    {
+      this.DOMSearchBox().className = 'MSearchBoxActive';
+
+      var searchField = this.DOMSearchField();
+
+      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+      {
+        searchField.value = '';
+        this.searchActive = true;
+      }
+    }
+    else if (!isActive) // directly remove the panel
+    {
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
+      this.DOMSearchField().value   = this.searchLabel;
+      this.searchActive             = false;
+      this.lastSearchValue          = ''
+      this.lastResultsPage          = '';
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+    // The number of matches from the last run of <Search()>.
+    this.lastMatchCount = 0;
+    this.lastKey = 0;
+    this.repeatOn = false;
+
+    // Toggles the visibility of the passed element ID.
+    this.FindChildElement = function(id)
+    {
+      var parentElement = document.getElementById(id);
+      var element = parentElement.firstChild;
+
+      while (element && element!=parentElement)
+      {
+        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+        {
+          return element;
+        }
+
+        if (element.nodeName == 'DIV' && element.hasChildNodes())
+        {
+           element = element.firstChild;
+        }
+        else if (element.nextSibling)
+        {
+           element = element.nextSibling;
+        }
+        else
+        {
+          do
+          {
+            element = element.parentNode;
+          }
+          while (element && element!=parentElement && !element.nextSibling);
+
+          if (element && element!=parentElement)
+          {
+            element = element.nextSibling;
+          }
+        }
+      }
+    }
+
+    this.Toggle = function(id)
+    {
+      var element = this.FindChildElement(id);
+      if (element)
+      {
+        if (element.style.display == 'block')
+        {
+          element.style.display = 'none';
+        }
+        else
+        {
+          element.style.display = 'block';
+        }
+      }
+    }
+
+    // Searches for the passed string.  If there is no parameter,
+    // it takes it from the URL query.
+    //
+    // Always returns true, since other documents may try to call it
+    // and that may or may not be possible.
+    this.Search = function(search)
+    {
+      if (!search) // get search word from URL
+      {
+        search = window.location.search;
+        search = search.substring(1);  // Remove the leading '?'
+        search = unescape(search);
+      }
+
+      search = search.replace(/^ +/, ""); // strip leading spaces
+      search = search.replace(/ +$/, ""); // strip trailing spaces
+      search = search.toLowerCase();
+      search = convertToId(search);
+
+      var resultRows = document.getElementsByTagName("div");
+      var matches = 0;
+
+      var i = 0;
+      while (i < resultRows.length)
+      {
+        var row = resultRows.item(i);
+        if (row.className == "SRResult")
+        {
+          var rowMatchName = row.id.toLowerCase();
+          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+          if (search.length<=rowMatchName.length &&
+             rowMatchName.substr(0, search.length)==search)
+          {
+            row.style.display = 'block';
+            matches++;
+          }
+          else
+          {
+            row.style.display = 'none';
+          }
+        }
+        i++;
+      }
+      document.getElementById("Searching").style.display='none';
+      if (matches == 0) // no results
+      {
+        document.getElementById("NoMatches").style.display='block';
+      }
+      else // at least one result
+      {
+        document.getElementById("NoMatches").style.display='none';
+      }
+      this.lastMatchCount = matches;
+      return true;
+    }
+
+    // return the first item with index index or higher that is visible
+    this.NavNext = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index++;
+      }
+      return focusItem;
+    }
+
+    this.NavPrev = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index--;
+      }
+      return focusItem;
+    }
+
+    this.ProcessKeys = function(e)
+    {
+      if (e.type == "keydown")
+      {
+        this.repeatOn = false;
+        this.lastKey = e.keyCode;
+      }
+      else if (e.type == "keypress")
+      {
+        if (!this.repeatOn)
+        {
+          if (this.lastKey) this.repeatOn = true;
+          return false; // ignore first keypress after keydown
+        }
+      }
+      else if (e.type == "keyup")
+      {
+        this.lastKey = 0;
+        this.repeatOn = false;
+      }
+      return this.lastKey!=0;
+    }
+
+    this.Nav = function(evt,itemIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        var newIndex = itemIndex-1;
+        var focusItem = this.NavPrev(newIndex);
+        if (focusItem)
+        {
+          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+          if (child && child.style.display == 'block') // children visible
+          {
+            var n=0;
+            var tmpElem;
+            while (1) // search for last child
+            {
+              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+              if (tmpElem)
+              {
+                focusItem = tmpElem;
+              }
+              else // found it!
+              {
+                break;
+              }
+              n++;
+            }
+          }
+        }
+        if (focusItem)
+        {
+          focusItem.focus();
+        }
+        else // return focus to search field
+        {
+           parent.document.getElementById("MSearchField").focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = itemIndex+1;
+        var focusItem;
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem && elem.style.display == 'block') // children visible
+        {
+          focusItem = document.getElementById('Item'+itemIndex+'_c0');
+        }
+        if (!focusItem) focusItem = this.NavNext(newIndex);
+        if (focusItem)  focusItem.focus();
+      }
+      else if (this.lastKey==39) // Right
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'block';
+      }
+      else if (this.lastKey==37) // Left
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'none';
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+
+    this.NavChild = function(evt,itemIndex,childIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        if (childIndex>0)
+        {
+          var newIndex = childIndex-1;
+          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+        }
+        else // already at first child, jump to parent
+        {
+          document.getElementById('Item'+itemIndex).focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = childIndex+1;
+        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+        if (!elem) // last child, jump to parent next parent
+        {
+          elem = this.NavNext(itemIndex+1);
+        }
+        if (elem)
+        {
+          elem.focus();
+        }
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+}
+
+function setKeyActions(elem,action)
+{
+  elem.setAttribute('onkeydown',action);
+  elem.setAttribute('onkeypress',action);
+  elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+  elem.setAttribute('class',attr);
+  elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+  var results = document.getElementById("SRResults");
+  for (var e=0; e<searchData.length; e++)
+  {
+    var id = searchData[e][0];
+    var srResult = document.createElement('div');
+    srResult.setAttribute('id','SR_'+id);
+    setClassAttr(srResult,'SRResult');
+    var srEntry = document.createElement('div');
+    setClassAttr(srEntry,'SREntry');
+    var srLink = document.createElement('a');
+    srLink.setAttribute('id','Item'+e);
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+    setClassAttr(srLink,'SRSymbol');
+    srLink.innerHTML = searchData[e][1][0];
+    srEntry.appendChild(srLink);
+    if (searchData[e][1].length==2) // single result
+    {
+      srLink.setAttribute('href',searchData[e][1][1][0]);
+      if (searchData[e][1][1][1])
+      {
+       srLink.setAttribute('target','_parent');
+      }
+      var srScope = document.createElement('span');
+      setClassAttr(srScope,'SRScope');
+      srScope.innerHTML = searchData[e][1][1][2];
+      srEntry.appendChild(srScope);
+    }
+    else // multiple results
+    {
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+      var srChildren = document.createElement('div');
+      setClassAttr(srChildren,'SRChildren');
+      for (var c=0; c<searchData[e][1].length-1; c++)
+      {
+        var srChild = document.createElement('a');
+        srChild.setAttribute('id','Item'+e+'_c'+c);
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+        setClassAttr(srChild,'SRScope');
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
+        if (searchData[e][1][c+1][1])
+        {
+         srChild.setAttribute('target','_parent');
+        }
+        srChild.innerHTML = searchData[e][1][c+1][2];
+        srChildren.appendChild(srChild);
+      }
+      srEntry.appendChild(srChildren);
+    }
+    srResult.appendChild(srEntry);
+    results.appendChild(srResult);
+  }
+}
+
+function init_search()
+{
+  var results = document.getElementById("MSearchSelectWindow");
+  for (var key in indexSectionLabels)
+  {
+    var link = document.createElement('a');
+    link.setAttribute('class','SelectItem');
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+    link.href='javascript:void(0)';
+    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+    results.appendChild(link);
+  }
+  searchBox.OnSelectItem(0);
+}
+
diff --git a/templates/html/search_functions.php b/templates/html/search_functions.php
new file mode 100644
index 0000000..caa9e3b
--- /dev/null
+++ b/templates/html/search_functions.php
@@ -0,0 +1,366 @@
+<script language="PHP">
+require_once "search_config.php";
+
+function end_form($value)
+{
+  global $config;
+  global $translator;
+  if ($config['DISABLE_INDEX'] == false)
+  {
+  echo "            <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"$value\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n            </form>\n          </div><div class=\"right\"></div>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div>\n";
+  }
+  if ($config['GENERATE_TREEVIEW'])
+  {
+    echo $translator['split_bar'];
+  }
+}
+
+function end_page()
+{
+  echo "</body></html>";
+}
+
+function search_results()
+{
+  global $translator;
+  return $translator['search_results_title'];
+}
+
+function matches_text($num)
+{
+  global $translator;
+  $string = $translator['search_results'][($num>2)?2:$num];
+  // The eval is used so that translator strings can contain $num.
+  eval("\$result = \"$string\";");
+  return $result;
+}
+
+function report_matches()
+{
+  global $translator;
+  return $translator['search_matches'];
+}
+
+function readInt($file)
+{
+  $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));
+  $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file));
+  return ($b1<<24)|($b2<<16)|($b3<<8)|$b4;
+}
+
+function readString($file)
+{
+  $result="";
+  while (ord($c=fgetc($file))) $result.=$c;
+  return $result;
+}
+
+function readHeader($file)
+{
+  $header =fgetc($file); $header.=fgetc($file);
+  $header.=fgetc($file); $header.=fgetc($file);
+  return $header;
+}
+
+function computeIndex($word)
+{
+  // Simple hashing that allows for substring search
+  if (strlen($word)<2) return -1;
+  // high char of the index
+  $hi = ord($word{0});
+  if ($hi==0) return -1;
+  // low char of the index
+  $lo = ord($word{1});
+  if ($lo==0) return -1;
+  // return index
+  return $hi*256+$lo;
+}
+
+function search($file,$word,&$statsList)
+{
+  $index = computeIndex($word);
+  if ($index!=-1) // found a valid index
+  {
+    fseek($file,$index*4+4); // 4 bytes per entry, skip header
+    $index = readInt($file);
+    if ($index) // found words matching the hash key
+    {
+      $start=sizeof($statsList);
+      $count=$start;
+      fseek($file,$index);
+      $w = readString($file);
+      while ($w)
+      {
+        $statIdx = readInt($file);
+        if ($word==substr($w,0,strlen($word)))
+        { // found word that matches (as substring)
+          $statsList[$count++]=array(
+              "word"=>$word,
+              "match"=>$w,
+              "index"=>$statIdx,
+              "full"=>strlen($w)==strlen($word),
+              "docs"=>array()
+              );
+        }
+        $w = readString($file);
+      }
+      $totalHi=0;
+      $totalFreqHi=0;
+      $totalFreqLo=0;
+      for ($count=$start;$count<sizeof($statsList);$count++)
+      {
+        $statInfo = &$statsList[$count];
+        $multiplier = 1;
+        // whole word matches have a double weight
+        if ($statInfo["full"]) $multiplier=2;
+        fseek($file,$statInfo["index"]); 
+        $numDocs = readInt($file);
+        $docInfo = array();
+        // read docs info + occurrence frequency of the word
+        for ($i=0;$i<$numDocs;$i++)
+        {
+          $idx=readInt($file); 
+          $freq=readInt($file); 
+          $docInfo[$i]=array("idx"  => $idx,
+                             "freq" => $freq>>1,
+                             "rank" => 0.0,
+                             "hi"   => $freq&1
+                            );
+          if ($freq&1) // word occurs in high priority doc
+          {
+            $totalHi++;
+            $totalFreqHi+=$freq*$multiplier;
+          }
+          else // word occurs in low priority doc
+          {
+            $totalFreqLo+=$freq*$multiplier;
+          }
+        }
+        // read name and url info for the doc
+        for ($i=0;$i<$numDocs;$i++)
+        {
+          fseek($file,$docInfo[$i]["idx"]);
+          $docInfo[$i]["name"]=readString($file);
+          $docInfo[$i]["url"]=readString($file);
+        }
+        $statInfo["docs"]=$docInfo;
+      }
+      $totalFreq=($totalHi+1)*$totalFreqLo + $totalFreqHi;
+      for ($count=$start;$count<sizeof($statsList);$count++)
+      {
+        $statInfo = &$statsList[$count];
+        $multiplier = 1;
+        // whole word matches have a double weight
+        if ($statInfo["full"]) $multiplier=2;
+        for ($i=0;$i<sizeof($statInfo["docs"]);$i++)
+        {
+          $docInfo = &$statInfo["docs"];
+          // compute frequency rank of the word in each doc
+          $freq=$docInfo[$i]["freq"];
+          if ($docInfo[$i]["hi"])
+          {
+            $statInfo["docs"][$i]["rank"]=
+              (float)($freq*$multiplier+$totalFreqLo)/$totalFreq;
+          }
+          else
+          {
+            $statInfo["docs"][$i]["rank"]=
+              (float)($freq*$multiplier)/$totalFreq;
+          }
+        }
+      }
+    }
+  }
+  return $statsList;
+}
+
+function combine_results($results,&$docs)
+{
+  foreach ($results as $wordInfo)
+  {
+    $docsList = &$wordInfo["docs"];
+    foreach ($docsList as $di)
+    {
+      $key=$di["url"];
+      $rank=$di["rank"];
+      if (isset($docs[$key]))
+      {
+        $docs[$key]["rank"]+=$rank;
+      }
+      else
+      {
+        $docs[$key] = array("url"=>$key,
+            "name"=>$di["name"],
+            "rank"=>$rank
+            );
+      }
+      $docs[$key]["words"][] = array(
+               "word"=>$wordInfo["word"],
+               "match"=>$wordInfo["match"],
+               "freq"=>$di["freq"]
+               );
+    }
+  }
+  return $docs;
+}
+
+function filter_results($docs,&$requiredWords,&$forbiddenWords)
+{
+  $filteredDocs=array();
+  while (list ($key, $val) = each ($docs)) 
+  {
+    $words = &$docs[$key]["words"];
+    $copy=1; // copy entry by default
+    if (sizeof($requiredWords)>0)
+    {
+      foreach ($requiredWords as $reqWord)
+      {
+        $found=0;
+        foreach ($words as $wordInfo)
+        { 
+          $found = $wordInfo["word"]==$reqWord;
+          if ($found) break;
+        }
+        if (!$found) 
+        {
+          $copy=0; // document contains none of the required words
+          break;
+        }
+      }
+    }
+    if (sizeof($forbiddenWords)>0)
+    {
+      foreach ($words as $wordInfo)
+      {
+        if (in_array($wordInfo["word"],$forbiddenWords))
+        {
+          $copy=0; // document contains a forbidden word
+          break;
+        }
+      }
+    }
+    if ($copy) $filteredDocs[$key]=$docs[$key];
+  }
+  return $filteredDocs;
+}
+
+function compare_rank($a,$b)
+{
+  if ($a["rank"] == $b["rank"]) 
+  {
+    return 0;
+  }
+  return ($a["rank"]>$b["rank"]) ? -1 : 1; 
+}
+
+function sort_results($docs,&$sorted)
+{
+  $sorted = $docs;
+  usort($sorted,"compare_rank");
+  return $sorted;
+}
+
+function report_results(&$docs)
+{
+  echo "<div class=\"header\">";
+  echo "  <div class=\"headertitle\">\n";
+  echo "    <h1>".search_results()."</h1>\n";
+  echo "  </div>\n";
+  echo "</div>\n";
+  echo "<div class=\"searchresults\">\n";
+  echo "<table cellspacing=\"2\">\n";
+  $numDocs = sizeof($docs);
+  if ($numDocs==0)
+  {
+    echo "  <tr>\n";
+    echo "    <td colspan=\"2\">".matches_text(0)."</td>\n";
+    echo "  </tr>\n";
+  }
+  else
+  {
+    echo "  <tr>\n";
+    echo "    <td colspan=\"2\">".matches_text($numDocs);
+    echo "\n";
+    echo "    </td>\n";
+    echo "  </tr>\n";
+    $num=1;
+    foreach ($docs as $doc)
+    {
+      echo "  <tr>\n";
+      echo "    <td align=\"right\">$num.</td>";
+      echo     "<td><a class=\"el\" href=\"".$doc["url"]."\">".$doc["name"]."</a></td>\n";
+      echo "  <tr>\n";
+      echo "    <td></td><td class=\"tiny\">".report_matches()." ";
+      foreach ($doc["words"] as $wordInfo)
+      {
+        $word = $wordInfo["word"];
+        $matchRight = substr($wordInfo["match"],strlen($word));
+        echo "<b>$word</b>$matchRight(".$wordInfo["freq"].") ";
+      }
+      echo "    </td>\n";
+      echo "  </tr>\n";
+      $num++;
+    }
+  }
+  echo "</table>\n";
+  echo "</div>\n";
+}
+
+function run_query($query)
+{
+  if(strcmp('4.1.0', phpversion()) > 0) 
+  {
+    die("Error: PHP version 4.1.0 or above required!");
+  }
+  if (!($file=fopen("search/search.idx","rb"))) 
+  {
+    die("Error: Search index file could NOT be opened!");
+  }
+  if (readHeader($file)!="DOXS")
+  {
+    die("Error: Header of index file is invalid!");
+  }
+  $results = array();
+  $requiredWords = array();
+  $forbiddenWords = array();
+  $foundWords = array();
+  $word=strtok($query," ");
+  while ($word) // for each word in the search query
+  {
+    if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }
+    if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; }
+    if (!in_array($word,$foundWords))
+    {
+      $foundWords[]=$word;
+      search($file,strtolower($word),$results);
+    }
+    $word=strtok(" ");
+  }
+  fclose($file);
+  $docs = array();
+  combine_results($results,$docs);
+  // filter out documents with forbidden word or that do not contain
+  // required words
+  $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords);
+  // sort the results based on rank
+  $sorted = array();
+  sort_results($filteredDocs,$sorted);
+  return $sorted;
+}
+
+function main()
+{
+  $query = "";
+  if (array_key_exists("query", $_GET))
+  {
+    $query=$_GET["query"];
+  }
+  $sorted = run_query($query);
+  // Now output the HTML stuff...
+  // End the HTML form
+  end_form(preg_replace("/[^a-zA-Z0-9\-\_\.\x80-\xFF]/i", " ", $query ));
+  // report results to the user
+  report_results($sorted);
+  end_page();
+}
+</script>
diff --git a/templates/html/search_l.png b/templates/html/search_l.png
new file mode 100644
index 0000000..c872f4d
Binary files /dev/null and b/templates/html/search_l.png differ
diff --git a/templates/html/search_m.png b/templates/html/search_m.png
new file mode 100644
index 0000000..b429a16
Binary files /dev/null and b/templates/html/search_m.png differ
diff --git a/templates/html/search_noidx.css b/templates/html/search_noidx.css
new file mode 100644
index 0000000..69ded6e
--- /dev/null
+++ b/templates/html/search_noidx.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+    float: left;
+}
+
+#MSearchBox {
+    white-space : nowrap;
+    position: absolute;
+    float: none;
+    display: inline;
+    margin-top: 0px;
+    right: 0px;
+    width: 170px;
+    z-index: 102;
+    background-color: white;
+}
+
+#MSearchBox .left
+{
+    display:block;
+    position:absolute;
+    left:10px;
+    width:20px;
+    height:19px;
+    background:url('search_l.png') no-repeat;
+    background-position:right;
+}
+
+#MSearchSelect {
+    display:block;
+    position:absolute;
+    width:20px;
+    height:19px;
+}
+
+.left #MSearchSelect {
+    left:4px;
+}
+
+.right #MSearchSelect {
+    right:5px;
+}
+
+#MSearchField {
+    display:block;
+    position:absolute;
+    height:19px;
+    background:url('search_m.png') repeat-x;
+    border:none;
+    width:111px;
+    margin-left:20px;
+    padding-left:4px;
+    color: #909090;
+    outline: none;
+    font: 9pt Arial, Verdana, sans-serif;
+}
+
+#FSearchBox #MSearchField {
+    margin-left:15px;
+}
+
+#MSearchBox .right {
+    display:block;
+    position:absolute;
+    right:10px;
+    top:0px;
+    width:20px;
+    height:19px;
+    background:url('search_r.png') no-repeat;
+    background-position:left;
+}
+
+#MSearchClose {
+    display: none;
+    position: absolute;
+    top: 4px;
+    background : none;
+    border: none;
+    margin: 0px 4px 0px 0px;
+    padding: 0px 0px;
+    outline: none;
+}
+
+.left #MSearchClose {
+    left: 6px;
+}
+
+.right #MSearchClose {
+    right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid ##A0;
+    background-color: ##FA;
+    z-index: 1;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-top-left-radius: 4px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+    font: 8pt Arial, Verdana, sans-serif;
+    padding-left:  2px;
+    padding-right: 12px;
+    border: 0px;
+}
+
+span.SelectionMark {
+    margin-right: 4px;
+    font-family: monospace;
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem {
+    display: block;
+    outline-style: none;
+    color: #000000; 
+    text-decoration: none;
+    padding-left:   6px;
+    padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+    color: #000000; 
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem:hover {
+    color: #FFFFFF;
+    background-color: ##50;
+    outline-style: none;
+    text-decoration: none;
+    cursor: pointer;
+    display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+    width: 60ex;
+    height: 15em;
+}
+
+#MSearchResultsWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #000;
+    background-color: ##F0;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+    clear:both; 
+    padding-bottom: 15px;
+}
+
+.SREntry {
+    font-size: 10pt;
+    padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+    font-size: 8pt;
+    padding: 1px 5px;
+}
+
+body.SRPage {
+    margin: 5px 2px;
+}
+
+.SRChildren {
+    padding-left: 3ex; padding-bottom: .5em 
+}
+
+.SRPage .SRChildren {
+    display: none;
+}
+
+.SRSymbol {
+    font-weight: bold; 
+    color: ##58;
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRScope {
+    display: block;
+    color: ##58; 
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+    text-decoration: underline;
+}
+
+span.SRScope {
+    padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+}
+
+.SRResult {
+    display: none;
+}
+
+DIV.searchresults {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+    background-color: ##F2;
+}
+
+.pages b {
+   color: white;
+   padding: 5px 5px 3px 5px;
+   background-image: url("../tab_a.png");
+   background-repeat: repeat-x;
+   text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+    line-height: 17px;
+    margin-left: 4px;
+    text-decoration: none;
+}
+
+.hl {
+    font-weight: bold;
+}
+
+#searchresults {
+    margin-bottom: 20px;
+}
+
+.searchpages {
+    margin-top: 10px;
+}
+
diff --git a/templates/html/search_opensearch.php b/templates/html/search_opensearch.php
new file mode 100644
index 0000000..e3a4634
--- /dev/null
+++ b/templates/html/search_opensearch.php
@@ -0,0 +1,127 @@
+<script language="PHP">
+require "search_functions.php";
+
+$mode = array_key_exists('v', $_GET)?$_GET['v']:"";
+$query = array_key_exists('query', $_GET)?$_GET['query']:"";
+
+$query_results = run_query($query);
+
+switch ($mode)
+{
+  case "opensearch.xml":
+    opensearch_description();
+    break;
+  case "json":
+    opensearch_json_results($query, $query_results);
+    break;
+  case "xml":
+    opensearch_xml_results($query, $query_results);
+    break;
+  default:
+    invalid_format($query, $query_results);
+    break;
+}
+
+function opensearch_description()
+{
+  global $config;
+  global $translator;
+
+  $shortname = $translator['search']." ".$config['PROJECT_NAME'];
+  $link = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']);
+  header("Content-Type: application/xml");
+  echo <<<END_OPENSEARCH
+<?xml version="1.0" encoding="UTF-8"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
+<ShortName>$shortname</ShortName>
+<Description>Doxygen Search</Description>
+<InputEncoding>UTF-8</InputEncoding>
+<!--
+<Image height="16" width="16" type="image/x-icon">
+http://dev.squello.com/doc/html/favicon.ico</Image>
+-->
+<Url type="text/html" method="GET"
+template="$link/search.php?query={searchTerms}" />
+<Url type="application/x-suggestions+json" method="GET"
+template="$link/search_opensearch.php?v=json&amp;query={searchTerms}" />
+<Url type="application/x-suggestions+xml" method="GET"
+template="$link/search_opensearch.php?v=xml&amp;query={searchTerms}" />
+</OpenSearchDescription>
+END_OPENSEARCH;
+}
+
+function opensearch_xml_results($query, array $results)
+{
+  // Much as I hate copy'n'paste code re-use, this is for testing;
+  // I expect a richer version to come soon.
+  // Although I hate that IE does this richer than FF more...
+  $qs_results = array();
+  foreach ($results as $i => $val)
+  {
+    foreach ($val['words'] as $j => $word)
+    {
+      if (array_key_exists($word, $qs_results))
+        $qs_results[$word['match']]++;
+      else
+        $qs_results[$word['match']] = 1;
+    }
+  }
+  $result = <<<END_FRAG
+<?xml version="1.0"?>
+<SearchSuggestion xmlns="http://schemas.microsoft.com/Search/2008/suggestions">
+<Query>$query</Query>
+<Section>
+END_FRAG;
+  foreach ($qs_results as $word => $count)
+  {
+    $result .= <<<END_FRAG
+<Item>
+<Text>$word</Text>
+<Description>$count results</Description>
+</Item>
+END_FRAG;
+  }
+  $result .= <<<END_FRAG
+</Section>
+</SearchSuggestion>
+END_FRAG;
+  echo $result;
+}
+
+function opensearch_json_results($query, array $results)
+{
+  $qs_results = array();
+  foreach ($results as $i => $val)
+  {
+    foreach ($val['words'] as $j => $word)
+    {
+      if (array_key_exists($word, $qs_results))
+        $qs_results[$word['match']]++;
+      else
+        $qs_results[$word['match']] = 1;
+    }
+  }
+  $result = '["'.$query.'", [';
+  $json_words = "";
+  $json_descriptions = "";
+  $i = 0;
+  foreach ($qs_results as $word => $count)
+  {
+    if ($i != 0)
+    {
+      $json_words .= ", ";
+      $json_descriptions .= ", ";
+    }
+    $json_words .= '"'.$word.'"';
+    $json_descriptions .= '"'.$count.' result'.($count==1?'':'s').'"';
+    $i++;
+  }
+  print "[\"$query\", [$json_words],[$json_descriptions]]";
+}
+
+function invalid_format($query, array $results)
+{
+  print "Search results for '$query':\n\n";
+  print_r($results);
+}
+</script>
diff --git a/templates/html/search_r.png b/templates/html/search_r.png
new file mode 100644
index 0000000..97ee8b4
Binary files /dev/null and b/templates/html/search_r.png differ
diff --git a/templates/html/splitbar.lum b/templates/html/splitbar.lum
new file mode 100644
index 0000000..d5f0595
--- /dev/null
+++ b/templates/html/splitbar.lum
@@ -0,0 +1,1028 @@
+# vertical split bar for treeview
+# width & height
+6 1024
+# luma data
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
diff --git a/templates/html/svgpan.js b/templates/html/svgpan.js
new file mode 100644
index 0000000..4218e79
--- /dev/null
+++ b/templates/html/svgpan.js
@@ -0,0 +1,319 @@
+/**
+ * The code below is based on SVGPan Library 1.2 and was modified for doxygen
+ * to support both zooming and panning via the mouse and via embedded bottons.
+ *
+ * This code is licensed under the following BSD license:
+ *
+ * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ * 
+ *    1. Redistributions of source code must retain the above copyright notice, this list of
+ *       conditions and the following disclaimer.
+ * 
+ *    2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *       of conditions and the following disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of Andrea Leofreddi.
+ */
+
+var root = document.documentElement;
+var state = 'none';
+var stateOrigin;
+var stateTf = root.createSVGMatrix();
+var cursorGrab = ' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move';
+var zoomSteps = 10;
+var zoomInFactor;
+var zoomOutFactor;
+var windowWidth;
+var windowHeight;
+var svgDoc;
+var minZoom;
+var maxZoom;
+if (!window) window=this;
+
+/**
+ * Show the graph in the middle of the view, scaled to fit 
+ */
+function show()
+{
+  if (window.innerHeight) // Firefox
+  {
+    windowWidth = window.innerWidth;
+    windowHeight = window.innerHeight;
+  }
+  else if (document.documentElement.clientWidth) // Chrome/Safari
+  {
+    windowWidth = document.documentElement.clientWidth
+    windowHeight = document.documentElement.clientHeight
+  }
+  if (!windowWidth || !windowHeight) // failsafe
+  {
+    windowWidth = 800;
+    windowHeight = 600;
+  }
+  minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);
+  maxZoom = minZoom+1.5;
+  zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps);
+  zoomOutFactor = 1.0/zoomInFactor;
+
+  var g = svgDoc.getElementById('viewport');
+  try
+  {
+    var bb = g.getBBox(); // this can throw an exception if css { display: none }
+    var tx = (windowWidth-viewWidth*minZoom+8)/(2*minZoom);
+    var ty = viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);
+    var a = 'scale('+minZoom+') rotate(0) translate('+tx+' '+ty+')';
+    g.setAttribute('transform',a);
+  }
+  catch(e) {}
+}
+
+/**
+ * Register handlers
+ */
+function init(evt) 
+{
+  svgDoc = evt.target.ownerDocument;
+  if (top.window && top.window.registerShow) // register show function in html doc for dynamic sections
+  {
+    top.window.registerShow(sectionId,show);
+  }
+  show();
+
+  setAttributes(root, {
+     "onmousedown" : "handleMouseDown(evt)",
+     "onmousemove" : "handleMouseMove(evt)",
+     "onmouseup"   : "handleMouseUp(evt)"
+  });
+
+  if (window.addEventListener)
+  {
+    if (navigator.userAgent.toLowerCase().indexOf('webkit') >= 0 || 
+        navigator.userAgent.toLowerCase().indexOf("opera") >= 0 || 
+        navigator.appVersion.indexOf("MSIE") != -1)
+    {
+      window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari/IE9
+    }
+    else
+    {
+      window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others
+    }
+  }
+}
+
+window.onresize=function()
+{
+  if (svgDoc) { show(); }
+}
+
+/**
+ * Instance an SVGPoint object with given event coordinates.
+ */
+function getEventPoint(evt) 
+{
+  var p = root.createSVGPoint();
+  p.x = evt.clientX;
+  p.y = evt.clientY;
+  return p;
+}
+
+/**
+ * Sets the current transform matrix of an element.
+ */
+function setCTM(element, matrix) 
+{
+  var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
+  element.setAttribute("transform", s);
+}
+
+/**
+ * Sets attributes of an element.
+ */
+function setAttributes(element, attributes)
+{
+  for (i in attributes)
+    element.setAttributeNS(null, i, attributes[i]);
+}
+
+function doZoom(g,point,zoomFactor)
+{
+  var p = point.matrixTransform(g.getCTM().inverse());
+  var k = root.createSVGMatrix().translate(p.x, p.y).scale(zoomFactor).translate(-p.x, -p.y);
+  var n = g.getCTM().multiply(k);
+  var s = Math.max(n.a,n.d);
+  if      (s>maxZoom) n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);
+  else if (s<minZoom) n=n.translate(p.x,p.y).scale(minZoom/s).translate(-p.x,-p.y);
+  setCTM(g, n);
+  stateTf = stateTf.multiply(n.inverse());
+}
+
+/**
+ * Handle mouse move event.
+ */
+function handleMouseWheel(evt) 
+{
+  if (!evt) evt = window.evt;
+  if (!evt.shiftKey) return; // only zoom when shift is pressed
+  if (evt.preventDefault) evt.preventDefault();
+  evt.returnValue = false;
+
+  if (state!='pan')
+  {
+    var delta;
+    if (evt.wheelDelta)
+    {
+      delta = evt.wheelDelta / 7200; // Opera/Chrome/IE9/Safari
+    }
+    else
+    {
+      delta = evt.detail / -180; // Mozilla
+    }
+    var svgDoc = evt.target.ownerDocument;
+    var g = svgDoc.getElementById("viewport");
+    var p = getEventPoint(evt);
+    doZoom(g,p,1+delta);
+  }
+}
+
+/**
+ * Handle mouse move event.
+ */
+function handleMouseMove(evt) 
+{
+  if(evt.preventDefault)
+    evt.preventDefault();
+
+  evt.returnValue = false;
+
+  var g = svgDoc.getElementById("viewport");
+
+  if (state == 'pan') 
+  {
+    // Pan mode
+    var p = getEventPoint(evt).matrixTransform(stateTf);
+    setCTM(g,stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));
+  } 
+}
+
+/**
+ * Handle click event.
+ */
+function handleMouseDown(evt) 
+{
+  if(evt.preventDefault)
+    evt.preventDefault();
+  evt.returnValue = false;
+  var g = svgDoc.getElementById("viewport");
+  state = 'pan';
+  stateTf = g.getCTM().inverse();
+  stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
+  g.style.cursor = cursorGrab;
+}
+
+/**
+ * Handle mouse button release event.
+ */
+function handleMouseUp(evt) 
+{
+  if (evt.preventDefault) evt.preventDefault();
+  evt.returnValue = false;
+  var g = svgDoc.getElementById("viewport");
+  g.style.cursor = "default";
+  // Quit pan mode
+  state = '';
+}
+
+/**
+ * Dumps a matrix to a string (useful for debug).
+ */
+function dumpMatrix(matrix) 
+{
+  var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n  " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n  0, 0, 1 ]";
+  return s;
+}
+
+/**
+ * Handler for pan buttons
+ */
+function handlePan(x,y)
+{
+  var g = svgDoc.getElementById("viewport");
+  setCTM(g,g.getCTM().translate(x*20/minZoom,y*20/minZoom));
+}
+
+/**
+ * Handle reset button
+ */
+function handleReset()
+{
+  show();
+}
+
+/**
+ * Handler for zoom buttons
+ */
+function handleZoom(evt,direction)
+{
+  var g = svgDoc.getElementById("viewport");
+  var factor = direction=='in' ? zoomInFactor : zoomOutFactor;
+  var m = g.getCTM();
+  var p = root.createSVGPoint();
+  p.x = windowWidth/2;
+  p.y = windowHeight/2;
+  doZoom(g,p,factor);
+}
+
+function serializeXmlNode(xmlNode) 
+{
+  if (typeof window.XMLSerializer != "undefined") {
+    return (new window.XMLSerializer()).serializeToString(xmlNode);
+  } else if (typeof xmlNode.xml != "undefined") {
+    return xmlNode.xml;
+  }
+  return "";
+}
+
+/** 
+ * Handler for print function
+ */
+function handlePrint(evt)
+{
+  evt.returnValue = false;
+  var g = svgDoc.getElementById("graph");
+  var xs = serializeXmlNode(g);
+  try {
+    var w = window.open('about:blank','_blank','width='+windowWidth+',height='+windowHeight+
+                        ',toolbar=0,status=0,menubar=0,scrollbars=0,resizable=0,location=0,directories=0');
+    var d = w.document;
+    d.write('<html xmlns="http://www.w3.org/1999/xhtml" '+
+            'xmlns:svg="http://www.w3.org/2000/svg" '+
+            'xmlns:xlink="http://www.w3.org/1999/xlink">');
+    d.write('<head><title>Print SVG</title></head>');
+    d.write('<body style="margin: 0px; padding: 0px;" onload="window.print();">');
+    d.write('<div id="svg" style="width:'+windowWidth+'px; height:'+windowHeight+'px;">'+xs+'</div>');
+    d.write('</body>');
+    d.write('</html>');
+    d.close();
+  } catch(e) {
+    alert('Failed to open popup window needed for printing!\n'+e.message);
+  }
+}
+
+
+
+
diff --git a/templates/html/sync_off.luma b/templates/html/sync_off.luma
new file mode 100644
index 0000000..6f7567c
--- /dev/null
+++ b/templates/html/sync_off.luma
@@ -0,0 +1,54 @@
+# synchonized view disabled button
+# width & height
+24 24
+# luma data
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 138 128 128 128 128 128 128 133 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 129 205 186 128 128 128 128 128 128 160 210 134 128 128 128 128 128 128
+128 128 128 128 128 139 217 255 181 128 128 128 128 128 128 152 255 229 147 128 128 128 128 128
+128 128 128 128 156 236 255 255 181 128 128 128 128 128 128 152 255 255 243 164 128 128 128 128
+128 128 128 175 249 255 255 255 223 196 198 198 128 128 197 211 255 255 255 253 186 128 128 128
+128 128 202 255 255 255 255 255 255 255 255 225 128 128 255 255 255 255 255 255 255 214 128 128
+128 128 217 255 255 255 255 255 255 255 255 128 128 198 255 255 255 255 255 255 255 225 128 128
+128 128 128 189 255 255 255 255 238 224 225 128 128 225 224 232 255 255 255 255 201 128 128 128
+128 128 128 128 167 245 255 255 183 128 128 128 128 128 128 155 255 255 250 179 128 128 128 128
+128 128 128 128 128 150 231 255 188 128 128 128 128 128 128 161 255 238 158 128 128 128 128 128
+128 128 128 128 128 128 136 216 188 128 128 128 128 128 128 161 223 142 128 128 128 128 128 128
+128 128 128 128 128 128 128 130 141 128 128 128 128 128 128 135 132 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+# alpha data
+  0   0   0   0   0   0   0  29  98 157 207 231 234 211 164 104  38   0   0   0   0   0   0   0
+  0   0   0   0   0  21 143 234 255 255 255 255 255 255 255 255 244 155  33   0   0   0   0   0
+  0   0   0   0  70 221 255 255 255 255 255 255 255 255 255 255 255 255 235  93   0   0   0   0
+  0   0   0  92 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 116   0   0   0
+  0   0  68 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  96   0   0
+  0  20 225 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 243  41   0
+  0 143 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 172   1
+ 28 238 255 255 255 255 255 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  42
+ 99 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 133
+160 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204
+212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224
+234 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 237 255 236
+235 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 255 236
+216 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 226
+168 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 208
+107 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 147
+ 39 245 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  53
+  0 159 255 255 255 255 255 255 251 255 255 255 255 255 255 255 255 255 255 255 255 255 190   3
+  0  31 239 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249  54   0
+  0   0  91 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 119   0   0
+  0   0   0 116 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 145   0   0   0
+  0   0   0   0  98 240 255 255 255 255 255 255 255 255 255 255 255 255 248 119   0   0   0   0
+  0   0   0   0   0  45 168 252 255 255 255 255 255 255 255 255 255 184  58   0   0   0   0   0
+  0   0   0   0   0   0   0  45 131 201 222 234 236 224 204 142  54   0   0   0   0   0   0   0
+
diff --git a/templates/html/sync_on.luma b/templates/html/sync_on.luma
new file mode 100644
index 0000000..ca79254
--- /dev/null
+++ b/templates/html/sync_on.luma
@@ -0,0 +1,54 @@
+# synchonized view enabled button
+# width & height
+24 24
+# luma data
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 138 128 128 128 128 133 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 129 205 186 128 128 128 128 160 210 134 128 128 128 128 128 128 128
+128 128 128 128 128 128 139 217 255 181 128 128 128 128 152 255 229 147 128 128 128 128 128 128
+128 128 128 128 128 156 236 255 255 181 128 128 128 128 152 255 255 243 164 128 128 128 128 128
+128 128 128 128 175 249 255 255 255 223 196 198 198 197 211 255 255 255 253 186 128 128 128 128
+128 128 133 202 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 214 137 128 128
+128 128 135 217 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 225 140 128 128
+128 128 128 128 189 255 255 255 255 238 224 225 225 224 232 255 255 255 255 201 131 128 128 128
+128 128 128 128 128 167 245 255 255 183 128 128 128 128 155 255 255 250 179 128 128 128 128 128
+128 128 128 128 128 128 150 231 255 188 128 128 128 128 161 255 238 158 128 128 128 128 128 128
+128 128 128 128 128 128 128 136 216 188 128 128 128 128 161 223 142 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 130 141 128 128 128 128 135 132 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+# alpha data
+  0   0   0   0   0   0   0  29  98 157 207 231 234 211 164 104  38   0   0   0   0   0   0   0
+  0   0   0   0   0  21 143 234 255 255 255 255 255 255 255 255 244 155  33   0   0   0   0   0
+  0   0   0   0  70 221 255 255 255 255 255 255 255 255 255 255 255 255 235  93   0   0   0   0
+  0   0   0  92 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 116   0   0   0
+  0   0  68 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  96   0   0
+  0  20 225 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 243  41   0
+  0 143 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 172   1
+ 28 238 255 255 255 255 255 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  42
+ 99 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 133
+160 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204
+212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224
+234 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 237 255 236
+235 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 255 236
+216 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 226
+168 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 208
+107 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 147
+ 39 245 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255  53
+  0 159 255 255 255 255 255 255 251 255 255 255 255 255 255 255 255 255 255 255 255 255 190   3
+  0  31 239 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249  54   0
+  0   0  91 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 119   0   0
+  0   0   0 116 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 145   0   0   0
+  0   0   0   0  98 240 255 255 255 255 255 255 255 255 255 255 255 255 248 119   0   0   0   0
+  0   0   0   0   0  45 168 252 255 255 255 255 255 255 255 255 255 184  58   0   0   0   0   0
+  0   0   0   0   0   0   0  45 131 201 222 234 236 224 204 142  54   0   0   0   0   0   0   0
+
diff --git a/templates/html/tab_a.lum b/templates/html/tab_a.lum
new file mode 100644
index 0000000..2d1dbcf
--- /dev/null
+++ b/templates/html/tab_a.lum
@@ -0,0 +1,8 @@
+# active tab background luma
+# width & height
+1 36
+# luma data
+31  42  59  69  73  74  75  77  77
+77  79  80  80  82  81  83  84  86
+87  88  89  90  91  91  93  94  94
+96  96  97  98  98  99  99  99 100
diff --git a/templates/html/tab_b.lum b/templates/html/tab_b.lum
new file mode 100644
index 0000000..48e9c42
--- /dev/null
+++ b/templates/html/tab_b.lum
@@ -0,0 +1,8 @@
+# normal tab background luma
+# width & height
+1 36
+# luma data
+218 228 235 233 230 227 225 222 221
+218 217 215 214 213 212 211 210 209
+209 197 198 199 200 201 202 203 204
+205 207 209 211 213 217 219 206 188
diff --git a/templates/html/tab_h.lum b/templates/html/tab_h.lum
new file mode 100644
index 0000000..57d9d47
--- /dev/null
+++ b/templates/html/tab_h.lum
@@ -0,0 +1,8 @@
+# hovering tab background luma
+# width & height
+1 36
+# luma data
+181 191 198 196 193 190 188 185 184
+181 180 178 177 176 175 174 173 172
+172 154 155 156 157 158 159 160 161
+162 164 166 168 170 174 176 163 145
diff --git a/templates/html/tab_s.lum b/templates/html/tab_s.lum
new file mode 100644
index 0000000..152ce16
--- /dev/null
+++ b/templates/html/tab_s.lum
@@ -0,0 +1,8 @@
+# tab separator
+# width & height
+1 36
+# luma data
+187 186 185 183 182 181 180 178 176
+174 173 171 169 167 164 163 161 158
+156 154 152 150 148 145 143 141 140
+138 136 134 131 131 128 126 125 124
diff --git a/templates/html/tabs.css b/templates/html/tabs.css
new file mode 100644
index 0000000..737d559
--- /dev/null
+++ b/templates/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
+    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+    font-size: 10px;
+}
+.tabs3 {
+    font-size: 9px;
+}
+
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
+}
+
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
+}
+
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: ##30;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
+}
+
+.tabs3 .tablist a {
+    padding: 0 10px;
+}
+
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
+}
+
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty
new file mode 100644
index 0000000..c423e12
--- /dev/null
+++ b/templates/latex/doxygen.sty
@@ -0,0 +1,478 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+
+% Packages used by this style file
+\RequirePackage{alltt}
+\RequirePackage{array}
+\RequirePackage{calc}
+\RequirePackage{float}
+\RequirePackage{ifthen}
+\RequirePackage{verbatim}
+\RequirePackage[table]{xcolor}
+\RequirePackage{xtab}
+
+%---------- Internal commands used in this style file ----------------
+
+\newcommand{\ensurespace}[1]{%
+  \begingroup%
+    \setlength{\dimen@}{#1}%
+    \vskip\z@\@plus\dimen@%
+    \penalty -100\vskip\z@\@plus -\dimen@%
+    \vskip\dimen@%
+    \penalty 9999%
+    \vskip -\dimen@%
+    \vskip\z@skip% hide the previous |\vskip| from |\addvspace|
+  \endgroup%
+}
+
+\newcommand{\DoxyLabelFont}{}
+\newcommand{\entrylabel}[1]{%
+  {%
+    \parbox[b]{\labelwidth-4pt}{%
+      \makebox[0pt][l]{\DoxyLabelFont#1}%
+      \vspace{1.5\baselineskip}%
+    }%
+  }%
+}
+
+\newenvironment{DoxyDesc}[1]{%
+  \ensurespace{4\baselineskip}%
+  \begin{list}{}{%
+    \settowidth{\labelwidth}{20pt}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\itemsep}{0pt}%
+    \setlength{\leftmargin}{\labelwidth+\labelsep}%
+    \renewcommand{\makelabel}{\entrylabel}%
+  }%
+  \item[#1]%
+}{%
+  \end{list}%
+}
+
+\newsavebox{\xrefbox}
+\newlength{\xreflength}
+\newcommand{\xreflabel}[1]{%
+  \sbox{\xrefbox}{#1}%
+  \setlength{\xreflength}{\wd\xrefbox}%
+  \ifthenelse{\xreflength>\labelwidth}{%
+    \begin{minipage}{\textwidth}%
+      \setlength{\parindent}{0pt}%
+      \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
+    \end{minipage}%
+  }{%
+   \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
+  }%
+}
+
+%---------- Commands used by doxygen LaTeX output generator ----------
+
+% Used by <pre> ... </pre>
+\newenvironment{DoxyPre}{%
+  \small%
+  \begin{alltt}%
+}{%
+  \end{alltt}%
+  \normalsize%
+}
+
+% Used by @code ... @endcode
+\newenvironment{DoxyCode}{%
+  \par%
+  \scriptsize%
+  \begin{alltt}%
+}{%
+  \end{alltt}%
+  \normalsize%
+}
+
+% Used by @example, @include, @includelineno and @dontinclude
+\newenvironment{DoxyCodeInclude}{%
+  \DoxyCode%
+}{%
+  \endDoxyCode%
+}
+
+% Used by @verbatim ... @endverbatim
+\newenvironment{DoxyVerb}{%
+  \footnotesize%
+  \verbatim%
+}{%
+  \endverbatim%
+  \normalsize%
+}
+
+% Used by @verbinclude
+\newenvironment{DoxyVerbInclude}{%
+  \DoxyVerb%
+}{%
+  \endDoxyVerb%
+}
+
+% Used by numbered lists (using '-#' or <ol> ... </ol>)
+\newenvironment{DoxyEnumerate}{%
+  \enumerate%
+}{%
+  \endenumerate%
+}
+
+% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
+\newenvironment{DoxyItemize}{%
+  \itemize%
+}{%
+  \enditemize%
+}
+
+% Used by description lists (using <dl> ... </dl>)
+\newenvironment{DoxyDescription}{%
+  \description%
+}{%
+  \enddescription%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if caption is specified)
+\newenvironment{DoxyImage}{%
+  \begin{figure}[H]%
+    \begin{center}%
+}{%
+    \end{center}%
+  \end{figure}%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if no caption is specified)
+\newenvironment{DoxyImageNoCaption}{%
+}{%
+}
+
+% Used by @attention
+\newenvironment{DoxyAttention}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @author and @authors
+\newenvironment{DoxyAuthor}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @date
+\newenvironment{DoxyDate}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @invariant
+\newenvironment{DoxyInvariant}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @note
+\newenvironment{DoxyNote}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @post
+\newenvironment{DoxyPostcond}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @pre
+\newenvironment{DoxyPrecond}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @copyright
+\newenvironment{DoxyCopyright}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @remark
+\newenvironment{DoxyRemark}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @return and @returns
+\newenvironment{DoxyReturn}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @since
+\newenvironment{DoxySince}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @see
+\newenvironment{DoxySeeAlso}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @version
+\newenvironment{DoxyVersion}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @warning
+\newenvironment{DoxyWarning}[1]{%
+  \begin{DoxyDesc}{#1}%
+}{%
+  \end{DoxyDesc}%
+}
+
+% Used by @internal
+\newenvironment{DoxyInternal}[1]{%
+  \paragraph*{#1}%
+}{%
+}
+
+% Used by @par and @paragraph
+\newenvironment{DoxyParagraph}[1]{%
+  \begin{list}{}{%
+    \settowidth{\labelwidth}{40pt}%
+    \setlength{\leftmargin}{\labelwidth}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\itemsep}{-4pt}%
+    \renewcommand{\makelabel}{\entrylabel}%
+  }%
+  \item[#1]%
+}{%
+  \end{list}%
+}
+
+% Used by parameter lists
+\newenvironment{DoxyParams}[2][]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablefirsthead{}%
+    \tablehead{}%
+    \ifthenelse{\equal{#1}{}}%
+    {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+     \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+                        p{0.805\textwidth}|}}%
+    {\ifthenelse{\equal{#1}{1}}%
+      {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+       \begin{xtabular}{|>{\centering}p{0.10\textwidth}|%
+                         >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+                         p{0.678\textwidth}|}}%
+      {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+       \begin{xtabular}{|>{\centering}p{0.10\textwidth}|%
+                         >{\centering\hspace{0pt}}p{0.15\textwidth}|%
+                         >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+                         p{0.501\textwidth}|}}%
+    }\hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used for fields of simple structs
+\newenvironment{DoxyFields}[1]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablehead{}%
+    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+                         p{0.15\textwidth}|%
+                         p{0.63\textwidth}|}%
+    \hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used for parameters within a detailed function description
+\newenvironment{DoxyParamCaption}{%
+  \renewcommand{\item}[2][]{##1 {\em ##2}}%
+}{%
+}
+
+% Used by return value lists
+\newenvironment{DoxyRetVals}[1]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablehead{}%
+    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+                          p{0.705\textwidth}|}%
+    \hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used by exception lists
+\newenvironment{DoxyExceptions}[1]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablehead{}%
+    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+                          p{0.705\textwidth}|}%
+    \hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used by template parameter lists
+\newenvironment{DoxyTemplParams}[1]{%
+    \par%
+    \tabletail{\hline}%
+    \tablelasttail{\hline}%
+    \tablehead{}%
+    \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+    \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+                          p{0.705\textwidth}|}%
+    \hline%
+}{%
+    \end{xtabular}%
+    \tablefirsthead{}%
+    \vspace{6pt}%
+}
+
+% Used for member lists
+\newenvironment{DoxyCompactItemize}{%
+  \begin{itemize}%
+    \setlength{\itemsep}{-3pt}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\topsep}{0pt}%
+    \setlength{\partopsep}{0pt}%
+}{%
+  \end{itemize}%
+}
+
+% Used for member descriptions
+\newenvironment{DoxyCompactList}{%
+  \begin{list}{}{%
+    \setlength{\leftmargin}{0.5cm}%
+    \setlength{\itemsep}{0pt}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\topsep}{0pt}%
+    \renewcommand{\makelabel}{\hfill}%
+  }%
+}{%
+  \end{list}%
+}
+
+% Used for reference lists (@bug, @deprecated, @todo, etc.)
+\newenvironment{DoxyRefList}{%
+  \begin{list}{}{%
+    \setlength{\labelwidth}{10pt}%
+    \setlength{\leftmargin}{\labelwidth}%
+    \addtolength{\leftmargin}{\labelsep}%
+    \renewcommand{\makelabel}{\xreflabel}%
+  }%
+}{%
+  \end{list}%
+}
+
+% Used by @bug, @deprecated, @todo, etc.
+\newenvironment{DoxyRefDesc}[1]{%
+  \begin{list}{}{%
+    \renewcommand\makelabel[1]{\textbf{##1}}%
+    \settowidth\labelwidth{\makelabel{#1}}%
+    \setlength\leftmargin{\labelwidth+\labelsep}%
+  }%
+}{%
+  \end{list}%
+}
+
+% Used by parameter lists and simple sections
+\newenvironment{Desc}
+{\begin{list}{}{%
+    \settowidth{\labelwidth}{40pt}%
+    \setlength{\leftmargin}{\labelwidth}%
+    \setlength{\parsep}{0pt}%
+    \setlength{\itemsep}{-4pt}%
+    \renewcommand{\makelabel}{\entrylabel}%
+  }
+}{%
+  \end{list}%
+}
+
+% Used by tables
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
+\newlength{\tmplength}%
+\newenvironment{TabularC}[1]%
+{%
+\setlength{\tmplength}%
+     {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}%
+      \par\begin{xtabular*}{\linewidth}%
+             {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}%
+}%
+{\end{xtabular*}\par}%
+
+% Used by nested tables
+\newenvironment{TabularNC}[1]%
+{%
+\setlength{\tmplength}%
+     {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}%
+      \par\begin{tabular*}{\linewidth}%
+             {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}%
+}%
+{\end{tabular*}\par}%
+
+% Used for member group headers
+\newenvironment{Indent}{%
+  \begin{list}{}{%
+    \setlength{\leftmargin}{0.5cm}%
+  }%
+  \item[]\ignorespaces%
+}{%
+  \unskip%
+  \end{list}%
+}
+
+% Used when hyperlinks are turned off
+\newcommand{\doxyref}[3]{%
+  \textbf{#1} (\textnormal{#2}\,\pageref{#3})%
+}
+
+% Used by @addindex
+\newcommand{\lcurly}{\{}
+\newcommand{\rcurly}{\}}
+
+% Used for syntax highlighting
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
diff --git a/templates/xml/compound.xsd b/templates/xml/compound.xsd
new file mode 100644
index 0000000..be897c3
--- /dev/null
+++ b/templates/xml/compound.xsd
@@ -0,0 +1,844 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <xsd:element name="doxygen" type="DoxygenType"/>
+
+  <!-- Complex types -->
+
+  <xsd:complexType name="DoxygenType">
+    <xsd:sequence maxOccurs="unbounded">
+      <xsd:element name="compounddef" type="compounddefType" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="version" type="DoxVersionNumber" use="required" />
+  </xsd:complexType>
+
+  <xsd:complexType name="compounddefType">
+    <xsd:sequence>
+      <xsd:element name="compoundname" type="xsd:string"/>
+      <xsd:element name="title" type="xsd:string" minOccurs="0" />
+      <xsd:element name="basecompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="derivedcompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="includes" type="incType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="includedby" type="incType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="incdepgraph" type="graphType" minOccurs="0" />
+      <xsd:element name="invincdepgraph" type="graphType" minOccurs="0" />
+      <xsd:element name="innerdir" type="refType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="innerfile" type="refType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="innerclass" type="refType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="innernamespace" type="refType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="innerpage" type="refType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="innergroup" type="refType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
+      <xsd:element name="sectiondef" type="sectiondefType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
+      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
+      <xsd:element name="inheritancegraph" type="graphType" minOccurs="0" />
+      <xsd:element name="collaborationgraph" type="graphType" minOccurs="0" />
+      <xsd:element name="programlisting" type="listingType" minOccurs="0" />
+      <xsd:element name="location" type="locationType" minOccurs="0" />
+      <xsd:element name="listofallmembers" type="listofallmembersType" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string" />
+    <xsd:attribute name="kind" type="DoxCompoundKind" />
+    <xsd:attribute name="prot" type="DoxProtectionKind" />
+    <xsd:attribute name="final" type="DoxBool" use="optional"/>
+    <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
+    <xsd:attribute name="abstract" type="DoxBool" use="optional"/>
+  </xsd:complexType>
+
+  <xsd:complexType name="listofallmembersType">
+    <xsd:sequence>
+      <xsd:element name="member" type="memberRefType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="memberRefType">
+    <xsd:sequence>
+      <xsd:element name="scope" />
+      <xsd:element name="name" />
+    </xsd:sequence>
+    <xsd:attribute name="refid" type="xsd:string" />
+    <xsd:attribute name="prot" type="DoxProtectionKind" />
+    <xsd:attribute name="virt" type="DoxVirtualKind" />
+    <xsd:attribute name="ambiguityscope" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="compoundRefType">
+    <xsd:simpleContent>
+      <xsd:extension base="xsd:string">
+        <xsd:attribute name="refid" type="xsd:string" use="optional" />
+        <xsd:attribute name="prot" type="DoxProtectionKind" />
+        <xsd:attribute name="virt" type="DoxVirtualKind" />
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="reimplementType">
+    <xsd:simpleContent>
+      <xsd:extension base="xsd:string">
+        <xsd:attribute name="refid" type="xsd:string" />
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="incType">
+    <xsd:simpleContent>
+      <xsd:extension base="xsd:string">
+        <xsd:attribute name="refid" type="xsd:string" />
+        <xsd:attribute name="local" type="DoxBool" />
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="refType">
+    <xsd:simpleContent>
+      <xsd:extension base="xsd:string">
+        <xsd:attribute name="refid" type="xsd:string" />
+        <xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/>
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="refTextType">
+    <xsd:simpleContent>
+      <xsd:extension base="xsd:string">
+       <xsd:attribute name="refid" type="xsd:string" />
+       <xsd:attribute name="kindref" type="DoxRefKind" />
+       <xsd:attribute name="external" type="xsd:string" use="optional"/>
+       <xsd:attribute name="tooltip" type="xsd:string" use="optional"/>
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="sectiondefType">
+    <xsd:sequence>
+      <xsd:element name="header" type="xsd:string" minOccurs="0" />
+      <xsd:element name="description" type="descriptionType" minOccurs="0" />
+      <xsd:element name="memberdef" type="memberdefType" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="kind" type="DoxSectionKind" />
+  </xsd:complexType>
+
+  <xsd:complexType name="memberdefType">
+    <xsd:sequence>
+      <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
+      <xsd:element name="type" type="linkedTextType" minOccurs="0" />
+      <xsd:element name="definition" minOccurs="0" />
+      <xsd:element name="argsstring" minOccurs="0" />
+      <xsd:element name="name" />
+      <xsd:element name="read" minOccurs="0" />
+      <xsd:element name="write" minOccurs="0" />
+      <xsd:element name="bitfield" minOccurs="0" />
+      <xsd:element name="reimplements" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="reimplementedby" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="enumvalue" type="enumvalueType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
+      <xsd:element name="exceptions" type="linkedTextType" minOccurs="0" />
+      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
+      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
+      <xsd:element name="inbodydescription" type="descriptionType" minOccurs="0" />
+      <xsd:element name="location" type="locationType" />
+      <xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="kind" type="DoxMemberKind" />
+    <xsd:attribute name="id" type="xsd:string" />
+    <xsd:attribute name="prot" type="DoxProtectionKind" />
+    <xsd:attribute name="static" type="DoxBool" />
+    <xsd:attribute name="const" type="DoxBool" use="optional"/>
+    <xsd:attribute name="explicit" type="DoxBool" use="optional"/>
+    <xsd:attribute name="inline" type="DoxBool" use="optional"/>
+    <xsd:attribute name="virt" type="DoxVirtualKind" use="optional"/>
+    <xsd:attribute name="volatile" type="DoxBool" use="optional"/>
+    <xsd:attribute name="mutable" type="DoxBool" use="optional"/>
+    <!-- Qt property -->
+    <xsd:attribute name="readable" type="DoxBool" use="optional"/>
+    <xsd:attribute name="writable" type="DoxBool" use="optional"/>
+    <!-- C++/CLI variable -->
+    <xsd:attribute name="initonly" type="DoxBool" use="optional"/>
+    <!-- C++/CLI and C# property -->
+    <xsd:attribute name="settable" type="DoxBool" use="optional"/>
+    <xsd:attribute name="gettable" type="DoxBool" use="optional"/>
+    <!-- C++/CLI function -->
+    <xsd:attribute name="final" type="DoxBool" use="optional"/>
+    <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
+    <xsd:attribute name="new" type="DoxBool" use="optional"/>
+    <!-- C++/CLI event -->
+    <xsd:attribute name="add" type="DoxBool" use="optional"/>
+    <xsd:attribute name="remove" type="DoxBool" use="optional"/>
+    <xsd:attribute name="raise" type="DoxBool" use="optional"/>
+    <!-- Objective-C 2.0 protocol method -->
+    <xsd:attribute name="optional" type="DoxBool" use="optional"/>
+    <xsd:attribute name="required" type="DoxBool" use="optional"/>
+    <!-- Objective-C 2.0 property accessor -->
+    <xsd:attribute name="accessor" type="DoxAccessor" use="optional"/>
+    <!-- UNO IDL -->
+    <xsd:attribute name="attribute" type="DoxBool" use="optional"/>
+    <xsd:attribute name="property" type="DoxBool" use="optional"/>
+    <xsd:attribute name="readonly" type="DoxBool" use="optional"/>
+    <xsd:attribute name="bound" type="DoxBool" use="optional"/>
+    <xsd:attribute name="removable" type="DoxBool" use="optional"/>
+    <xsd:attribute name="contrained" type="DoxBool" use="optional"/>
+    <xsd:attribute name="transient" type="DoxBool" use="optional"/>
+    <xsd:attribute name="maybevoid" type="DoxBool" use="optional"/>
+    <xsd:attribute name="maybedefault" type="DoxBool" use="optional"/>
+    <xsd:attribute name="maybeambiguous" type="DoxBool" use="optional"/>
+
+  </xsd:complexType>
+
+  <xsd:complexType name="descriptionType" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="title" type="xsd:string" minOccurs="0"/>	    
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="internal" type="docInternalType" minOccurs="0" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="enumvalueType" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="name" />
+      <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
+      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
+      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string" />
+    <xsd:attribute name="prot" type="DoxProtectionKind" />
+  </xsd:complexType>
+
+  <xsd:complexType name="templateparamlistType">
+    <xsd:sequence>
+      <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="paramType">
+    <xsd:sequence>
+      <xsd:element name="type" type="linkedTextType" minOccurs="0" />
+      <xsd:element name="declname" minOccurs="0" />
+      <xsd:element name="defname" minOccurs="0" />
+      <xsd:element name="array" minOccurs="0" />
+      <xsd:element name="defval" type="linkedTextType" minOccurs="0" />
+      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="linkedTextType" mixed="true">
+    <xsd:sequence>
+    <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="graphType">
+    <xsd:sequence>
+      <xsd:element name="node" type="nodeType" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="nodeType">
+    <xsd:sequence>
+      <xsd:element name="label" />
+      <xsd:element name="link" type="linkType" minOccurs="0" />
+      <xsd:element name="childnode" type="childnodeType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="childnodeType">
+    <xsd:sequence>
+      <xsd:element name="edgelabel" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="refid" type="xsd:string" />
+    <xsd:attribute name="relation" type="DoxGraphRelation" />
+  </xsd:complexType>
+
+  <xsd:complexType name="linkType">
+    <xsd:attribute name="refid" type="xsd:string" />
+    <xsd:attribute name="external" type="xsd:string" use="optional"/>
+  </xsd:complexType>
+
+  <xsd:complexType name="listingType">
+    <xsd:sequence>
+      <xsd:element name="codeline" type="codelineType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="codelineType">
+    <xsd:sequence>
+      <xsd:element name="highlight" type="highlightType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="lineno" type="xsd:integer" />
+    <xsd:attribute name="refid" type="xsd:string" />
+    <xsd:attribute name="refkind" type="DoxRefKind" />
+    <xsd:attribute name="external" type="DoxBool" />
+  </xsd:complexType>
+
+  <xsd:complexType name="highlightType" mixed="true">
+    <xsd:choice minOccurs="0" maxOccurs="unbounded">
+      <xsd:element name="sp" />
+      <xsd:element name="ref" type="refTextType" />
+    </xsd:choice>
+    <xsd:attribute name="class" type="DoxHighlightClass" />
+  </xsd:complexType>
+
+  <xsd:complexType name="referenceType" mixed="true">
+    <xsd:attribute name="refid" type="xsd:string" />
+    <xsd:attribute name="compoundref" type="xsd:string" use="optional" />
+    <xsd:attribute name="startline" type="xsd:integer" />
+    <xsd:attribute name="endline" type="xsd:integer" />
+  </xsd:complexType>
+
+  <xsd:complexType name="locationType">
+    <xsd:attribute name="file" type="xsd:string" />
+    <xsd:attribute name="line" type="xsd:integer" />
+    <xsd:attribute name="column" type="xsd:integer" use="optional"/>
+    <xsd:attribute name="bodyfile" type="xsd:string" />
+    <xsd:attribute name="bodystart" type="xsd:integer" />
+    <xsd:attribute name="bodyend" type="xsd:integer" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docSect1Type" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="title" type="xsd:string" />	    
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="internal" type="docInternalS1Type" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docSect2Type" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="title" type="xsd:string" />	    
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="internal" type="docInternalS2Type" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docSect3Type" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="title" type="xsd:string" />	    
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect4" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="internal" type="docInternalS3Type" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docSect4Type" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="title" type="xsd:string" />	    
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="internal" type="docInternalS4Type" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docInternalType" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docInternalS1Type" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docInternalS2Type" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docInternalS3Type" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect3" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docInternalS4Type" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+ 
+  <xsd:group name="docTitleCmdGroup">
+    <xsd:choice>
+      <xsd:element name="ulink" type="docURLLink" />
+      <xsd:element name="bold" type="docMarkupType" />
+      <xsd:element name="emphasis" type="docMarkupType" />
+      <xsd:element name="computeroutput" type="docMarkupType" />
+      <xsd:element name="subscript" type="docMarkupType" />
+      <xsd:element name="superscript" type="docMarkupType" />
+      <xsd:element name="center" type="docMarkupType" />
+      <xsd:element name="small" type="docMarkupType" />
+      <xsd:element name="htmlonly" type="xsd:string" />
+      <xsd:element name="manonly" type="xsd:string" />
+      <xsd:element name="xmlonly" type="xsd:string" />
+      <xsd:element name="rtfonly" type="xsd:string" />
+      <xsd:element name="latexonly" type="xsd:string" />
+      <xsd:element name="dot" type="xsd:string" />
+      <xsd:element name="plantuml" type="xsd:string" />
+      <xsd:element name="anchor" type="docAnchorType" />
+      <xsd:element name="formula" type="docFormulaType" />
+      <xsd:element name="ref" type="docRefTextType" />
+      <!-- Automatically insert here the HTML entities -->
+    </xsd:choice>
+  </xsd:group>
+
+  <xsd:complexType name="docTitleType" mixed="true">
+    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+  </xsd:complexType>
+
+  <xsd:group name="docCmdGroup">
+    <xsd:choice>
+      <xsd:group ref="docTitleCmdGroup"/>
+      <xsd:element name="linebreak" type="docEmptyType" />
+      <xsd:element name="hruler" type="docEmptyType" />
+      <xsd:element name="preformatted" type="docMarkupType" />
+      <xsd:element name="programlisting" type="listingType" />
+      <xsd:element name="verbatim" type="xsd:string" />
+      <xsd:element name="indexentry" type="docIndexEntryType" />
+      <xsd:element name="orderedlist" type="docListType" />
+      <xsd:element name="itemizedlist" type="docListType" />
+      <xsd:element name="simplesect" type="docSimpleSectType" />
+      <xsd:element name="title" type="docTitleType" />
+      <xsd:element name="variablelist" type="docVariableListType" />
+      <xsd:element name="table" type="docTableType" />
+      <xsd:element name="heading" type="docHeadingType" />
+      <xsd:element name="image" type="docImageType" />
+      <xsd:element name="dotfile" type="docFileType" />
+      <xsd:element name="mscfile" type="docFileType" />
+      <xsd:element name="diafile" type="docFileType" />
+      <xsd:element name="toclist" type="docTocListType" />
+      <xsd:element name="language" type="docLanguageType" />
+      <xsd:element name="parameterlist" type="docParamListType" />
+      <xsd:element name="xrefsect" type="docXRefSectType" />
+      <xsd:element name="copydoc" type="docCopyType" />
+      <xsd:element name="blockquote" type="docBlockQuoteType" />
+      <xsd:element name="parblock" type="docParBlockType" />
+    </xsd:choice>
+  </xsd:group>
+
+  <xsd:complexType name="docParaType" mixed="true">
+    <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docMarkupType" mixed="true">
+    <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docURLLink" mixed="true">
+    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+    <xsd:attribute name="url" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docAnchorType" mixed="true">
+    <xsd:attribute name="id" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docFormulaType" mixed="true">
+    <xsd:attribute name="id" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docIndexEntryType">
+    <xsd:sequence>
+      <xsd:element name="primaryie" type="xsd:string" />
+      <xsd:element name="secondaryie" type="xsd:string" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docListType">
+    <xsd:sequence>
+      <xsd:element name="listitem" type="docListItemType" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docListItemType">
+    <xsd:sequence>
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docSimpleSectType">
+    <xsd:sequence>
+      <xsd:element name="title" type="docTitleType" minOccurs="0" />
+      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+        <xsd:element name="para" type="docParaType" minOccurs="1" maxOccurs="unbounded" />
+      </xsd:sequence>
+    </xsd:sequence>
+    <xsd:attribute name="kind" type="DoxSimpleSectKind" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docVarListEntryType">
+    <xsd:sequence>
+      <xsd:element name="term" type="docTitleType" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:group name="docVariableListGroup">
+    <xsd:sequence>
+      <xsd:element name="varlistentry" type="docVarListEntryType" />
+      <xsd:element name="listitem" type="docListItemType" />
+    </xsd:sequence>
+  </xsd:group>
+
+  <xsd:complexType name="docVariableListType">
+    <xsd:sequence>
+      <xsd:group ref="docVariableListGroup" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docRefTextType" mixed="true">
+    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+    <xsd:attribute name="refid" type="xsd:string" />
+    <xsd:attribute name="kindref" type="DoxRefKind" />
+    <xsd:attribute name="external" type="xsd:string" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docTableType">
+    <xsd:sequence>
+      <xsd:element name="row" type="docRowType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="caption" type="docCaptionType" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="rows" type="xsd:integer" />
+    <xsd:attribute name="cols" type="xsd:integer" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docRowType">
+    <xsd:sequence>
+      <xsd:element name="entry" type="docEntryType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docEntryType">
+    <xsd:sequence>
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="thead" type="DoxBool" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docCaptionType" mixed="true">
+    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docHeadingType" mixed="true">
+    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+    <xsd:attribute name="level" type="xsd:integer" /> <!-- todo: range 1-6 -->
+  </xsd:complexType>
+
+  <xsd:complexType name="docImageType" mixed="true">
+    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+    <xsd:attribute name="type" type="DoxImageKind" /> 
+    <xsd:attribute name="name" type="xsd:string" /> 
+    <xsd:attribute name="width" type="xsd:string" /> 
+    <xsd:attribute name="height" type="xsd:string" /> 
+  </xsd:complexType>
+
+  <xsd:complexType name="docFileType" mixed="true">
+    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+    <xsd:attribute name="name" type="xsd:string" /> 
+  </xsd:complexType>
+
+  <xsd:complexType name="docTocItemType" mixed="true">
+    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+    <xsd:attribute name="id" type="xsd:string" /> 
+  </xsd:complexType>
+
+  <xsd:complexType name="docTocListType">
+    <xsd:sequence>
+      <xsd:element name="tocitem" type="docTocItemType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docLanguageType">
+    <xsd:sequence>
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="langid" type="xsd:string" /> 
+  </xsd:complexType>
+
+  <xsd:complexType name="docParamListType">
+    <xsd:sequence>
+      <xsd:element name="parameteritem" type="docParamListItem" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="kind" type="DoxParamListKind" /> 
+  </xsd:complexType>
+
+  <xsd:complexType name="docParamListItem">
+    <xsd:sequence>
+      <xsd:element name="parameternamelist" type="docParamNameList" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="parameterdescription" type="descriptionType" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docParamNameList">
+    <xsd:sequence>
+      <xsd:element name="parametertype" type="docParamType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docParamType" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docParamName" mixed="true">
+    <xsd:sequence>
+      <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
+    </xsd:sequence>
+    <xsd:attribute name="direction" type="DoxParamDir" use="optional" />
+  </xsd:complexType>
+
+  <xsd:complexType name="docXRefSectType">
+    <xsd:sequence>
+      <xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="xrefdescription" type="descriptionType" />
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string" /> 
+  </xsd:complexType>
+
+  <xsd:complexType name="docCopyType">
+    <xsd:sequence>
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="internal" type="docInternalType" minOccurs="0" />
+    </xsd:sequence>
+    <xsd:attribute name="link" type="xsd:string" /> 
+  </xsd:complexType>
+
+  <xsd:complexType name="docBlockQuoteType">
+    <xsd:sequence>
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docParBlockType">
+    <xsd:sequence>
+      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="docEmptyType"/>
+
+  <!-- Simple types -->
+
+  <xsd:simpleType name="DoxBool">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="yes" />
+      <xsd:enumeration value="no" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxGraphRelation">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="include" />
+      <xsd:enumeration value="usage" />
+      <xsd:enumeration value="template-instance" />
+      <xsd:enumeration value="public-inheritance" />
+      <xsd:enumeration value="protected-inheritance" />
+      <xsd:enumeration value="private-inheritance" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxRefKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="compound" />
+      <xsd:enumeration value="member" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxMemberKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="define" />
+      <xsd:enumeration value="property" />
+      <xsd:enumeration value="event" />
+      <xsd:enumeration value="variable" />
+      <xsd:enumeration value="typedef" />
+      <xsd:enumeration value="enum" />
+      <xsd:enumeration value="function" />
+      <xsd:enumeration value="signal" />
+      <xsd:enumeration value="prototype" />
+      <xsd:enumeration value="friend" />
+      <xsd:enumeration value="dcop" />
+      <xsd:enumeration value="slot" />
+      <xsd:enumeration value="interface" />
+      <xsd:enumeration value="service" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxProtectionKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="public" />
+      <xsd:enumeration value="protected" />
+      <xsd:enumeration value="private" />
+      <xsd:enumeration value="package" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxVirtualKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="non-virtual" />
+      <xsd:enumeration value="virtual" />
+      <xsd:enumeration value="pure-virtual" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxCompoundKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="class" />
+      <xsd:enumeration value="struct" />
+      <xsd:enumeration value="union" />
+      <xsd:enumeration value="interface" />
+      <xsd:enumeration value="protocol" />
+      <xsd:enumeration value="category" />
+      <xsd:enumeration value="exception" />
+      <xsd:enumeration value="service" />
+      <xsd:enumeration value="singleton" />
+      <xsd:enumeration value="module" />
+      <xsd:enumeration value="type" />
+      <xsd:enumeration value="file" />
+      <xsd:enumeration value="namespace" />
+      <xsd:enumeration value="group" />
+      <xsd:enumeration value="page" />
+      <xsd:enumeration value="example" />
+      <xsd:enumeration value="dir" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxSectionKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="user-defined" />
+      <xsd:enumeration value="public-type" />
+      <xsd:enumeration value="public-func" />
+      <xsd:enumeration value="public-attrib" />
+      <xsd:enumeration value="public-slot" />
+      <xsd:enumeration value="signal" />
+      <xsd:enumeration value="dcop-func" />
+      <xsd:enumeration value="property" />
+      <xsd:enumeration value="event" />
+      <xsd:enumeration value="public-static-func" />
+      <xsd:enumeration value="public-static-attrib" />
+      <xsd:enumeration value="protected-type" />
+      <xsd:enumeration value="protected-func" />
+      <xsd:enumeration value="protected-attrib" />
+      <xsd:enumeration value="protected-slot" />
+      <xsd:enumeration value="protected-static-func" />
+      <xsd:enumeration value="protected-static-attrib" />
+      <xsd:enumeration value="package-type" />
+      <xsd:enumeration value="package-func" />
+      <xsd:enumeration value="package-attrib" />
+      <xsd:enumeration value="package-static-func" />
+      <xsd:enumeration value="package-static-attrib" />
+      <xsd:enumeration value="private-type" />
+      <xsd:enumeration value="private-func" />
+      <xsd:enumeration value="private-attrib" />
+      <xsd:enumeration value="private-slot" />
+      <xsd:enumeration value="private-static-func" />
+      <xsd:enumeration value="private-static-attrib" />
+      <xsd:enumeration value="friend" />
+      <xsd:enumeration value="related" />
+      <xsd:enumeration value="define" />
+      <xsd:enumeration value="prototype" />
+      <xsd:enumeration value="typedef" />
+      <xsd:enumeration value="enum" />
+      <xsd:enumeration value="func" />
+      <xsd:enumeration value="var" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxHighlightClass">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="comment" />
+      <xsd:enumeration value="normal" />
+      <xsd:enumeration value="preprocessor" />
+      <xsd:enumeration value="keyword" />
+      <xsd:enumeration value="keywordtype" />
+      <xsd:enumeration value="keywordflow" />
+      <xsd:enumeration value="stringliteral" />
+      <xsd:enumeration value="charliteral" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxSimpleSectKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="see" />
+      <xsd:enumeration value="return" />
+      <xsd:enumeration value="author" />
+      <xsd:enumeration value="authors" />
+      <xsd:enumeration value="version" />
+      <xsd:enumeration value="since" />
+      <xsd:enumeration value="date" />
+      <xsd:enumeration value="note" />
+      <xsd:enumeration value="warning" />
+      <xsd:enumeration value="pre" />
+      <xsd:enumeration value="post" />
+      <xsd:enumeration value="copyright" />
+      <xsd:enumeration value="invariant" />
+      <xsd:enumeration value="remark" />
+      <xsd:enumeration value="attention" />
+      <xsd:enumeration value="par" />
+      <xsd:enumeration value="rcs" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxVersionNumber">
+    <xsd:restriction base="xsd:string">
+      <xsd:pattern value="\d+\.\d+.*" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxImageKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="html" />
+      <xsd:enumeration value="latex" />
+      <xsd:enumeration value="rtf" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxParamListKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="param" />
+      <xsd:enumeration value="retval" />
+      <xsd:enumeration value="exception" />
+      <xsd:enumeration value="templateparam" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxCharRange">
+    <xsd:restriction base="xsd:string">
+      <xsd:pattern value="[aeiouncAEIOUNC]" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxParamDir">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="in"/>
+      <xsd:enumeration value="out"/>
+      <xsd:enumeration value="inout"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DoxAccessor">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="retain"/>
+      <xsd:enumeration value="copy"/>
+      <xsd:enumeration value="assign"/>
+      <xsd:enumeration value="weak"/>
+      <xsd:enumeration value="strong"/>
+      <xsd:enumeration value="unretained"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+</xsd:schema>
+
diff --git a/templates/xml/index.xsd b/templates/xml/index.xsd
new file mode 100644
index 0000000..d7ab2a9
--- /dev/null
+++ b/templates/xml/index.xsd
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <xsd:element name="doxygenindex" type="DoxygenType"/>
+
+  <xsd:complexType name="DoxygenType">
+    <xsd:sequence>
+      <xsd:element name="compound" type="CompoundType" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="version" type="xsd:string" use="required"/>
+  </xsd:complexType>
+
+  <xsd:complexType name="CompoundType">
+    <xsd:sequence>
+      <xsd:element name="name" type="xsd:string"/>
+      <xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="refid" type="xsd:string" use="required"/>
+    <xsd:attribute name="kind" type="CompoundKind" use="required"/>
+  </xsd:complexType>
+
+  <xsd:complexType name="MemberType">
+    <xsd:sequence>
+      <xsd:element name="name" type="xsd:string"/>
+    </xsd:sequence>
+    <xsd:attribute name="refid" type="xsd:string" use="required"/>
+    <xsd:attribute name="kind" type="MemberKind" use="required"/>
+  </xsd:complexType>
+  
+  <xsd:simpleType name="CompoundKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="class"/>
+      <xsd:enumeration value="struct"/>
+      <xsd:enumeration value="union"/>
+      <xsd:enumeration value="interface"/>
+      <xsd:enumeration value="protocol"/>
+      <xsd:enumeration value="category"/>
+      <xsd:enumeration value="exception"/>
+      <xsd:enumeration value="file"/>
+      <xsd:enumeration value="namespace"/>
+      <xsd:enumeration value="group"/>
+      <xsd:enumeration value="page"/>
+      <xsd:enumeration value="example"/>
+      <xsd:enumeration value="dir"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="MemberKind">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="define"/>
+      <xsd:enumeration value="property"/>
+      <xsd:enumeration value="event"/>
+      <xsd:enumeration value="variable"/>
+      <xsd:enumeration value="typedef"/>
+      <xsd:enumeration value="enum"/>
+      <xsd:enumeration value="enumvalue"/>
+      <xsd:enumeration value="function"/>
+      <xsd:enumeration value="signal"/>
+      <xsd:enumeration value="prototype"/>
+      <xsd:enumeration value="friend"/>
+      <xsd:enumeration value="dcop"/>
+      <xsd:enumeration value="slot"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+</xsd:schema>
+
diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj
index 882e514..03764f2 100644
--- a/winbuild/Doxygen.vcproj
+++ b/winbuild/Doxygen.vcproj
@@ -35,6 +35,9 @@
 			RelativePath=".\Gen_head.rules"
 		/>
 		<ToolFile
+			RelativePath=".\GenResources.rules"
+		/>
+		<ToolFile
 			RelativePath=".\Languages.rules"
 		/>
 	</ToolFiles>
@@ -75,6 +78,9 @@
 				Name="Gen_head"
 			/>
 			<Tool
+				Name="GenResources"
+			/>
+			<Tool
 				Name="Languages"
 			/>
 			<Tool
@@ -196,6 +202,9 @@
 				Name="Gen_head"
 			/>
 			<Tool
+				Name="GenResources"
+			/>
+			<Tool
 				Name="Languages"
 			/>
 			<Tool
@@ -317,6 +326,9 @@
 				Name="Gen_head"
 			/>
 			<Tool
+				Name="GenResources"
+			/>
+			<Tool
 				Name="Languages"
 			/>
 			<Tool
@@ -439,6 +451,9 @@
 				Name="Gen_head"
 			/>
 			<Tool
+				Name="GenResources"
+			/>
+			<Tool
 				Name="Languages"
 			/>
 			<Tool
@@ -879,6 +894,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\resourcemgr.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\rtfdocvisitor.cpp"
 				>
 			</File>
@@ -1391,10 +1410,2862 @@
 			</File>
 		</Filter>
 		<Filter
+			Name="Generating Resource Files"
+			>
+                        <File
+                                RelativePath="..\templates\html\arrowdown.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\arrowright.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\bc_s.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\bdwn.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\bib2xhtml.pl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\close.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\closed.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\doc.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\doxygen.bst"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\doxygen.css"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\doxygen.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\dynsections.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\extsearch.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\folderclosed.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\folderopen.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\footer.html"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\header.html"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlallmembers.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlannotated.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlbase.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlclass.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlclasses.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlclmembers.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlclmembersindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldeclcomp.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldir.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldirtree.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldyncontents.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmldynheader.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlfile.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlfiles.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlflmembers.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlinclude.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlindexpages.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmljsnavindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmljsnavtree.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmllayout.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemberindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmembersindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmembertabs.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemdecl.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemdecls.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemdef.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmeminherit.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemlist.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmemsummary.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmodule.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlmodules.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnamespace.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnamespaces.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnavpath.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnavtree.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnsmembers.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlnsmembersindex.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlobjlink.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlpage.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlpages.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmlsource.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmltabs.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\htmltypeconstraints.tpl"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\jquery.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\mag.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\mag_sel.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\nav_f.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\nav_g.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\nav_h.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\navtree.css"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\navtree.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\open.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\resize.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search.css"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_functions.php"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_l.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_m.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_opensearch.php"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\search_r.png"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\splitbar.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\svgpan.js"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\sync_off.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\sync_on.luma"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tab_a.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tab_b.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tab_h.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tab_s.lum"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\html\tabs.css"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\latex\doxygen.sty"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\xml\compound.xsd"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+                        <File
+                                RelativePath="..\templates\xml\index.xsd"
+                                >
+                                <FileConfiguration
+                                        Name="Debug|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Debug|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|Win32"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                                <FileConfiguration
+                                        Name="Release|x64"
+                                        >
+                                        <Tool
+                                                Name="GenResources"
+                                        />
+                                </FileConfiguration>
+                        </File>
+		</Filter>
+		<Filter
 			Name="Generating header Files"
 			>
 			<File
-				RelativePath="..\src\bib2xhtml.pl"
+				RelativePath="..\src\layout_default.xml"
 				>
 				<FileConfiguration
 					Name="Debug|Win32"
@@ -1425,817 +4296,45 @@
 					/>
 				</FileConfiguration>
 			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
 			<File
-				RelativePath="..\src\compound.xsd"
+				RelativePath="..\src\arguments.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\doxygen.bst"
+				RelativePath="..\src\bufstr.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\doxygen.css"
+				RelativePath="..\src\ce_parse.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\doxygen.sty"
+				RelativePath="..\vhdlparser\CharStream.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\dynsections.js"
+				RelativePath="..\src\cite.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\extsearch.js"
+				RelativePath="..\src\clangparser.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\footer.html"
+				RelativePath="..\src\classdef.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\header.html"
+				RelativePath="..\src\classlist.h"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
-				RelativePath="..\src\index.xsd"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_fx.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_p1.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_p2.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_p3.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_pt.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\jquery_ui.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\layout_default.xml"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\navtree.css"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\navtree.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\resize.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\search.css"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\search.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\search_functions.php"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\search_opensearch.php"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\src\svgpan.js"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="Gen_head"
-					/>
-				</FileConfiguration>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl"
-			>
-			<File
-				RelativePath="..\src\arguments.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\bib2xhtml.pl.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\bufstr.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\ce_parse.h"
-				>
-			</File>
-			<File
-				RelativePath="..\vhdlparser\CharStream.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\cite.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\clangparser.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\classdef.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\classlist.h"
-				>
-			</File>
-			<File
-				RelativePath="..\src\cmdmapper.h"
+				RelativePath="..\src\cmdmapper.h"
 				>
 			</File>
 			<File
@@ -2251,10 +4350,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\compound_xsd.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\condparser.h"
 				>
 			</File>
@@ -2347,22 +4442,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\doxygen_bst.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\doxygen_css.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\doxygen_sty.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\dynsections_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\eclipsehelp.h"
 				>
 			</File>
@@ -2379,10 +4458,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\extsearch_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\filedef.h"
 				>
 			</File>
@@ -2395,10 +4470,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\footer_html.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\formula.h"
 				>
 			</File>
@@ -2423,10 +4494,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\header_html.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\htags.h"
 				>
 			</File>
@@ -2463,10 +4530,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(INtDir)\index_xsd.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\instdox.h"
 				>
 			</File>
@@ -2475,30 +4538,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\jquery_fx_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_p1_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_p2_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_p3_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_pt_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\jquery_ui_js.h"
-				>
-			</File>
-			<File
 				RelativePath="$(IntDir)\lang_cfg.h"
 				>
 			</File>
@@ -2587,10 +4626,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\navtree_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\objcache.h"
 				>
 			</File>
@@ -2659,7 +4694,11 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\resize_js.h"
+				RelativePath="$(IntDir)\resources.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\src\resourcemgr.h"
 				>
 			</File>
 			<File
@@ -2679,22 +4718,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\search_css.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\search_js.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\search_functionsjs.h"
-				>
-			</File>
-			<File
-				RelativePath="$(IntDir)\search_opensearch_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\searchindex.h"
 				>
 			</File>
@@ -2711,10 +4734,6 @@
 				>
 			</File>
 			<File
-				RelativePath="$(IntDir)\svgpan_js.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\store.h"
 				>
 			</File>
diff --git a/winbuild/GenResources.rules b/winbuild/GenResources.rules
new file mode 100644
index 0000000..a496ea5
--- /dev/null
+++ b/winbuild/GenResources.rules
@@ -0,0 +1,19 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+	Name="GenResources"
+	Version="8.00"
+	>
+	<Rules>
+		<CustomBuildRule
+			Name="GenResources"
+			DisplayName="GenResources"
+			CommandLine="python &quot;$(ProjectDir)..\src\res2cc_cmd.py&quot; &quot;$(ProjectDir)..\templates&quot; $(IntDir)\resources.cpp"
+			Outputs="$(IntDir)\resources.cpp"
+			FileExtensions=".*"
+			AdditionalDependencies="$(ProjectDir)..\src\res2cc_cmd.py"
+			ExecutionDescription="Executing res2cc_cmd on $(ProjectDir)..\templates ..."
+			ShowOnlyRuleProperties="false"
+			>
+		</CustomBuildRule>
+	</Rules>
+</VisualStudioToolFile>
-- 
cgit v0.12

