diff --git a/wp-content/themes/vanilla/404.php b/wp-content/themes/vanilla/404.php
new file mode 100644
index 0000000000000000000000000000000000000000..aff0c755631a945a444e973f15155938b2f074db
--- /dev/null
+++ b/wp-content/themes/vanilla/404.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_error('404');
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/LICENSE.TXT b/wp-content/themes/vanilla/LICENSE.TXT
new file mode 100644
index 0000000000000000000000000000000000000000..3912109b5cd65a68039d473c11c9f7ac2303e06d
--- /dev/null
+++ b/wp-content/themes/vanilla/LICENSE.TXT
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/wp-content/themes/vanilla/PHPTAL.php b/wp-content/themes/vanilla/PHPTAL.php
new file mode 100644
index 0000000000000000000000000000000000000000..0efce125ce3322087a3f6e5b90604283f4ca9e03
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL.php
@@ -0,0 +1,788 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//
+
+define('PHPTAL_VERSION', '1_1_14');
+
+//{{{PHPTAL_DIR
+if (!defined('PHPTAL_DIR')) define('PHPTAL_DIR',dirname(__FILE__).DIRECTORY_SEPARATOR);
+else assert('substr(PHPTAL_DIR,-1) == DIRECTORY_SEPARATOR');
+//}}}
+
+/* Please don't use the following constants. They have been replaced by methods in the PHPTAL class and are kept for backwards compatibility only. */
+//{{{
+if (!defined('PHPTAL_PHP_CODE_DESTINATION')) {
+    if (function_exists('sys_get_temp_dir')) define('PHPTAL_PHP_CODE_DESTINATION',rtrim(sys_get_temp_dir(), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR);
+    else if (substr(PHP_OS,0,3) == 'WIN') {
+        if (file_exists('c:\\WINNT\\Temp\\')) define('PHPTAL_PHP_CODE_DESTINATION', 'c:\\WINNT\\Temp\\');
+        else define('PHPTAL_PHP_CODE_DESTINATION', 'c:\\WINDOWS\\Temp\\');
+    }
+    else define('PHPTAL_PHP_CODE_DESTINATION', '/tmp/');
+}
+if (!defined('PHPTAL_DEFAULT_ENCODING')) define('PHPTAL_DEFAULT_ENCODING', 'UTF-8');
+if (!defined('PHPTAL_PHP_CODE_EXTENSION')) define('PHPTAL_PHP_CODE_EXTENSION', 'php');
+//}}}
+
+define('PHPTAL_XHTML', 1);
+define('PHPTAL_XML',   2);
+
+require_once PHPTAL_DIR.'PHPTAL/FileSource.php';
+require_once PHPTAL_DIR.'PHPTAL/RepeatController.php';
+require_once PHPTAL_DIR.'PHPTAL/Context.php';
+require_once PHPTAL_DIR.'PHPTAL/Exception.php';
+require_once PHPTAL_DIR.'PHPTAL/TalesRegistry.php';
+require_once PHPTAL_DIR.'PHPTAL/Filter.php';
+
+/**
+ * PHPTAL template entry point.
+ *
+ * <code>
+ * <?php
+ * require_once 'PHPTAL.php';
+ * try {
+ *      $tpl = new PHPTAL('mytemplate.html');
+ *      $tpl->title = 'Welcome here';
+ *      $tpl->result = range(1, 100);
+ *      ...
+ *      echo $tpl->execute();
+ * }
+ * catch (Exception $e) {
+ *      echo $e;
+ * }
+ * ?>
+ * </code>
+ *
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL
+{
+    const XHTML = 1;
+    const XML   = 2;
+
+    /**
+     * PHPTAL Constructor.
+     *
+     * @param string $path Template file path.
+     */
+    public function __construct($path=false)
+    {
+        $this->_path = $path;
+        $this->_repositories = array();
+        if (defined('PHPTAL_TEMPLATE_REPOSITORY')){
+            $this->_repositories[] = PHPTAL_TEMPLATE_REPOSITORY;
+        }
+        $this->_resolvers = array();
+        $this->_globalContext = new StdClass();
+        $this->_context = new PHPTAL_Context();
+        $this->_context->setGlobal($this->_globalContext);
+    }
+
+    /**
+     * create
+     * returns a new PHPTAL object
+     *
+     * @param string $path Template file path.
+     * @return PHPTAL
+     */
+    public static function create($path=false)
+    {
+        return new PHPTAL($path);
+    }
+
+    /**
+     * Clone template state and context.
+     */
+    public function __clone()
+    {
+        $context = $this->_context;
+        $this->_context = clone $this->_context;
+        $this->_context->setParent($context);
+        $this->_context->setGlobal($this->_globalContext);
+    }
+
+    /**
+     * Set template from file path.
+     * @param $path string
+     */
+    public function setTemplate($path)
+    {
+        $this->_prepared = false;
+        $this->_functionName = null;
+        $this->_path = $path;
+        $this->_source = null;
+        return $this;
+    }
+
+    /**
+     * Set template from source.
+     *
+     * Should be used only with temporary template sources. Use setTemplate() whenever possible.
+     *
+     * @param $src string The phptal template source.
+     * @param path string Fake and 'unique' template path.
+     */
+    public function setSource($src, $path=false)
+    {
+        if ($path == false)
+            $path = '<string> '.md5($src);
+
+        require_once PHPTAL_DIR.'PHPTAL/StringSource.php';
+        $this->_source = new PHPTAL_StringSource($src, $path);
+        $this->_path = $path;
+        return $this;
+    }
+
+    /**
+     * Specify where to look for templates.
+     *
+     * @param $rep mixed string or Array of repositories
+     */
+    public function setTemplateRepository($rep)
+    {
+        if (is_array($rep)){
+            $this->_repositories = $rep;
+        }
+        else {
+            $this->_repositories[] = $rep;
+        }
+        return $this;
+    }
+
+    /**
+     * Get template repositories.
+     */
+    public function getTemplateRepositories()
+    {
+        return $this->_repositories;
+    }
+
+    /**
+     * Clears the template repositories.
+     */
+    public function clearTemplateRepositories()
+    {
+        $this->_repositories = array();
+        return $this;
+    }
+
+    /**
+     * Ignore XML/XHTML comments on parsing.
+     * @param $bool bool
+     */
+    public function stripComments($bool)
+    {
+        $this->_stripComments = $bool;
+        return $this;
+    }
+
+    /**
+     * Set output mode
+     * XHTML output mode will force elements like <link/>, <meta/> and <img/>, etc. to be empty
+     * and threats attributes like selected, checked to be boolean attributes.
+     *
+     * XML output mode outputs XML without such modifications and is neccessary to generate RSS feeds properly.
+     * @param $mode int (PHPTAL::XML or PHPTAL::XHTML).
+     */
+    public function setOutputMode($mode=PHPTAL_XHTML)
+    {
+        if ($mode != PHPTAL::XHTML && $mode != PHPTAL::XML){
+            throw new PHPTAL_Exception('Unsupported output mode '.$mode);
+        }
+        $this->_outputMode = $mode;
+        return $this;
+    }
+
+    /**
+     * Get output mode
+     */
+    public function getOutputMode()
+    {
+        return $this->_outputMode;
+    }
+
+    /**
+     * Set input and ouput encoding.
+     * @param $enc string example: 'UTF-8'
+     */
+    public function setEncoding($enc)
+    {
+        $this->_encoding = $enc;
+        if ($this->_translator) $this->_translator->setEncoding($enc);
+        return $this;
+    }
+
+    /**
+     * Get input and ouput encoding.
+     * @param $enc string example: 'UTF-8'
+     */
+    public function getEncoding()
+    {
+        return $this->_encoding;
+    }
+
+    /**
+     * Set the storage location for intermediate PHP files. The path cannot contain characters that would be interpreted by glob() (e.g. * or ?)
+     * @param string $path Intermediate file path.
+     */
+    public function setPhpCodeDestination($path)
+    {
+        $this->_phpCodeDestination = rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
+        return $this;
+    }
+
+    /**
+     * Get the storage location for intermediate PHP files.
+     */
+    public function getPhpCodeDestination()
+    {
+        return $this->_phpCodeDestination;
+    }
+
+    /**
+     * Set the file extension for intermediate PHP files.
+     * @param string $extension The file extension.
+     */
+    public function setPhpCodeExtension($extension)
+    {
+        $this->_phpCodeExtension = $extension;
+        return $this;
+    }
+
+    /**
+     * Get the file extension for intermediate PHP files.
+     */
+    public function getPhpCodeExtension()
+    {
+        return $this->_phpCodeExtension;
+    }
+
+    /**
+     * Flags whether to ignore intermediate php files and to
+     * reparse templates every time (if set to true).
+     * Don't use in production - this makes PHPTAL significantly slower.
+     * @param bool bool Forced reparse state.
+     */
+    public function setForceReparse($bool)
+    {
+        $this->_forceReparse = (bool) $bool;
+        return $this;
+    }
+
+    /**
+     * Get the value of the force reparse state.
+     */
+    public function getForceReparse()
+    {
+        return $this->_forceReparse !== NULL ? $this->_forceReparse : (defined('PHPTAL_FORCE_REPARSE') && PHPTAL_FORCE_REPARSE);
+    }
+
+    /**
+     * Set I18N translator.
+     * This sets encoding used by the translator, so be sure to use encoding-dependent features of the translator (e.g. addDomain) _after_ calling setTranslator. 
+     */
+    public function setTranslator(PHPTAL_TranslationService $t)
+    {
+        $this->_translator = $t;
+        $this->_translator->setEncoding($this->getEncoding());
+        return $this;
+    }
+
+    /**
+     * Set template pre filter. It will be called once before template is compiled.
+     */
+    public function setPreFilter(PHPTAL_Filter $filter)
+    {
+        $this->_prefilter = $filter;
+        return $this;
+    }
+
+    /**
+     * Set template post filter. It will be called every time after template generates output.
+     */
+    public function setPostFilter(PHPTAL_Filter $filter)
+    {
+        $this->_postfilter = $filter;
+        return $this;
+    }
+
+    /**
+     * Register a trigger for specified phptal:id.
+     * @param $id string phptal:id to look for
+     */
+    public function addTrigger($id, PHPTAL_Trigger $trigger)
+    {
+        $this->_triggers[$id] = $trigger;
+        return $this;
+    }
+
+    /**
+     * Returns trigger for specified phptal:id.
+     * @param $id string phptal:id
+     */
+    public function getTrigger($id)
+    {
+        if (array_key_exists($id, $this->_triggers)){
+            return $this->_triggers[$id];
+        }
+        return null;
+    }
+
+    /**
+     * Set a context variable.
+     * @param $varname string
+     * @param $value mixed
+     */
+    public function __set($varname, $value)
+    {
+        $this->_context->__set($varname, $value);
+    }
+
+    /**
+     * Set a context variable.
+     * @param $varname string
+     * @param $value mixed
+     */
+    public function set($varname, $value)
+    {
+        $this->_context->__set($varname, $value);
+        return $this;
+    }
+
+    /**
+     * Execute the template code.
+     *
+     * @return string
+     */
+    public function execute()
+    {
+        if (!$this->_prepared) {
+            $this->prepare();
+        }
+
+        // includes generated template PHP code
+        $this->_context->__file = $this->__file;
+        require_once $this->getCodePath();
+        $templateFunction = $this->getFunctionName();
+        try {
+            ob_start();
+            $templateFunction($this, $this->_context);
+            $res = ob_get_clean();
+        }
+        catch (Exception $e){
+            ob_end_clean();
+            throw $e;
+        }
+
+        // unshift doctype
+        $docType = $this->_context->__docType;
+        if ($docType){
+            $res = $docType . "\n" . $res;
+        }
+        // unshift xml declaration
+        $xmlDec = $this->_context->__xmlDeclaration;
+        if ($xmlDec){
+            $res = $xmlDec . "\n" . $res;
+        }
+
+        if ($this->_postfilter != null){
+            return $this->_postfilter->filter($res);
+        }
+        return $res;
+    }
+
+    protected function setConfigurationFrom(PHPTAL $from)
+    {
+        // use references - this way config of both objects will be more-or-less in sync
+        $this->_encoding = &$from->_encoding;
+        $this->_outputMode = &$from->_outputMode;
+        $this->_stripComments = &$from->_stripComments;
+        $this->_forceReparse = &$from->_forceReparse;
+        $this->_phpCodeDestination = &$from->_phpCodeDestination;
+        $this->_phpCodeExtension = &$from->_phpCodeExtension;
+        $this->_cacheLifetime = &$from->_cacheLifetime;
+        $this->_cachePurgeFrequency = &$from->_cachePurgeFrequency;
+        $this->setTemplateRepository($from->_repositories);
+        array_unshift($this->_repositories, dirname($from->_source->getRealPath()));
+        $this->_resolvers = &$from->_resolvers;
+        $this->_prefilter = &$from->_prefilter;
+        $this->_postfilter = &$from->_postfilter;
+    }
+
+    private $externalMacroTempaltesCache = array();
+
+    /**
+     * Execute a template macro.
+     * Should be used only from within generated template code!
+     *
+     * @param $path string Template macro path
+     */
+    public function executeMacro($path)
+    {
+        // extract macro source file from macro name, if not source file
+        // found in $path, then the macro is assumed to be local
+        if (preg_match('/^(.*?)\/([a-z0-9_]*)$/i', $path, $m)){
+            list(,$file,$macroName) = $m;
+
+            if (isset($this->externalMacroTempaltesCache[$file]))
+            {
+                $tpl = $this->externalMacroTempaltesCache[$file];
+            }
+            else
+            {
+                $tpl = new PHPTAL($file);
+                $tpl->setConfigurationFrom($this);
+                $tpl->prepare();
+                // require PHP generated code
+                require_once $tpl->getCodePath();
+                
+                $this->externalMacroTempaltesCache[$file] = $tpl;
+                if (count($this->externalMacroTempaltesCache) > 10) $this->externalMacroTempaltesCache = array(); // keep it small (typically only 1 or 2 external files are used)
+            }
+
+            // save current file
+            $currentFile = $this->_context->__file;
+            $this->_context->__file = $tpl->__file;
+
+            $fun = $tpl->getFunctionName() . '_' . $macroName;
+            if (!function_exists($fun)) throw new PHPTAL_Exception("Macro '$macroName' is not defined in $file",$this->_source->getRealPath());
+            $fun($this, $this->_context);
+
+            // restore current file
+            $this->_context->__file = $currentFile;
+        }
+        else 
+        {
+            // call local macro
+            $fun = $this->getFunctionName() . '_' . trim($path);
+            if (!function_exists($fun)) throw new PHPTAL_Exception("Macro '$path' is not defined",$this->_source->getRealPath());
+            $fun( $this, $this->_context );
+        }
+    }
+
+    private function setCodeFile()
+    {
+        $this->_codeFile = $this->getPhpCodeDestination() . $this->getFunctionName() . '.' . $this->getPhpCodeExtension();
+    }
+
+    /**
+     * Prepare template without executing it.
+     */
+    public function prepare()
+    {
+        // clear just in case settings changed and cache is out of date
+        $this->externalMacroTempaltesCache = array();
+        
+        // find the template source file
+        $this->findTemplate();
+        $this->__file = $this->_source->getRealPath();
+		$this->setCodeFile();
+		
+        // parse template if php generated code does not exists or template
+        // source file modified since last generation of PHPTAL_FORCE_REPARSE
+        // is defined.
+        if ($this->getForceReparse() || !file_exists($this->_codeFile))
+		{
+	        if ($this->getCachePurgeFrequency() && mt_rand()%$this->getCachePurgeFrequency() == 0)
+    		{
+    		    $this->cleanUpGarbage();
+    		}
+            $this->parse();
+        }
+        $this->_prepared = true;
+        return $this;
+    }
+
+    public function getCacheLifetime()
+    {
+        return $this->_cacheLifetime;
+    }
+
+    /**
+     * how long compiled templates and phptal:cache files are kept, in days
+     */
+    public function setCacheLifetime($days)
+    {
+        $this->_cacheLifetime = max(0.5,$days);
+        return $this;
+    }
+
+    /**
+     * PHPTAL will scan cache and remove old files on every nth compile
+     * Set to 0 to disable cleanups
+     */
+    public function setCachePurgeFrequency($n)
+    {
+        $this->_cachePurgeFrequency = (int)$n;
+        return $this;
+    }
+
+    public function getCachePurgeFrequency()
+    {
+        return $this->_cachePurgeFrequency;
+    }
+
+
+	/**
+	 * Removes all compiled templates from cache after PHPTAL_CACHE_LIFETIME days
+	 */
+	public function cleanUpGarbage()
+	{
+		$phptalCacheFilesExpire = time() - $this->getCacheLifetime() * 3600 * 24;
+		$upperLimit = $this->getPhpCodeDestination() . 'tpl_' . $phptalCacheFilesExpire . '_';
+		$lowerLimit = $this->getPhpCodeDestination() . 'tpl_0_';
+		$phptalCacheFiles = glob($this->getPhpCodeDestination() . 'tpl_*.' . $this->getPhpCodeExtension() . '*');
+
+		if ($phptalCacheFiles)
+		{
+			foreach($phptalCacheFiles as $index => $file)
+	        {
+				if ($file > $upperLimit && substr($file,0,strlen($lowerLimit)) !== $lowerLimit)
+				{
+				    unset($phptalCacheFiles[$index]);
+				}
+	        }
+	        foreach($phptalCacheFiles as $file)
+	        {
+	            $time = filemtime($file);
+	            if ($time && $time < $phptalCacheFilesExpire) @unlink($file);			 
+		    }
+	    }
+	}
+
+    /**
+	 * Removes single compiled template from cache and all its fragments cached by phptal:cache.
+	 * Must be called after setSource/setTemplate.
+	 */
+	public function cleanUpCache()
+	{
+		if (!$this->getCodePath()) 
+		{
+			$this->findTemplate(); $this->setCodeFile();
+			if (!$this->getCodePath()) throw new PHPTAL_Exception("No codefile");
+		}
+		
+		$filename = $this->getCodePath();		
+		$phptalCacheFiles = glob($filename . '*');
+		if ($phptalCacheFiles) foreach($phptalCacheFiles as $file)
+		{
+		    if (substr($file, 0, strlen($filename)) !== $filename) continue; // safety net
+			@unlink($file);
+	    }
+        $this->_prepared = false;
+	}	
+
+    /**
+     * Returns the path of the intermediate PHP code file.
+     *
+     * The returned file may be used to cleanup (unlink) temporary files
+     * generated by temporary templates or more simply for debug.
+     *
+     * @return string
+     */
+    public function getCodePath()
+    {
+        return $this->_codeFile;
+    }
+
+    /**
+     * Returns the generated template function name.
+     * @return string
+     */
+    public function getFunctionName()
+    {
+        if (!$this->_functionName) {
+            $this->_functionName = 'tpl_' . $this->_source->getLastModifiedTime() . '_' . PHPTAL_VERSION .
+                substr(preg_replace('/[^a-zA-Z]/','',basename($this->_source->getRealPath())),0,10) . md5($this->_source->getRealPath());
+        }
+        return $this->_functionName;
+    }
+
+    /**
+     * Returns template translator.
+     * @return PHPTAL_TranslationService
+     */
+    public function getTranslator()
+    {
+        return $this->_translator;
+    }
+
+    /**
+     * Returns array of exceptions caught by tal:on-error attribute.
+     * @return array<Exception>
+     */
+    public function getErrors()
+    {
+        return $this->_errors;
+    }
+
+    /**
+     * Public for phptal templates, private for user.
+     * @access private
+     */
+    public function addError(Exception $error)
+    {
+        array_push($this->_errors, $error);
+        return $this;
+    }
+
+    /**
+     * Returns current context object.
+     * Use only in Triggers.
+     *
+     * @return PHPTAL_Context
+     */
+    public function getContext()
+    {
+        return $this->_context;
+    }
+
+    /**
+     * only for use in generated template code
+     * @access private
+     */
+    public function getGlobalContext()
+    {
+        return $this->_globalContext;
+    }
+
+    /**
+     * only for use in generated template code
+     * @access private
+     */
+    public function pushContext()
+    {
+        $this->_context = $this->_context->pushContext();
+        return $this->_context;
+    }
+
+    /**
+     * only for use in generated template code
+     * @access private
+     */
+    public function popContext()
+    {
+        $this->_context = $this->_context->popContext();
+        return $this->_context;
+    }
+
+    protected function parse()
+    {
+        require_once PHPTAL_DIR.'PHPTAL/Dom/Parser.php';
+
+        // instantiate the PHPTAL source parser
+        $parser = new PHPTAL_Dom_Parser($this->_encoding);
+        $parser->stripComments($this->_stripComments);
+
+        $data = $this->_source->getData();
+        $realpath = $this->_source->getRealPath();
+
+        if ($this->_prefilter)
+            $data = $this->_prefilter->filter($data);
+        $tree = $parser->parseString($data, $realpath);
+
+        require_once PHPTAL_DIR.'PHPTAL/Php/CodeGenerator.php';
+        $generator = new PHPTAL_Php_CodeGenerator($this->getFunctionName(), $this->_source->getRealPath());
+        $generator->setEncoding($this->_encoding);
+        $generator->setOutputMode($this->_outputMode);
+        $generator->generate($tree);
+
+        if (!@file_put_contents($this->_codeFile, $generator->getResult())) {
+            throw new PHPTAL_Exception('Unable to open '.$this->_codeFile.' for writing');
+        }
+
+        return $this;
+    }
+
+    /**
+     * Search template source location.
+     */
+    protected function findTemplate()
+    {
+        if ($this->_path == false){
+            throw new PHPTAL_Exception('No template file specified');
+        }
+
+        // template source already defined
+        if ($this->_source != null){
+            return;
+        }
+
+        array_push($this->_resolvers, new PHPTAL_FileSourceResolver($this->_repositories));
+        foreach ($this->_resolvers as $resolver){
+            $source = $resolver->resolve($this->_path);
+            if ($source != null){
+                $this->_source = $source;
+                break;
+            }
+        }
+        array_pop($this->_resolvers);
+
+        if ($this->_source == null){
+            throw new PHPTAL_Exception('Unable to locate template file '.$this->_path);
+        }
+    }
+
+    protected $_prefilter = null;
+    protected $_postfilter = null;
+
+    // list of template source repositories
+    protected $_repositories = array();
+    // template path
+    protected $_path = null;
+    // template source resolvers
+    protected $_resolvers = array();
+    // template source (only set when not working with file)
+    protected $_source = null;
+    // destination of PHP intermediate file
+    protected $_codeFile = null;
+    // php function generated for the template
+    protected $_functionName = null;
+    // set to true when template is ready for execution
+    protected $_prepared = false;
+
+    // associative array of phptal:id => PHPTAL_Trigger
+    protected $_triggers = array();
+    // i18n translator
+    protected $_translator = null;
+
+    // global execution context
+    protected $_globalContext = null;
+    // current execution context
+    protected $_context = null;
+    // current template file (changes within macros)
+    public  $__file = false;
+    // list of on-error caught exceptions
+    protected $_errors = array();
+
+    protected $_encoding = PHPTAL_DEFAULT_ENCODING;
+    protected $_outputMode = PHPTAL::XHTML;
+    protected $_stripComments = false;
+
+    // configuration properties
+    protected $_forceReparse = NULL;
+    protected $_phpCodeDestination = PHPTAL_PHP_CODE_DESTINATION;
+    protected $_phpCodeExtension = PHPTAL_PHP_CODE_EXTENSION;
+
+    protected $_cacheLifetime = 30;
+    protected $_cachePurgeFrequency = 50;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/CommentFilter.php b/wp-content/themes/vanilla/PHPTAL/CommentFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..822b62f38f79451b3056960462a99f097a216d9b
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/CommentFilter.php
@@ -0,0 +1,12 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Filter.php';
+
+class PHPTAL_CommentFilter implements PHPTAL_Filter
+{
+	public function filter($src){
+		return preg_replace('/(<!--.*?-->)/s', '', $src);
+	}
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Context.php b/wp-content/themes/vanilla/PHPTAL/Context.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b630c8c7571eef7577ca4f31765bf4c30916378
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Context.php
@@ -0,0 +1,405 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * This class handles template execution context.
+ * @package phptal
+ */
+class PHPTAL_Context
+{
+    public static $USE_GLOBAL = false;
+    
+    public $__line = false;
+    public $__file = false;
+    public $__repeat;
+    public $__xmlDeclaration;
+    public $__docType;
+    public $__nothrow;
+    public $__translator;
+
+    public function __construct()
+    {
+        $this->__repeat = new StdClass();
+    }
+
+    public function __clone()
+    {
+        $this->__repeat = clone($this->__repeat);
+    }
+
+	public function setParent(PHPTAL_Context $parent)
+	{
+		$this->_parentContext = $parent;
+	}
+
+    public function setGlobal(StdClass $globalContext)
+    {
+        $this->_globalContext = $globalContext;
+    }
+
+    public function pushContext()
+    {
+        if (self::$USE_GLOBAL) return $this;
+        $res = clone $this;
+        $res->setParent($this);
+        return $res;
+    }
+
+    public function popContext()
+    {
+        if (self::$USE_GLOBAL) return $this;
+        return $this->_parentContext;
+    }
+
+    /** 
+     * Set output document type if not already set.
+     *
+     * This method ensure PHPTAL uses the first DOCTYPE encountered (main
+     * template or any macro template source containing a DOCTYPE.
+     */
+    public function setDocType($doctype)
+    {
+		if ($this->_parentContext != null){
+			return $this->_parentContext->setDocType($doctype);
+		}
+        if ($this->_parentContext != null){
+            return $this->_parentContext->setDocType($doctype);
+        }
+        if (!$this->__docType){
+            $this->__docType = $doctype;
+        }
+    }
+
+    /**
+     * Set output document xml declaration.
+     *
+     * This method ensure PHPTAL uses the first xml declaration encountered
+     * (main template or any macro template source containing an xml
+     * declaration).
+     */
+    public function setXmlDeclaration($xmldec)
+    {
+		if ($this->_parentContext != null){
+			return $this->_parentContext->setXmlDeclaration($xmldec);
+		}
+        if ($this->_parentContext != null){
+            return $this->_parentContext->setXmlDeclaration($xmldec);
+        }
+        if (!$this->__xmlDeclaration){
+            $this->__xmlDeclaration = $xmldec;
+        }
+    }
+
+    /** 
+     * Activate or deactivate exception throwing during unknown path
+     * resolution.
+     */
+    public function noThrow($bool)
+    {
+        $this->__nothrow = $bool;
+    }
+
+    /**
+     * Returns true if specified slot is filled.
+     */
+    public function hasSlot($key)
+    {
+		if ($this->_parentContext) return $this->_parentContext->hasSlot($key); // setting slots in any context
+        return array_key_exists($key, $this->_slots);
+    }
+
+    /**
+     * Returns the content of specified filled slot.
+     */
+    public function getSlot($key)
+    {
+		if ($this->_parentContext) return $this->_parentContext->getSlot($key); // setting slots in any context
+        return $this->_slots[$key];
+    }
+
+    /**
+     * Fill a macro slot.
+     */
+    public function fillSlot($key, $content)
+    {
+		if ($this->_parentContext) $this->_parentContext->fillSlot($key,$content); // setting slots in any context
+		else $this->_slots[$key] = $content;
+    }
+
+    /**
+     * Push current filled slots on stack.
+     */
+    public function pushSlots()
+    {
+        array_push($this->_slotsStack, $this->_slots);
+        $this->_slots = array();
+    }
+
+    /**
+     * Restore filled slots stack.
+     */
+    public function popSlots()
+    {
+        $this->_slots = array_pop($this->_slotsStack);
+    }
+
+    /**
+     * Context setter.
+     */
+    public function __set($varname, $value)
+    {
+        if ($varname[0] == '_')
+        {
+            throw new PHPTAL_Exception('Template variable error \''.$varname.'\' must not begin with underscore');
+        }
+        $this->$varname = $value;
+    }
+
+   
+
+    /**
+     * Context getter.
+     */
+    public function __get($varname)
+    {
+        if ($varname == 'repeat')
+            return $this->__repeat;
+
+        if (isset($this->$varname)){
+            return $this->$varname;
+        }
+
+        if (isset($this->_globalContext->$varname)){
+            return $this->_globalContext->$varname;
+        }
+        
+        if (defined($varname))
+        {
+            return constant($varname);
+        }
+        
+        if ($this->__nothrow)
+            return null;
+       
+        $e = sprintf('Unable to find path %s in current scope', $varname); 
+        throw new PHPTAL_Exception($e, $this->__file, $this->__line);
+    }
+
+    private $_slots = array();
+    private $_slotsStack = array();
+	private $_parentContext = null;
+    private $_globalContext = null;
+}
+
+// emulate property_exists() function, this is slow but much better than
+// isset(), use next release of PHP5 as soon as available !
+if (!function_exists('property_exists')){
+    function property_exists($o, $property)
+    {
+        return array_key_exists($property, get_object_vars($o));
+    }
+}
+
+
+/**
+ * Resolve TALES path starting from the first path element.
+ *
+ * The TALES path : object/method1/10/method2
+ * will call : phptal_path($ctx->object, 'method1/10/method2')
+ *
+ * The nothrow param is used by phptal_exists() and prevent this function to
+ * throw an exception when a part of the path cannot be resolved, null is
+ * returned instead.
+ */
+function phptal_path($base, $path, $nothrow=false)
+{//{{{
+    $parts   = split('/', $path);
+    $current = true;
+
+	if ($base === null) 
+	{
+		if ($nothrow) return null;
+		throw new PHPTAL_Exception("Trying to read property '$path' from NULL");
+	}
+
+    while (($current = array_shift($parts)) !== null){
+        // object handling
+        if (is_object($base)){
+            // look for method
+            if (method_exists($base, $current)){
+                $base = $base->$current();
+                continue;
+            }
+            
+            // look for variable
+            if (property_exists($base, $current)){
+                $base = $base->$current;
+                continue;
+            }
+            
+            if ($base instanceof ArrayAccess && $base->offsetExists($current))
+            {
+                $base = $base->offsetGet($current);
+                continue;
+            }
+            
+            if ($base instanceof Countable && ($current === 'length' || $current === 'size'))
+            {
+                $base = count($base);
+                continue;
+            }
+                        
+            // look for isset (priority over __get)
+            if (method_exists($base,'__isset') && is_callable(array($base, '__isset')))
+            {
+                if ($base->__isset($current)){
+                    $base = $base->$current;
+                    continue;
+                }
+            }
+            // ask __get and discard if it returns null
+            else if (method_exists($base,'__get') && is_callable(array($base, '__get')))
+            {
+                $tmp = $base->$current;
+                if (NULL !== $tmp){
+                    $base = $tmp;
+                    continue;
+                }
+            }
+
+            // magic method call
+            if (method_exists($base, '__call')){
+                try
+                {
+                    $base = $base->$current();
+                    continue;
+                }
+                catch(BadMethodCallException $e){}
+            }
+
+            // emulate array behaviour
+            if (is_numeric($current) && method_exists($base, '__getAt')){
+                $base = $base->__getAt($current);
+                continue;
+            }
+            
+            if ($nothrow)
+                return null;
+
+            $err = 'Unable to find part "%s" in path "%s" inside '.(is_object($base)?get_class($base):gettype($base));
+            $err = sprintf($err, $current, $path);
+            throw new PHPTAL_Exception($err);
+        }
+
+        // array handling
+        if (is_array($base)) {
+            // key or index
+            if (array_key_exists((string)$current, $base)){
+                $base = $base[$current];
+                continue;
+            }
+
+            // virtual methods provided by phptal
+            if ($current == 'length' || $current == 'size'){
+                $base = count($base);
+                continue;
+            }
+
+            if ($nothrow)
+                return null;
+
+            $err = 'Unable to find array key "%s" in path "%s"';
+            $err = sprintf($err, $current, $path);
+            throw new PHPTAL_Exception($err);
+        }
+
+        // string handling
+        if (is_string($base)) {
+            // virtual methods provided by phptal
+            if ($current == 'length' || $current == 'size'){
+                $base = strlen($base);
+                continue;
+            }
+
+            // access char at index
+            if (is_numeric($current)){
+                $base = $base[$current];
+                continue;
+            }
+        }
+
+        // if this point is reached, then the part cannot be resolved
+        
+        if ($nothrow)
+            return null;
+        
+        $err = 'Unable to find part "%s" in path "%s" with base "%s"';
+        $err = sprintf($err, $current, $path, is_scalar($base)?"$base":(is_object($base)?get_class($base):gettype($base)));
+        throw new PHPTAL_Exception($err);
+    }
+
+    return $base;
+}
+
+function phptal_true($ctx, $path)
+{
+    $ctx->noThrow(true);
+    $res = phptal_path($ctx, $path, true);
+    $ctx->noThrow(false);
+    return !!$res;
+}
+
+/** 
+ * Returns true if $path can be fully resolved in $ctx context. 
+ */
+function phptal_exists($ctx, $path)
+{
+    // special note: this method may requires to be extended to a full
+    // phptal_path() sibling to avoid calling latest path part if it is a
+    // method or a function...
+    $ctx->noThrow(true);
+    $res = phptal_path($ctx, $path, true);
+    $ctx->noThrow(false);
+    return $res !== NULL;
+}
+
+function phptal_isempty($var)
+{
+	return $var === null || $var === false || $var === ''  
+	       || ((is_array($var) || $var instanceof Countable) && count($var)===0);
+}
+
+function phptal_escape($var, $ent, $encoding)
+{
+    if (is_string($var)) {
+        return htmlspecialchars($var, $ent, $encoding);
+    }
+    elseif (is_object($var)) {
+        if ($var instanceof SimpleXMLElement) return $var->asXML();
+        return htmlspecialchars($var->__toString(), $ent, $encoding);
+    }
+    elseif (is_bool($var)){
+        return (int)$var;
+    }
+    return $var;	
+}
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Dom/Defs.php b/wp-content/themes/vanilla/PHPTAL/Dom/Defs.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a529c9331a236fff7e2d8ce07a815fec9e5d186
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Dom/Defs.php
@@ -0,0 +1,237 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+// From http://dev.zope.org/Wikis/DevSite/Projects/ZPT/TAL%20Specification%201.4
+//
+// Order of Operations
+//
+// When there is only one TAL statement per element, the order in which
+// they are executed is simple. Starting with the root element, each
+// element's statements are executed, then each of its child elements is
+// visited, in order, to do the same.
+// 
+// Any combination of statements may appear on the same elements, except
+// that the content and replace statements may not appear together.
+// 
+// When an element has multiple statements, they are executed in this
+// order:
+// 
+//     * define
+//     * condition
+//     * repeat
+//     * content or replace
+//     * attributes
+//     * omit-tag
+// 
+// Since the on-error statement is only invoked when an error occurs, it
+// does not appear in the list.
+// 
+// The reasoning behind this ordering goes like this: You often want to set
+// up variables for use in other statements, so define comes first. The
+// very next thing to do is decide whether this element will be included at
+// all, so condition is next; since the condition may depend on variables
+// you just set, it comes after define. It is valuable be able to replace
+// various parts of an element with different values on each iteration of a
+// repeat, so repeat is next. It makes no sense to replace attributes and
+// then throw them away, so attributes is last. The remaining statements
+// clash, because they each replace or edit the statement element.
+// 
+// If you want to override this ordering, you must do so by enclosing the
+// element in another element, possibly div or span, and placing some of
+// the statements on this new element. 
+// 
+
+require_once PHPTAL_DIR.'PHPTAL/Namespace.php';
+require_once PHPTAL_DIR.'PHPTAL/Namespace/TAL.php';
+require_once PHPTAL_DIR.'PHPTAL/Namespace/METAL.php';
+require_once PHPTAL_DIR.'PHPTAL/Namespace/I18N.php';
+require_once PHPTAL_DIR.'PHPTAL/Namespace/PHPTAL.php';
+
+/**
+ * PHPTAL constants.
+ * 
+ * This is a pseudo singleton class, a user may decide to provide 
+ * his own singleton instance which will then be used by PHPTAL.
+ *
+ * This behaviour is mainly usefull to remove builtin namespaces 
+ * and provide custom ones.
+ * 
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Dom_Defs
+{
+    public static function getInstance()
+    {
+        if (self::$_instance == null){
+            self::$_instance = new PHPTAL_Dom_Defs();
+        }
+        return self::$_instance;
+    }
+
+    public static function setInstance(PHPTAL_Dom_Defs $instance)
+    {
+        self::$_instance = $instance;
+    }
+
+    
+    public function __construct()
+    {
+        $this->_dictionary = array();
+        $this->_namespaces = array();
+        $this->_xmlns = array();
+    }
+    
+    public function isEmptyTag($tagName)
+    {
+        return in_array(strtolower($tagName), self::$XHTML_EMPTY_TAGS);
+    }
+
+    public function xmlnsToLocalName($xmlns)
+    {
+        return $this->_xmlns[$xmlns];
+    }
+    
+    /**
+     * Returns true if the attribute is an xhtml boolean attribute.
+     *
+     * @return bool
+     */
+    public function isBooleanAttribute($att)
+    {
+        return in_array($att, self::$XHTML_BOOLEAN_ATTRIBUTES);
+    }
+
+    /**
+     * Returns true if the attribute is in the phptal dictionnary.
+     *
+     * @return bool
+     */
+    public function isPhpTalAttribute($att)
+    {
+        return array_key_exists(strtolower($att), $this->_dictionary);
+    }
+    
+    /**
+     * Returns true if the attribute is a valid phptal attribute or an unknown
+     * attribute.
+     *
+     * Examples of valid attributes: tal:content, metal:use-slot
+     * Examples of invalid attributes: tal:unknown, metal:content
+     *
+     * @return bool
+     */
+    public function isValidAttribute($att)
+    {
+        if (preg_match('/^(.*):(.*)$/', $att, $m)) {
+            list (,$ns,$sub) = $m;
+            if (array_key_exists(strtolower($ns), $this->_namespaces)
+                && !$this->isPhpTalAttribute($att)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Returns true if the attribute is a phptal handled xml namespace
+     * declaration.
+     *
+     * Examples of handled xmlns:  xmlns:tal, xmlns:metal
+     *
+     * @return bool
+     */
+    public function isHandledXmlNs($att, $value)
+    {
+        $att = strtolower($att);
+        return substr($att, 0, 6) == 'xmlns:'
+            && array_key_exists($value, $this->_xmlns);
+    }
+
+    public function getNamespaceAttribute($attName)
+    {
+        return $this->_dictionary[strtolower($attName)];
+    }
+
+    /**
+     * Register a PHPTAL_Namespace and its attribute into PHPTAL.
+     */
+    public function registerNamespace(PHPTAL_Namespace $ns)
+    {
+        $nsname = strtolower($ns->name);
+        $this->_namespaces[$nsname] = $ns;
+        $this->_xmlns[$ns->xmlns] = $nsname;
+        foreach ($ns->getAttributes() as $name => $attribute){
+            $key = $nsname.':'.strtolower($name);
+            $this->_dictionary[$key] = $attribute;
+        }
+    }
+
+    private static $_instance = null;
+    private $_dictionary;
+    private $_namespaces;
+    private $_xmlns;
+
+    /**
+     * This array contains XHTML tags that must be echoed in a &lt;tag/&gt; form
+     * instead of the &lt;tag&gt;&lt;/tag&gt; form.
+     *
+     * In fact, some browsers does not support the later form so PHPTAL 
+     * ensure these tags are correctly echoed.
+     */
+    private static $XHTML_EMPTY_TAGS = array(
+        'area',
+        'base',
+        'basefont',
+        'br',
+        'col',
+        'frame',
+        'hr',
+        'img',
+        'input',
+        'isindex',
+        'link',
+        'meta',
+        'param',
+    );
+
+    /**
+     * This array contains XHTML boolean attributes, their value is self 
+     * contained (ie: they are present or not).
+     */
+    private static $XHTML_BOOLEAN_ATTRIBUTES = array(
+        'checked',
+        'compact',
+        'declare',
+        'defer',
+        'disabled',
+        'ismap',
+        'multiple',
+        'noresize',
+        'noshade',
+        'nowrap',
+        'readonly',
+        'selected',
+    );
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Dom/Node.php b/wp-content/themes/vanilla/PHPTAL/Dom/Node.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e3b33bd23232ffc45212638be9c5cd8d3aec7dc
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Dom/Node.php
@@ -0,0 +1,254 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Dom/Defs.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/CodeWriter.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+/**
+ * Document node abstract class.
+ *
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+abstract class PHPTAL_Dom_Node
+{
+    public function __construct()
+    {
+    }
+
+    public function setSource($file, $line)
+    {
+        $this->_file = $file;
+        $this->_line = $line;
+    }
+
+    public function getSourceLine()
+    {
+        return $this->_line;
+    }
+    
+    public function getSourceFile()
+    {
+        return $this->_file;
+    }
+
+    private $_file;
+    private $_line;
+}
+
+/**
+ * Node container.
+ * 
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Dom_Tree extends PHPTAL_Dom_Node
+{
+    public function __construct()
+    {
+        parent::__construct();
+        $this->_children = array();
+    }
+
+    public function addChild(PHPTAL_Dom_Node $node)
+    {
+        array_push($this->_children, $node);
+    }
+    
+    public function &getChildren()
+    {
+        return $this->_children;
+    }
+
+    public function clearChildren()
+    {
+        $this->_children = array();
+    }
+    
+    protected $_children;
+}
+
+/**
+ * Document Tag representation.
+ *
+ * This is the main class used by PHPTAL because TAL is a Template Attribute
+ * Language, other Node kinds are (usefull) toys.
+ *
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Dom_Element extends PHPTAL_Dom_Tree
+{
+    private $name;
+    public $attributes = array();
+
+    public function __construct($name, $attributes)
+    {
+        if (!preg_match('/^[a-z_:][a-z0-9._:\x80-\xff-]*$/i',$name)) throw new PHPTAL_Exception("Invalid element name '$name'");
+        parent::__construct();
+        $this->name = $name;
+        $this->attributes = $attributes;
+    }
+
+    public function setXmlnsState(PHPTAL_Dom_XmlnsState $state)
+    {
+        $this->_xmlns = $state;
+        $this->xmlns = $state;
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    public function getXmlnsState()
+    {
+        return $this->_xmlns;
+    }
+
+    /** Returns true if the element contains specified PHPTAL attribute. */
+    public function hasAttribute($name)
+    {
+        $ns = $this->getNodePrefix();
+        foreach ($this->attributes as $key=>$value){
+            if ($this->_xmlns->unAliasAttribute($key) == $name){
+                return true;
+            }
+            if ($ns && $this->_xmlns->unAliasAttribute("$ns:$key") == $name){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /** Returns the value of specified PHPTAL attribute. */
+    public function getAttribute($name)
+    {
+        $ns = $this->getNodePrefix();
+        
+        foreach ($this->attributes as $key=>$value){
+            if ($this->_xmlns->unAliasAttribute($key) == $name){
+                return $value;
+            }
+            if ($ns && $this->_xmlns->unAliasAttribute("$ns:$key") == $name){
+                return $value;
+            }
+        }
+        return false;
+    }
+
+    /** 
+     * Returns true if this element or one of its PHPTAL attributes has some
+     * content to print (an empty text node child does not count).
+     */
+    public function hasRealContent()
+    {
+        if (count($this->_children) == 0)
+            return false;
+
+        if (count($this->_children) == 1){
+            $child = $this->_children[0];
+            if ($child instanceOf PHPTAL_Dom_Text && $child->getValue() == ''){
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    private function getNodePrefix()
+    {
+        $result = false;
+        if (preg_match('/^(.*?):block$/', $this->name, $m)){
+            list(,$result) = $m;
+        }
+        return $result;
+    }
+    
+    private function hasContent()
+    {
+        return count($this->_children) > 0;
+    }
+
+    /** 
+     * XMLNS aliases propagated from parent nodes and defined by this node
+     * attributes.
+     */
+    protected $_xmlns;
+}
+
+/**
+ * @package phptal.dom
+ */
+class PHPTAL_Dom_ValueNode extends PHPTAL_Dom_Node
+{
+    public function __construct($data)
+    {
+        $this->_value = $data;
+    }
+
+    public function getValue()
+    {
+        return $this->_value;
+    }
+
+    private $_value;
+}
+
+/**
+ * Document text data representation.
+ * @package phptal.dom
+ */
+class PHPTAL_Dom_Text extends PHPTAL_Dom_ValueNode{}
+
+/**
+ * Preprocessor, etc... representation.
+ * 
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Dom_Specific extends PHPTAL_Dom_ValueNode {}
+
+/**
+ * Comment nodes.
+ * @package phptal.dom
+ */
+class PHPTAL_Dom_Comment extends PHPTAL_Dom_ValueNode {}
+
+/**
+ * Document doctype representation.
+ * 
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Dom_Doctype extends PHPTAL_Dom_ValueNode {}
+
+/**
+ * XML declaration node.
+ *
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Dom_XmlDeclaration extends PHPTAL_Dom_ValueNode {}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Dom/Parser.php b/wp-content/themes/vanilla/PHPTAL/Dom/Parser.php
new file mode 100644
index 0000000000000000000000000000000000000000..76d882474fc760b55755d86bcd2c7f50b2432280
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Dom/Parser.php
@@ -0,0 +1,154 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Dom/Defs.php';
+require_once PHPTAL_DIR.'PHPTAL/Dom/Node.php';
+require_once PHPTAL_DIR.'PHPTAL/Dom/XmlParser.php';
+require_once PHPTAL_DIR.'PHPTAL/Dom/XmlnsState.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Tales.php';
+
+/**
+ * Template parser.
+ * 
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Dom_Parser extends PHPTAL_XmlParser
+{
+    const ERR_DOCUMENT_END_STACK_NOT_EMPTY = "Not all elements were closed before end of the document (element stack not empty)";
+    const ERR_UNSUPPORTED_ATTRIBUTE = "Unsupported attribute '%s'";
+    const ERR_ELEMENT_CLOSE_MISMATCH = "Tag closure mismatch, expected '%s' but was '%s'";
+  
+    public function __construct($input_encoding = 'UTF-8')
+    {
+        parent::__construct($input_encoding);
+        $this->_xmlns = new PHPTAL_Dom_XmlnsState();
+    }
+
+    public function getXmlnsState()
+    {
+        return $this->_xmlns;
+    }
+
+    public function stripComments($b)
+    {
+        $this->_stripComments = $b;
+    }
+    
+    public function parseString($src, $filename = '<string>') 
+    {
+        parent::parseString($src, $filename);
+        return $this->_tree;
+    }
+    
+    public function parseFile($path)
+    {
+        parent::parseFile($path);
+        return $this->_tree;
+    }
+
+    // ~~~~~ XmlParser implementation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    
+    public function onDocumentStart()
+    {
+        $this->_tree = new PHPTAL_Dom_Tree();
+        $this->_tree->setSource($this->getSourceFile(), $this->getLineNumber());
+        $this->_stack = array();
+        $this->_current = $this->_tree;
+    }
+    
+    public function onDocumentEnd()
+    {
+        if (count($this->_stack) > 0) {
+            $this->raiseError(self::ERR_DOCUMENT_END_STACK_NOT_EMPTY);
+        }
+    }
+
+    public function onDocType($doctype)
+    {
+        $this->pushNode(new PHPTAL_Dom_DocType($doctype));
+    }
+
+    public function onXmlDecl($decl)
+    {
+        $this->pushNode(new PHPTAL_Dom_XmlDeclaration($decl));
+    }
+    
+    public function onComment($data)
+    {
+        if ($this->_stripComments) 
+            return;
+        $this->pushNode(new PHPTAL_Dom_Comment($data));
+    }
+    
+    public function onSpecific($data)
+    {
+        $this->pushNode(new PHPTAL_Dom_Specific($data));
+    }
+
+    public function onElementStart($name, $attributes)
+    {        
+        $this->_xmlns = PHPTAL_Dom_XmlnsState::newElement($this->_xmlns, $attributes);
+        
+        foreach ($attributes as $key=>$value) {
+            if (!$this->_xmlns->isValidAttribute($key)) {
+                $this->raiseError(self::ERR_UNSUPPORTED_ATTRIBUTE, $key);
+            }
+        }
+        
+        $node = new PHPTAL_Dom_Element($name, $attributes);
+        $node->setXmlnsState($this->getXmlnsState());
+        $this->pushNode($node);
+        array_push($this->_stack, $this->_current);
+        $this->_current = $node;
+    }
+    
+    public function onElementData($data)
+    {
+        $this->pushNode(new PHPTAL_Dom_Text($data));
+    }
+
+    public function onElementClose($name)
+    {
+		if (!$this->_current instanceof PHPTAL_Dom_Element) $this->raiseError("Found closing tag for '$name' where there are no open tags");			
+        if ($this->_current->getName() != $name) {
+            $this->raiseError(self::ERR_ELEMENT_CLOSE_MISMATCH, $this->_current->getName(), $name);
+        }
+        $this->_current = array_pop($this->_stack);
+        if ($this->_current instanceOf PHPTAL_Dom_Element)
+            $this->_xmlns = $this->_current->getXmlnsState();
+    }
+
+    private function pushNode(PHPTAL_Dom_Node $node)
+    {
+        $node->setSource($this->getSourceFile(), $this->getLineNumber());
+        $this->_current->addChild($node);
+    }
+    
+    private $_tree;    /* PHPTAL_Dom_Parser_NodeTree */
+    private $_stack;   /* array<PHPTAL_Dom_Parser_Node> */
+    private $_current; /* PHPTAL_Dom_Parser_Node */
+    private $_xmlns;   /* PHPTAL_Dom_Parser_XmlnsState */
+    private $_stripComments = false;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Dom/XmlParser.php b/wp-content/themes/vanilla/PHPTAL/Dom/XmlParser.php
new file mode 100644
index 0000000000000000000000000000000000000000..8f6c30c957e1eda29461962fa008907a59ebdf0f
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Dom/XmlParser.php
@@ -0,0 +1,386 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * Simple sax like xml parser for PHPTAL.
+ *
+ * Because PHP Xml parser libraries tends to fail giving a real xml document 
+ * representation (at the time this file was created, it was impossible to 
+ * retrieve doctypes, xml declaration, problem with comments and CDATA) this 
+ * parser was created and can be manipulated to accept some user errors 
+ * like < and < in attribute values or inside text nodes.
+ *
+ * @package phptal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ * @see PHPTAL_Dom_Parser
+ */
+abstract class PHPTAL_XmlParser
+{
+    // available parser states
+    const ST_ROOT = 0;
+    const ST_TEXT = 1;
+    const ST_LT   = 2;
+    const ST_TAG_NAME = 3;
+    const ST_TAG_CLOSE = 4;
+    const ST_TAG_SINGLE = 5;
+    const ST_TAG_ATTRIBUTES = 6;
+    const ST_CDATA = 7;
+    const ST_COMMENT = 8;
+    const ST_DOCTYPE = 9;
+    const ST_XMLDEC = 15;
+    const ST_PREPROC = 10;
+    const ST_ATTR_KEY = 11;
+    const ST_ATTR_EQ = 12;
+    const ST_ATTR_QUOTE = 13;
+    const ST_ATTR_VALUE = 14;
+
+    // exceptions error messages
+    const ERR_CHARS_BEFORE_DOC_START = 
+        "Characters found before the begining of the document!";
+    const ERR_EXPECT_VALUE_QUOTE =
+        "Unexpected '%s' character, expecting attribute single or double quote";
+        
+    const BOM_STR = "\xef\xbb\xbf";
+    
+    
+    static $state_names = array(
+      self::ST_ROOT => 'root node',
+      self::ST_TEXT => 'text',
+      self::ST_LT   => 'start of tag',
+      self::ST_TAG_NAME => 'tag name',
+      self::ST_TAG_CLOSE => 'closing tag',
+      self::ST_TAG_SINGLE => 'self-closing tag',
+      self::ST_TAG_ATTRIBUTES => 'tag',
+      self::ST_CDATA => 'CDATA',
+      self::ST_COMMENT => 'comment',
+      self::ST_DOCTYPE => 'doctype',
+      self::ST_XMLDEC => 'XML declaration',
+      self::ST_PREPROC => 'preprocessor directive',
+      self::ST_ATTR_KEY => 'attribute name',
+      self::ST_ATTR_EQ => 'attribute value',
+      self::ST_ATTR_QUOTE => 'quoted attribute value',
+      self::ST_ATTR_VALUE => 'unquoted attribute value',
+    );
+    
+    public function __construct() 
+    {
+        $this->_file = "<string>";
+    }
+
+    public function parseFile($src) 
+    {
+        if (!file_exists($src)) {
+            throw new PHPTAL_Exception("file $src not found");
+        }
+        $this->parseString(file_get_contents($src), $src);
+    }
+
+    public function parseString($src, $filename = '<string>') 
+    {        
+        $this->_file = $filename;
+        
+        // remove BOM (utf8 byte order mark)... 
+        if (substr($src,0,3) == self::BOM_STR){
+            $src = substr($src, 3);
+        }
+        
+        $this->_line = 1;
+        $state = self::ST_ROOT;
+        $mark  = 0;
+        $len   = strlen($src);
+
+        $quoteStyle = '"';
+        $tagname    = "";
+        $attribute  = "";
+        $attributes = array();
+
+        $customDoctype = false;
+
+        $this->onDocumentStart();
+        for ($i=0; $i<$len; $i++) {        
+            $c = $src[$i];
+
+            if ($c == "\n") $this->_line++;
+
+            switch ($state) {
+                case self::ST_ROOT:
+                    if ($c == '<') {
+                        $mark = $i; // mark tag start
+                        $state = self::ST_LT;
+                    }
+                    else if (!self::isWhiteChar($c)) {
+                        $this->raiseError(self::ERR_CHARS_BEFORE_DOC_START);
+                    }
+                    break;
+
+                case self::ST_TEXT:
+                    if ($c == '<') {
+                        if ($mark != $i) {
+                            $this->onElementData(substr($src, $mark, $i-$mark));
+                        }
+                        $mark = $i;
+                        $state = self::ST_LT;
+                    }
+                    break;
+
+                case self::ST_LT:
+                    if ($c == '/') {
+                        $mark = $i+1;
+                        $state = self::ST_TAG_CLOSE;
+                    }
+                    else if ($c == '?' and substr($src, $i, 4) == '?xml') {
+                        $state = self::ST_XMLDEC;
+                    }
+                    else if ($c == '?') {
+                        $state = self::ST_PREPROC;
+                    }
+                    else if ($c == '!' and substr($src, $i, 3) == '!--') {
+                        $state = self::ST_COMMENT;
+                    }
+                    else if ($c == '!' and substr($src, $i, 8) == '![CDATA[') {
+                        $state = self::ST_CDATA;
+                    }
+                    else if ($c == '!' and substr($src, $i, 8) == '!DOCTYPE') {
+                        $state = self::ST_DOCTYPE;
+                    }
+                    else if (!self::isAlpha($c)) {
+                        $state = self::ST_TEXT;
+                    }
+                    else {
+                        $mark = $i; // mark node name start
+                        $attributes = array();
+                        $attribute = "";
+                        $state = self::ST_TAG_NAME;
+                    }
+                    break;
+
+                case self::ST_TAG_NAME:
+                    if (self::isWhiteChar($c)) {
+                        $tagname = substr($src, $mark, $i-$mark);
+                        $state = self::ST_TAG_ATTRIBUTES;
+                    }
+                    else if ($c == '/') {
+                        $tagname = substr($src, $mark, $i-$mark);
+                        $state = self::ST_TAG_SINGLE;
+                    }
+                    else if ($c == '>') {
+                        $tagname = substr($src, $mark, $i-$mark);
+                        $mark = $i+1; // mark text start
+                        $state = self::ST_TEXT;
+                        $this->onElementStart($tagname, $attributes);
+                    }
+                    break;
+
+                case self::ST_TAG_CLOSE:
+                    if ($c == '>') {
+                        $tagname = rtrim(substr($src, $mark, $i-$mark));
+                        $this->onElementClose($tagname);
+                        $mark = $i+1; // mark text start
+                        $state = self::ST_TEXT;
+                    }
+                    break;
+
+                case self::ST_TAG_SINGLE:
+                    if ($c != '>') {
+                        // error
+                    }
+                    $mark = $i+1;   // mark text start
+                    $state = self::ST_TEXT;
+                    $this->onElementStart($tagname, $attributes);
+                    $this->onElementClose($tagname);
+                    break;
+
+                case self::ST_TAG_ATTRIBUTES:
+                    if ($c == '>') {
+                        $mark = $i+1;   // mark text start
+                        $state = self::ST_TEXT;
+                        $this->onElementStart($tagname, $attributes);
+                    }
+                    else if ($c == '/') {
+                        $state = self::ST_TAG_SINGLE;
+                    }
+                    else if (self::isWhiteChar($c)) {
+                    }
+                    else {
+                        $mark = $i; // mark attribute key start
+                        $state = self::ST_ATTR_KEY;
+                    }
+                    break;
+
+                case self::ST_COMMENT:
+                    if ($c == '>' and substr($src, $i-2, 2) == '--') {
+                        $this->onComment(substr($src, $mark, $i-$mark+1));
+                        $mark = $i+1; // mark text start
+                        $state = self::ST_TEXT;
+                    }
+                    break;
+
+                case self::ST_CDATA:
+                    if ($c == '>' and substr($src, $i-2, 2) == ']]') {
+                        $this->onSpecific(substr($src, $mark, $i-$mark+1));
+                        $mark = $i+1; // mark text start
+                        $state = self::ST_TEXT;
+                    }
+                    break;
+
+                case self::ST_XMLDEC:
+                    if ($c == '?' && substr($src, $i, 2) == '?>') {
+                        $this->onXmlDecl(substr($src, $mark, $i-$mark+2));
+                        $i++; // skip '>'
+                        $mark = $i+1; // mark text start
+                        $state = self::ST_TEXT;
+                    }
+                    break;
+
+                case self::ST_DOCTYPE:
+                    if ($c == '[') {
+                        $customDoctype = true;
+                    }
+                    else if ($customDoctype && $c == '>' && substr($src, $i-1, 2) == ']>'){
+                        $customDoctype = false;
+                        $this->onDocType(substr($src, $mark, $i-$mark+1));
+                        $mark = $i+1; // mark text start
+                        $state = self::ST_TEXT;
+                    }
+                    else if (!$customDoctype && $c == '>') {
+                        $customDoctype = false;
+                        $this->onDocType(substr($src, $mark, $i-$mark+1));
+                        $mark = $i+1; // mark text start
+                        $state = self::ST_TEXT;
+                    }
+                    break;
+
+                case self::ST_PREPROC:
+                    if ($c == '>' and $src[$i-1] == '?') {
+                        $this->onSpecific(substr($src, $mark, $i-$mark+1));
+                        $mark = $i+1; // mark text start
+                        $state = self::ST_TEXT;
+                    }
+                    break;
+
+                case self::ST_ATTR_KEY:
+                    if (self::isWhiteChar($c)) {
+                        $attribute = substr($src, $mark, $i-$mark);
+                        $state = self::ST_ATTR_EQ;
+                    }
+                    else if ($c == '=') {
+                        $attribute = substr($src, $mark, $i-$mark);
+                        $state = self::ST_ATTR_VALUE;
+                    }
+                    break;
+
+                case self::ST_ATTR_EQ:
+                    if ($c == '=') {
+                        $state = self::ST_ATTR_VALUE;
+                    }
+                    break;
+
+                case self::ST_ATTR_VALUE:
+                    if (self::isWhiteChar($c)){
+                    }
+                    else if ($c == '"' or $c == '\'') {
+                        $quoteStyle = $c;
+                        $state = self::ST_ATTR_QUOTE;
+                        $mark = $i+1; // mark attribute real value start
+                    }
+                    else {
+                        $err = self::ERR_EXPECT_VALUE_QUOTE;
+                        $err = sprintf($err, $c);                            
+                        $this->raiseError($err);
+                    }
+                    break;
+
+                case self::ST_ATTR_QUOTE:
+                    if ($c == $quoteStyle) {
+                        if (isset($attributes[$attribute])) $this->raiseError("Attribute '$attribute' on '$tagname' is defined more than once");
+                        $attributes[$attribute] = substr($src, $mark, $i-$mark);
+                        $state = self::ST_TAG_ATTRIBUTES;
+                    }
+                    break;
+            }
+        }
+        
+        if ($state == self::ST_TEXT) // allows text past root node, which is in violation of XML spec
+        {
+            if ($i > $mark)
+            {
+                $text = substr($src, $mark, $i-$mark);
+                //if (!ctype_space($text)) $this->onElementData($text);
+                if (!ctype_space($text)) $this->raiseError("Characters found after end of the root element");
+            }
+        }
+        else
+        {
+            throw new PHPTAL_Exception("Finished document in unexpected state: ".self::$state_names[$state]." is not finished");
+        }
+        
+        $this->onDocumentEnd();
+    }
+
+    public function getSourceFile()
+    {
+        return $this->_file;
+    }
+    
+    public function getLineNumber()
+    {
+        return $this->_line;
+    }
+
+    public static function isWhiteChar($c)
+    {
+        return strpos(" \t\n\r\0", $c) !== false;
+    }
+
+    public static function isAlpha($c)
+    {
+        $char = strtolower($c);
+        return ($char >= 'a' && $char <= 'z');
+    }
+
+    public abstract function onDocType($doctype);
+    public abstract function onXmlDecl($decl);
+    public abstract function onSpecific($data);
+    public abstract function onComment($data);
+    public abstract function onElementStart($name, $attributes);
+    public abstract function onElementClose($name);
+    public abstract function onElementData($data);
+    public abstract function onDocumentStart();
+    public abstract function onDocumentEnd();
+    
+    protected function raiseError($errFmt)
+    {
+        $args = func_get_args();
+        $errStr = call_user_func_array('sprintf', $args);
+        
+        $str = "%s error: %s in %s:%d";
+        $str = sprintf($str, get_class($this), $errStr, $this->_file, $this->_line);
+        throw new PHPTAL_Exception($str);
+    }
+    
+    private $_file;
+    private $_line;
+    private $_source;
+}
+
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Dom/XmlnsState.php b/wp-content/themes/vanilla/PHPTAL/Dom/XmlnsState.php
new file mode 100644
index 0000000000000000000000000000000000000000..782e84c33241cf2763585e0906aa24bc86a8dbdc
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Dom/XmlnsState.php
@@ -0,0 +1,98 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * Stores XMLNS aliases fluctuation in the xml flow.
+ *
+ * This class is used to bind a PHPTAL namespace to an alias, for example using
+ * xmlns:t="http://xml.zope.org/namespaces/tal" and later use t:repeat instead 
+ * of tal:repeat.
+ *
+ * @package phptal.dom
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Dom_XmlnsState 
+{
+    /** Create a new XMLNS state inheriting provided aliases. */
+    public function __construct($aliases = array())
+    {
+        assert(is_array($aliases));
+        $this->_aliases = $aliases;
+    }
+
+    /** Returns true if $attName is a valid attribute name, false otherwise. */
+    public function isValidAttribute($attName)
+    {
+        $unaliased = $this->unAliasAttribute($attName);
+        return PHPTAL_Dom_Defs::getInstance()->isValidAttribute($unaliased);
+    }
+
+    /** Returns true if $attName is a PHPTAL attribute, false otherwise. */
+    public function isPhpTalAttribute($attName)
+    {
+        $unaliased = $this->unAliasAttribute($attName);
+        return PHPTAL_Dom_Defs::getInstance()->isPhpTalAttribute($unaliased);
+    }
+
+    /** Returns the unaliased name of specified attribute. */
+    public function unAliasAttribute($attName)
+    {
+        if (count($this->_aliases) == 0) 
+            return $attName;
+        
+        $result = $attName;
+        foreach ($this->_aliases as $alias => $real){
+            $result = str_replace("$alias:", "$real:", $result);
+        }
+        return $result;
+    }
+    
+    /** 
+     * Returns a new XmlnsState inheriting of $currentState if $nodeAttributes contains 
+     * xmlns attributes, returns $currentState otherwise.
+     *
+     * This method is used by the PHPTAL parser to keep track of xmlns fluctuation for
+     * each encountered node.
+     */
+    public static function newElement(PHPTAL_Dom_XmlnsState $currentState, $nodeAttributes)
+    {
+        $aliases = array();
+        foreach ($nodeAttributes as $att => $value){
+            if (PHPTAL_Dom_Defs::getInstance()->isHandledXmlNs($att, $value)){
+                preg_match('/^xmlns:(.*?)$/', $att, $m);
+                list(,$alias) = $m;
+                $aliases[$alias] = PHPTAL_Dom_Defs::getInstance()->xmlnsToLocalName($value);
+            }
+        }
+        if (count($aliases) > 0){
+            // inherit aliases with maybe an overwrite
+            $aliases = array_merge($currentState->_aliases, $aliases);
+            return new PHPTAL_Dom_XmlnsState($aliases);
+        }
+        return $currentState;
+    }
+
+    private $_aliases;
+}
+
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Exception.php b/wp-content/themes/vanilla/PHPTAL/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2e262710fa920a8e98dc4d38e418347cae75d59
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Exception.php
@@ -0,0 +1,65 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * @package phptal
+ */
+class PHPTAL_Exception extends Exception
+{
+    public $srcFile;
+    public $srcLine;
+
+    public function __construct($msg, $srcFile=false, $srcLine=false)
+    {
+        parent::__construct($msg);
+        $this->srcFile = $srcFile;
+        $this->srcLine = $srcLine;
+    }
+
+    public function __toString()
+    {
+        if (empty($this->srcFile)){
+            return parent::__toString();
+        }
+        $res = sprintf('From %s around line %d'."\n", $this->srcFile, $this->srcLine);
+        $res .= parent::__toString();
+        return $res;
+    }
+
+    public static function formatted($format /*, ...*/)
+    {
+        $args = func_get_args();
+        $msg  = call_user_func('sprintf', $args);
+        return new PHPTAL_Exception($format);
+    }
+    
+    /**
+     * set new source line/file only if one hasn't been set previously
+     */
+    public function hintSrcPosition($srcFile, $srcLine)
+    {
+        if ($srcFile && $this->srcFile === false) $this->srcFile = $srcFile;
+        if ($srcLine && $this->srcLine === false) $this->srcLine = $srcLine;
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/FileSource.php b/wp-content/themes/vanilla/PHPTAL/FileSource.php
new file mode 100644
index 0000000000000000000000000000000000000000..246db00197b0f738842bb61a077b3cb8635b346e
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/FileSource.php
@@ -0,0 +1,64 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Source.php';
+require_once PHPTAL_DIR.'PHPTAL/SourceResolver.php';
+
+/** 
+ * @package phptal
+ */
+class PHPTAL_FileSource implements PHPTAL_Source
+{
+    public function __construct($path)
+    {
+        $this->_path = realpath($path);
+        if ($this->_path === false) throw new PHPTAL_Exception("Unable to normalize path '$path'");
+    }
+
+    public function getRealPath()
+    {
+        return $this->_path;
+    }
+
+    public function getLastModifiedTime()
+    {
+        return filemtime($this->_path);
+    }
+
+    public function getData()
+    {
+        return file_get_contents($this->_path);
+    }
+
+    private $_path;
+}
+
+/** 
+ * @package phptal
+ */
+class PHPTAL_FileSourceResolver implements PHPTAL_SourceResolver
+{
+    public function __construct($repositories)
+    {
+        $this->_repositories = $repositories;
+    }
+
+    public function resolve($path)
+    {
+        foreach ($this->_repositories as $repository){
+            $file = $repository . DIRECTORY_SEPARATOR . $path;
+            if (file_exists($file)){
+                return new PHPTAL_FileSource($file);
+            }
+        }
+
+        if (file_exists($path)){
+            return new PHPTAL_FileSource($path);
+        }
+
+        return null;
+    }
+
+    private $_repositories;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Filter.php b/wp-content/themes/vanilla/PHPTAL/Filter.php
new file mode 100644
index 0000000000000000000000000000000000000000..36dee6bfbaf1c851b70ef49f7a8af20d25b4370c
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Filter.php
@@ -0,0 +1,31 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * @package phptal
+ */
+interface PHPTAL_Filter
+{
+    public function filter($str);
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/GetTextTranslator.php b/wp-content/themes/vanilla/PHPTAL/GetTextTranslator.php
new file mode 100644
index 0000000000000000000000000000000000000000..53e2aaa81dba3b371f1c651490e2268ca5ffbe0d
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/GetTextTranslator.php
@@ -0,0 +1,143 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/TranslationService.php';
+
+/**
+ * PHPTAL_TranslationService gettext implementation.
+ *
+ * Because gettext is the most common translation library in use, this
+ * implementation is shipped with the PHPTAL library.
+ *
+ * Please refer to the PHPTAL documentation for usage examples.
+ * 
+ * @package phptal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_GetTextTranslator implements PHPTAL_TranslationService
+{
+    public function __construct()
+    {
+	    if (!function_exists('gettext')) throw new PHPTAL_Exception("Gettext not installed");
+	    $this->useDomain("messages"); // PHP bug #21965
+    }
+
+    private $_vars = array();
+    private $_currentDomain;
+    private $_encoding = 'UTF-8';
+    private $_canonicalize = false;
+
+    public function setEncoding($enc)
+    {
+        $this->_encoding = $enc;
+    }
+    
+    /**
+     * if true, all non-ASCII characters in keys will be converted to C<xxx> form. This impacts performance.
+     * by default keys will be passed to gettext unmodified.
+     */
+    public function setCanonicalize($bool)
+    {
+        $this->_canonicalize = $bool;
+    }
+    
+    public function setLanguage()
+    {
+        $langs = func_get_args();
+        foreach ($langs as $langCode){
+            putenv("LANG=$langCode");
+            putenv("LC_ALL=$langCode");
+            putenv("LANGUAGE=$langCode");
+            if (setlocale(LC_ALL, $langCode)) {
+                return;
+            }
+        }
+
+        $err = sprintf('Language(s) code(s) "%s" not supported by your system', join(',', $langs));
+        throw new PHPTAL_Exception($err);
+    }
+    
+    /**
+     * encoding must be set before calling addDomain
+     */
+    public function addDomain($domain, $path='./locale/')
+    {
+        bindtextdomain($domain, $path);
+        if ($this->_encoding){
+            bind_textdomain_codeset($domain, $this->_encoding);
+        }
+        $this->useDomain($domain);
+    }
+    
+    public function useDomain($domain)
+    {
+        $old = $this->_currentDomain;
+        $this->_currentDomain = $domain;
+        textdomain($domain);
+        return $old;
+    }
+    
+    public function setVar($key, $value)
+    {
+        $this->_vars[$key] = $value;
+    }
+    
+    public function translate($key, $htmlencode=true)
+    {
+        if ($this->_canonicalize) $key = self::_canonicalizeKey($key);
+        
+        $value = gettext($key);
+        
+        if ($htmlencode){
+            $value = @htmlspecialchars($value, ENT_QUOTES, $this->_encoding); // silence unsupported encoding error for ISO-8859-x, which doesn't matter.
+        }
+        while (preg_match('/\${(.*?)\}/sm', $value, $m)){
+            list($src,$var) = $m;
+            if (!array_key_exists($var, $this->_vars)){
+                $err = sprintf('Interpolation error, var "%s" not set', $var);
+                throw new PHPTAL_Exception($err);
+            }
+            $value = str_replace($src, $this->_vars[$var], $value);
+        }
+        return $value;
+    }
+
+    static function _canonicalizeKey($key_)
+    {
+        $result = "";
+        $key_ = trim($key_);
+        $key_ = str_replace("\n", "", $key_);
+        $key_ = str_replace("\r", "", $key_);
+        for ($i = 0; $i<strlen($key_); $i++){
+            $c = $key_[$i];
+            $o = ord($c);
+            if ($o < 5 || $o > 127){
+                $result .= 'C<'.$o.'>';
+            }
+            else {
+                $result .= $c;
+            }
+        }
+        return $result;
+    }
+}
+
diff --git a/wp-content/themes/vanilla/PHPTAL/LICENSE.TXT b/wp-content/themes/vanilla/PHPTAL/LICENSE.TXT
new file mode 100644
index 0000000000000000000000000000000000000000..d3a38e51b4de4dff30ab19407c908f9127a59a3c
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/LICENSE.TXT
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/wp-content/themes/vanilla/PHPTAL/Namespace.php b/wp-content/themes/vanilla/PHPTAL/Namespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..a249b4ff7164b2c89d02a6a20d57f4c321ae700d
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Namespace.php
@@ -0,0 +1,163 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/** 
+ * @package phptal
+ */
+abstract class PHPTAL_NamespaceAttribute
+{
+    /** 
+     * @param $name string The attribute name
+     * @param $priority int Attribute execution priority
+     */
+    public function __construct($name, $priority)
+    {
+        $this->_name = $name;
+        $this->_priority = $priority;
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    { 
+        return $this->_name; 
+    }
+
+    public function getFullName()
+    {
+        return $this->_namespace->getName() . ':' . $this->_name;
+    }
+    
+    public function getPriority(){ return $this->_priority; }
+    public function getNamespace(){ return $this->_namespace; }
+    public function setNamespace(PHPTAL_Namespace $ns){ $this->_namespace = $ns; }
+
+    public function createAttributeHandler(PHPTAL_Php_Element $tag, $expression)
+    {
+        return $this->_namespace->createAttributeHandler($this, $tag, $expression);
+    }
+    
+    private $_name;         /* Attribute name without the namespace: prefix */
+    private $_priority;     /* [0 - 1000] */
+    private $_namespace;    /* PHPTAL_Namespace */
+}
+
+/** 
+ * @package phptal
+ */
+class PHPTAL_NamespaceAttributeSurround extends PHPTAL_NamespaceAttribute 
+{
+    public function __construct($name, $priority)
+    {
+        parent::__construct($name, $priority);
+    }
+}
+
+/** 
+ * @package phptal
+ */
+class PHPTAL_NamespaceAttributeReplace extends PHPTAL_NamespaceAttribute 
+{
+    public function __construct($name, $priority)
+    {
+        parent::__construct($name, $priority);
+    }
+}
+
+/** 
+ * @package phptal
+ */
+class PHPTAL_NamespaceAttributeContent extends PHPTAL_NamespaceAttribute 
+{
+    public function __construct($name, $priority)
+    {
+        parent::__construct($name, $priority);
+    }
+}
+
+/** 
+ * @package phptal
+ */
+abstract class PHPTAL_Namespace
+{
+    public $xmlns;
+    public $name;
+
+    public function __construct($name, $xmlns)
+    {
+        $this->_attributes = array();
+        $this->name = $name;
+        $this->xmlns = $xmlns;
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    public function hasAttribute($attributeName)
+    {
+        return array_key_exists(strtolower($attributeName), $this->_attributes);
+    }
+
+    public function getAttribute($attributeName)
+    {
+        return $this->_attributes[strtolower($attributeName)];
+    }
+    
+    public function addAttribute(PHPTAL_NamespaceAttribute $attribute)
+    {
+        $attribute->setNamespace($this);
+        $this->_attributes[strtolower($attribute->getName())] = $attribute;
+    }
+
+    public function getAttributes()
+    {
+        return $this->_attributes;
+    }
+
+    abstract public function createAttributeHandler(PHPTAL_NamespaceAttribute $att, PHPTAL_Php_Element $tag, $expression);
+
+    protected $_attributes;
+}
+
+/** 
+ * @package phptal
+ */
+class PHPTAL_BuiltinNamespace extends PHPTAL_Namespace
+{
+    public function createAttributeHandler(PHPTAL_NamespaceAttribute $att, PHPTAL_Php_Element $tag, $expression)
+    {
+        $name = $att->getName();
+        $name = str_replace('-', '', $name);
+        
+        $class = 'PHPTAL_Php_Attribute_'.$this->getName().'_'.$name;
+        $result = new $class();
+        $result->tag = $tag;
+        $result->name = strtoupper($att->getFullName());
+        $result->expression = $expression;
+        return $result;
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Namespace/I18N.php b/wp-content/themes/vanilla/PHPTAL/Namespace/I18N.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a3cc18f6737283fa4a189c9094d3d32ad1cf87d
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Namespace/I18N.php
@@ -0,0 +1,28 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Dom/Defs.php';
+require_once PHPTAL_DIR.'PHPTAL/Namespace.php';
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/I18N/Translate.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/I18N/Name.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/I18N/Domain.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/I18N/Attributes.php';
+
+/**
+ * @package phptal.namespace
+ */
+class PHPTAL_Namespace_I18N extends PHPTAL_BuiltinNamespace
+{
+    public function __construct()
+    {
+        parent::__construct('i18n', 'http://xml.zope.org/namespaces/i18n');
+        $this->addAttribute(new PHPTAL_NamespaceAttributeContent('translate', 5));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('name', 5));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('attributes', 10));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('domain', 3));
+    }
+}
+
+PHPTAL_Dom_Defs::getInstance()->registerNamespace(new PHPTAL_Namespace_I18N());
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Namespace/METAL.php b/wp-content/themes/vanilla/PHPTAL/Namespace/METAL.php
new file mode 100644
index 0000000000000000000000000000000000000000..dd64a6c87e9150e2376281567a4669f419efdd53
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Namespace/METAL.php
@@ -0,0 +1,28 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Dom/Defs.php';
+require_once PHPTAL_DIR.'PHPTAL/Namespace.php';
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/METAL/DefineMacro.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/METAL/UseMacro.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/METAL/DefineSlot.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/METAL/FillSlot.php';
+
+/** 
+ * @package phptal.namespace
+ */
+class PHPTAL_Namespace_METAL extends PHPTAL_BuiltinNamespace
+{
+    public function __construct()
+    {
+        parent::__construct('metal', 'http://xml.zope.org/namespaces/metal');
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('define-macro', 1));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeReplace('use-macro', 9));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('define-slot', 9));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('fill-slot', 9));
+    }
+}
+
+PHPTAL_Dom_Defs::getInstance()->registerNamespace(new PHPTAL_Namespace_METAL());
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Namespace/PHPTAL.php b/wp-content/themes/vanilla/PHPTAL/Namespace/PHPTAL.php
new file mode 100644
index 0000000000000000000000000000000000000000..b458f7a59f42701170c03c63f25899ffdf5e1ee3
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Namespace/PHPTAL.php
@@ -0,0 +1,28 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Dom/Defs.php';
+require_once PHPTAL_DIR.'PHPTAL/Namespace.php';
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/PHPTAL/Tales.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/PHPTAL/Debug.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/PHPTAL/Id.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/PHPTAL/Cache.php';
+
+/**
+ * @package phptal.namespace
+ */
+class PHPTAL_Namespace_PHPTAL extends PHPTAL_BuiltinNamespace
+{
+    public function __construct()
+    {
+        parent::__construct('phptal', 'http://xml.zope.org/namespaces/phptal');
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('tales', -1));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('debug', -2));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('id', 7));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('cache', -3));
+    }
+}
+
+PHPTAL_Dom_Defs::getInstance()->registerNamespace(new PHPTAL_Namespace_PHPTAL());
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Namespace/TAL.php b/wp-content/themes/vanilla/PHPTAL/Namespace/TAL.php
new file mode 100644
index 0000000000000000000000000000000000000000..57916fc537c68a9b68437da16e94941f4284c72e
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Namespace/TAL.php
@@ -0,0 +1,37 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Namespace.php';
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/Comment.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/Replace.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/Content.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/Condition.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/Attributes.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/Repeat.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/Define.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/OnError.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute/TAL/OmitTag.php';
+
+/**
+ * @package phptal.namespace
+ */
+class PHPTAL_Namespace_TAL extends PHPTAL_BuiltinNamespace
+{
+    public function __construct()
+    {
+        parent::__construct('tal', 'http://xml.zope.org/namespaces/tal');
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('define', 4));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('condition', 6));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('repeat', 8));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeContent('content', 11));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeReplace('replace', 9));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('attributes', 9));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('omit-tag', 0));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('comment', 12));
+        $this->addAttribute(new PHPTAL_NamespaceAttributeSurround('on-error', 2));
+    }
+}
+
+PHPTAL_Dom_Defs::getInstance()->registerNamespace(new PHPTAL_Namespace_TAL());
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute.php
new file mode 100644
index 0000000000000000000000000000000000000000..00f701ef1ff6eacf1f09c58c9cc8cf50243d4fd4
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute.php
@@ -0,0 +1,98 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Dom/Node.php';
+
+/**
+ * Base class for all PHPTAL attributes.
+ *
+ * Attributes are first ordered by PHPTAL then called depending on their
+ * priority before and after the element printing.
+ *
+ * An attribute must implements start() and end().
+ * 
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+abstract class PHPTAL_Php_Attribute 
+{
+    const ECHO_TEXT = 'text';
+    const ECHO_STRUCTURE = 'structure';
+    
+    /** Attribute name (ie: 'tal:content'). */
+    public $name;
+    /** Attribute value specified by the element. */
+    public $expression;
+    /** Element using this attribute (xml node). */
+    public $tag;
+
+    /** Called before element printing. */
+    public abstract function start();
+    /** Called after element printing. */
+    public abstract function end();
+
+    /**
+     * Remove structure|text keyword from expression and stores it for later
+     * doEcho() usage.
+     *
+     * $expression = 'stucture my/path';
+     * $expression = $this->extractEchoType($expression);
+     *
+     * ...
+     *
+     * $this->doEcho($code);
+     */
+    protected function extractEchoType($expression)
+    {
+        $echoType = self::ECHO_TEXT;
+        $expression = trim($expression);
+        if (preg_match('/^(text|structure)\s+(.*?)$/ism', $expression, $m)) {
+            list(, $echoType, $expression) = $m;
+        }
+        $this->_echoType = strtolower($echoType);
+        return trim($expression);
+    }
+
+    protected function doEcho($code)
+    {
+        if ($this->_echoType == self::ECHO_TEXT)
+            $this->tag->generator->doEcho($code);
+        else
+            $this->tag->generator->doEchoRaw($code);
+    }
+
+    protected function parseSetExpression($exp)
+    {
+        $exp = trim($exp);
+        // (dest) (value)
+        if (preg_match('/^([a-z0-9:\-_]+)\s+(.*?)$/i', $exp, $m)){
+            array_shift($m);
+            return $m;
+        }
+        // (dest)
+        return array($exp, null);
+    }
+
+    protected $_echoType = PHPTAL_Php_Attribute::ECHO_TEXT;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Attributes.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Attributes.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d5c923ef0e9493eacb4267b53e72ae41cb2d871
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Attributes.php
@@ -0,0 +1,107 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// i18n:attributes
+//
+// This attribute will allow us to translate attributes of HTML tags, such 
+// as the alt attribute in the img tag. The i18n:attributes attribute 
+// specifies a list of attributes to be translated with optional message 
+// IDs? for each; if multiple attribute names are given, they must be 
+// separated by semi-colons. Message IDs? used in this context must not 
+// include whitespace.
+//
+// Note that the value of the particular attributes come either from the 
+// HTML attribute value itself or from the data inserted by tal:attributes.
+//
+// If an attibute is to be both computed using tal:attributes and translated, 
+// the translation service is passed the result of the TALES expression for 
+// that attribute.
+//
+// An example:
+//
+//     <img src="http://foo.com/logo" alt="Visit us"
+//              tal:attributes="alt here/greeting"
+//              i18n:attributes="alt"
+//              />
+//
+//
+// In this example, let tal:attributes set the value of the alt attribute to 
+// the text "Stop by for a visit!". This text will be passed to the 
+// translation service, which uses the result of language negotiation to 
+// translate "Stop by for a visit!" into the requested language. The example 
+// text in the template, "Visit us", will simply be discarded.
+//
+// Another example, with explicit message IDs:
+//
+//   <img src="../icons/uparrow.png" alt="Up"
+//        i18n:attributes="src up-arrow-icon; alt up-arrow-alttext"
+//   >
+//
+// Here, the message ID up-arrow-icon will be used to generate the link to 
+// an icon image file, and the message ID up-arrow-alttext will be used for 
+// the "alt" text.
+//
+
+/**
+ * @package phptal.php.attribute
+ */
+class PHPTAL_Php_Attribute_I18N_Attributes extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        // split attributes to translate
+        $expressions = $this->tag->generator->splitExpression($this->expression);
+        // foreach attribute
+        foreach ($expressions as $exp){
+            list($attribute, $key) = $this->parseSetExpression($exp);
+            //   if the translation key is specified 
+            if ($key != null){
+                // we use it and replace the tag attribute with the result of
+                // the translation
+                $key = str_replace('\'', '\\\'', $key);
+                $this->tag->attributes[$attribute] = $this->_getTranslationCode("'$key'");
+            } 
+            else if ($this->tag->isOverwrittenAttribute($attribute)){
+                $varn = $this->tag->getOverwrittenAttributeVarName($attribute);
+                $this->tag->attributes[$attribute] = $this->_getTranslationCode($varn);
+            }
+            // else if the attribute has a default value
+            else if ($this->tag->hasAttribute($attribute)){
+                // we use this default value as the translation key
+                $key = $this->tag->getAttribute($attribute);
+                $key = str_replace('\'', '\\\'', $key);
+                $this->tag->attributes[$attribute] = $this->_getTranslationCode("'$key'");
+            }
+            else {
+                // unable to translate the attribute
+                throw new PHPTAL_Exception("Unable to translate attribute $attribute");
+            }
+        }
+    }
+   
+    public function end()
+    {
+    }
+
+    private function _getTranslationCode($key)
+    {
+		$code = '<?php ';
+		if (preg_match_all('/\$\{(.*?)\}/', $key, $m)){
+			array_shift($m);
+			$m = array_shift($m);
+			foreach ($m as $name){
+				$code .= "\n".'$_translator->setVar(\''.$name.'\','.phptal_tale($name).');'; // allow more complex TAL expressions
+			}
+			$code .= "\n";
+		}
+
+        // notice the false boolean which indicate that the html is escaped
+        // elsewhere looks like an hack doesn't it ? :)
+		$result = $this->tag->generator->escapeCode(sprintf('$_translator->translate(%s, false)', $key));
+        $code .= 'echo '.$result.'?>';
+		return $code;
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Data.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Data.php
new file mode 100644
index 0000000000000000000000000000000000000000..073bf2fde14479a73fdbab292afc9e8660ca987e
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Data.php
@@ -0,0 +1,24 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// i18n:data
+//
+// Since TAL always returns strings, we need a way in ZPT to translate 
+// objects, the most obvious case being DateTime objects. The data attribute 
+// will allow us to specify such an object, and i18n:translate will provide 
+// us with a legal format string for that object. If data is used, 
+// i18n:translate must be used to give an explicit message ID, rather than 
+// relying on a message ID computed from the content.
+// 
+
+/**
+ * @package phptal.php.attribute.i18n
+ */
+class PHPTAL_Php_Attribute_I18N_Data extends PHPTAL_Php_Attribute
+{
+    public function start(){}
+    public function end(){}
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Domain.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Domain.php
new file mode 100644
index 0000000000000000000000000000000000000000..dba7fdb89c1faf8bb822fa57faf86f1b75f3a657
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Domain.php
@@ -0,0 +1,41 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// i18n:domain
+//
+// The i18n:domain attribute is used to specify the domain to be used to get 
+// the translation. If not specified, the translation services will use a 
+// default domain. The value of the attribute is used directly; it is not 
+// a TALES expression.
+// 
+
+/**
+ * @package phptal.php.attribute.i18n
+ */
+class PHPTAL_Php_Attribute_I18N_Domain extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        // ensure a domain stack exists or create it
+        $this->tag->generator->doIf('!isset($__i18n_domains)');
+        $this->tag->generator->pushCode('$__i18n_domains = array()');
+        $this->tag->generator->doEnd();
+
+        //\''.str_replace(array('\\',"'"),array('\\\\',"\\'"),$expression).'\'
+        $expression = $this->tag->generator->interpolateTalesVarsInString($this->expression);
+
+        // push current domain and use new domain
+        $code = '$__i18n_domains[] = $_translator->useDomain('.$expression.')';
+        $this->tag->generator->pushCode($code);
+    }
+
+    public function end()
+    {
+        // restore domain
+        $code = '$_translator->useDomain(array_pop($__i18n_domains))';
+        $this->tag->generator->pushCode($code);
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Name.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Name.php
new file mode 100644
index 0000000000000000000000000000000000000000..d68152bd64433d37c89469c87038821fc29796da
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Name.php
@@ -0,0 +1,40 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// i18n:name
+//
+// Name the content of the current element for use in interpolation within 
+// translated content. This allows a replaceable component in content to be
+// re-ordered by translation. For example:
+//
+// <span i18n:translate=''>
+//   <span tal:replace='here/name' i18n:name='name' /> was born in
+//   <span tal:replace='here/country_of_birth' i18n:name='country' />.
+// </span>
+//
+// would cause this text to be passed to the translation service:
+//
+//     "${name} was born in ${country}."
+//     
+
+/**
+ * @package phptal.php.attribute.i18n
+ */
+class PHPTAL_Php_Attribute_I18N_Name extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        $this->tag->generator->pushCode('ob_start()');
+    }
+
+    public function end()
+    {
+        $code = '$_translator->setVar(\'%s\', ob_get_contents())';
+        $code = sprintf($code, $this->expression);
+        $this->tag->generator->pushCode($code);
+        $this->tag->generator->pushCode('ob_end_clean()');
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Source.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Source.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce5a7d22a87de06b207a32053428bc2199286df0
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Source.php
@@ -0,0 +1,38 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// i18n:source
+//
+// The i18n:source attribute specifies the language of the text to be 
+// translated. The default is "nothing", which means we don't provide 
+// this information to the translation services.
+//
+
+/**
+ * @package phptal.php.attribute.i18n
+ */
+class PHPTAL_Php_Attribute_I18N_Source extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        // ensure that a sources stack exists or create it
+        $this->tag->generator->doIf('!isset($__i18n_sources)');
+        $this->tag->generator->pushCode('$__i18n_sources = array()');
+        $this->tag->generator->end();
+
+        // push current source and use new one
+        $code = '$__i18n_sources[] = $_translator->setSource(\'%s\')';
+        $code = sprintf($code, $this->expression);
+        $this->tag->generator->pushCode($code);
+    }
+
+    public function end()
+    {
+        // restore source
+        $code = '$_translator->setSource(array_pop($__i18n_sources))';
+        $this->tag->generator->pushCode($code);
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Target.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Target.php
new file mode 100644
index 0000000000000000000000000000000000000000..6face5707660cbc11bdc85097b0047fd2f54788b
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Target.php
@@ -0,0 +1,32 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// i18n:target
+//
+// The i18n:target attribute specifies the language of the translation we 
+// want to get. If the value is "default", the language negotiation services 
+// will be used to choose the destination language. If the value is 
+// "nothing", no translation will be performed; this can be used to suppress 
+// translation within a larger translated unit. Any other value must be a 
+// language code.
+//
+// The attribute value is a TALES expression; the result of evaluating the 
+// expression is the language code or one of the reserved values.
+//
+// Note that i18n:target is primarily used for hints to text extraction 
+// tools and translation teams. If you had some text that should only be 
+// translated to e.g. German, then it probably shouldn't be wrapped in an 
+// i18n:translate span.
+// 
+
+/**
+ * @package phptal.php.attribute.i18n
+ */
+class PHPTAL_Php_Attribute_I18N_Target extends PHPTAL_Php_Attribute
+{
+    public function start(){}
+    public function end(){}
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Translate.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Translate.php
new file mode 100644
index 0000000000000000000000000000000000000000..149253138c4699c04cc294bd2ba3c94945c77c30
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/I18N/Translate.php
@@ -0,0 +1,97 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// ZPTInternationalizationSupport
+//
+// i18n:translate
+//
+// This attribute is used to mark units of text for translation. If this 
+// attribute is specified with an empty string as the value, the message ID 
+// is computed from the content of the element bearing this attribute. 
+// Otherwise, the value of the element gives the message ID.
+// 
+
+/**
+ * @package phptal.php.attribute.i18n
+ */
+class PHPTAL_Php_Attribute_I18N_Translate extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        $escape = true;
+        if (preg_match('/^(text|structure)(?:\s+(.*)|\s*$)/',$this->expression,$m))
+        {
+            if ($m[1]=='structure') $escape=false;
+            $this->expression = isset($m[2])?$m[2]:'';
+        }
+                
+        // if no expression is given, the content of the node is used as 
+        // a translation key
+        if (strlen(trim($this->expression)) == 0){
+            $key = $this->_getTranslationKey($this->tag, !$escape);
+            $key = trim(preg_replace('/\s+/sm'.($this->tag->generator->getEncoding()=='UTF-8'?'u':''), ' ', $key));
+            $code = '\'' . str_replace('\'', '\\\'', $key) . '\'';
+        }
+        else {
+            $code = $this->tag->generator->evaluateExpression($this->expression);
+        }
+        $this->_prepareNames($this->tag);
+
+        $php = sprintf('echo $_translator->translate(%s,%s);', $code, $escape ? 'true':'false');
+        $this->tag->generator->pushCode($php);
+    }
+
+    public function end()
+    {
+    }
+
+    private function _getTranslationKey($tag, $preserve_tags)
+    {
+        $result = '';
+        foreach ($tag->children as $child){
+            if ($child instanceOf PHPTAL_Php_Text){
+                $result .= $child->node->getValue();
+            }
+            else if ($child instanceOf PHPTAL_Php_Element){
+                if ($child->hasAttribute('i18n:name')){
+                    $value = $child->getAttribute('i18n:name');
+                    $result .= '${' . $value . '}';
+                }
+                else {
+                    
+                    if ($preserve_tags)
+                    {
+                        $result .= '<'.$child->name;
+                        foreach($child->attributes as $k => $v)
+                        {
+                            $result .= ' '.$k.'="'.$v.'"';
+                        }
+                        $result .= '>'.$this->_getTranslationKey($child, $preserve_tags).'</'.$child->name.'>';
+                    }
+                    else
+                    {                    
+                        $result .= $this->_getTranslationKey($child, $preserve_tags);
+                    }
+                }
+            }
+        }
+        return $result;
+    }
+
+    private function _prepareNames($tag)
+    {
+        foreach ($tag->children as $child){
+            if ($child instanceOf PHPTAL_Php_Element){
+                if ($child->hasAttribute('i18n:name')){
+                    $child->generate();
+                }
+                else {
+                    $this->_prepareNames($child);
+                }
+            }
+        }
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/DefineMacro.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/DefineMacro.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd42cd93e0446a5225716ca518d8c919abc2ee12
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/DefineMacro.php
@@ -0,0 +1,71 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// METAL Specification 1.0
+//
+//      argument ::= Name
+//
+// Example:
+//
+//      <p metal:define-macro="copyright">
+//      Copyright 2001, <em>Foobar</em> Inc.
+//      </p>
+//
+// PHPTAL:
+//      
+//      <?php function XXX_macro_copyright( $tpl ) { ? >
+//        <p>
+//        Copyright 2001, <em>Foobar</em> Inc.
+//        </p>
+//      <?php } ? >
+//
+
+/**
+ * @package phptal.php.attribute.metal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_METAL_DefineMacro extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        $macroname = strtr(trim($this->expression),'-','_');
+        if (!preg_match('/^[a-z0-9_]+$/i', $macroname)){
+            throw new PHPTAL_Exception('Bad macro name "'.$macroname.'"', $this->tag->getSourceFile(), $this->tag->getSourceLine());
+        }
+        
+        $this->tag->generator->doFunction($macroname, '$tpl, $ctx');
+        $this->tag->generator->doXmlDeclaration();
+        $this->tag->generator->doDoctype();
+        $this->tag->generator->doSetVar('$tpl', 'clone $tpl');
+        $this->tag->generator->doSetVar('$ctx', '$tpl->getContext()');
+        $this->tag->generator->doSetVar('$glb', '$tpl->getGlobalContext()');
+        $this->tag->generator->doSetVar('$_translator', '$tpl->getTranslator()');
+    }
+    
+    public function end()
+    {
+        $this->tag->generator->doEnd();
+    }
+}
+
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/DefineSlot.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/DefineSlot.php
new file mode 100644
index 0000000000000000000000000000000000000000..837d813232469b630b40b08516ac20457ae0221e
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/DefineSlot.php
@@ -0,0 +1,75 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// METAL Specification 1.0
+//
+//      argument ::= Name
+//
+// Example:
+//
+//      <table metal:define-macro="sidebar">
+//        <tr><th>Links</th></tr>
+//        <tr><td metal:define-slot="links">
+//          <a href="/">A Link</a>
+//        </td></tr>
+//      </table>
+//
+// PHPTAL: (access to slots may be renamed)
+//
+//  <?php function XXXX_macro_sidebar( $tpl ) { ? >
+//      <table>
+//        <tr><th>Links</th></tr>
+//        <tr>
+//        <?php if (isset($tpl->slots->links)): ? >
+//          <?php echo $tpl->slots->links ? >
+//        <?php else: ? >  
+//        <td>
+//          <a href="/">A Link</a>
+//        </td></tr>
+//      </table>
+//  <?php } ? >
+//
+
+/**
+ * @package phptal.php.attribute.metal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_METAL_DefineSlot extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        $cond = sprintf('$ctx->hasSlot("%s")', $this->expression);
+        $this->tag->generator->doIf($cond);
+        $code = sprintf('<?php echo $ctx->getSlot("%s") ?>', $this->expression);
+        $this->tag->generator->pushHtml($code);
+        $this->tag->generator->doElse();
+    }
+    
+    public function end()
+    {
+        $this->tag->generator->doEnd();
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/FillSlot.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/FillSlot.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e8d24b5d84663a304fa0fd49deb3a5944ff8aca
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/FillSlot.php
@@ -0,0 +1,75 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// METAL Specification 1.0
+//
+//      argument ::= Name
+//
+// Example:
+//
+//       <table metal:use-macro="here/doc1/macros/sidebar">
+//        <tr><th>Links</th></tr>
+//        <tr><td metal:fill-slot="links">
+//          <a href="http://www.goodplace.com">Good Place</a><br>
+//          <a href="http://www.badplace.com">Bad Place</a><br>
+//          <a href="http://www.otherplace.com">Other Place</a>
+//        </td></tr>
+//      </table>
+//
+// PHPTAL: 
+// 
+// 1. evaluate slots
+// 
+// <?php ob_start(); ? >
+// <td>
+//   <a href="http://www.goodplace.com">Good Place</a><br>
+//   <a href="http://www.badplace.com">Bad Place</a><br>
+//   <a href="http://www.otherplace.com">Other Place</a>
+// </td>
+// <?php $tpl->slots->links = ob_get_contents(); ob_end_clean(); ? >
+// 
+// 2. call the macro (here not supported)
+//
+// <?php echo phptal_macro($tpl, 'master_page.html/macros/sidebar'); ? >
+// 
+ 
+/**
+ * @package phptal.php.attribute.metal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_METAL_FillSlot extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        $this->tag->generator->pushCode('ob_start()');
+    }
+
+    public function end()
+    {
+        $code = '$ctx->fillSlot("'.$this->expression.'", ob_get_clean())';
+        $this->tag->generator->pushCode($code);
+    }
+}
+
+
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/UseMacro.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/UseMacro.php
new file mode 100644
index 0000000000000000000000000000000000000000..467199010e707189de5ddc9f9351cfcf48f1f427
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/METAL/UseMacro.php
@@ -0,0 +1,131 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// METAL Specification 1.0
+//
+//      argument ::= expression
+//
+// Example:
+// 
+//      <hr />
+//      <p metal:use-macro="here/master_page/macros/copyright">
+//      <hr />
+//
+// PHPTAL: (here not supported)
+//
+//      <?php echo phptal_macro( $tpl, 'master_page.html/macros/copyright'); ? >
+//
+
+/**
+ * @package phptal.php.attribute.metal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_METAL_UseMacro extends PHPTAL_Php_Attribute
+{
+    static $ALLOWED_ATTRIBUTES = array(
+        'metal:fill-slot', 
+        'metal:define-macro', 
+        'tal:define',
+    );
+    
+    public function start()
+    {
+        $this->pushSlots();
+        
+        foreach ($this->tag->children as $child){
+            $this->generateFillSlots($child);
+        }
+
+        $macroname = strtr($this->expression,'-','_');
+
+        // local macro (no filename specified) and non dynamic macro name
+        if (preg_match('/^[a-z0-9_]+$/i', $macroname)) {
+            $code = sprintf(
+                '%s%s($tpl, $ctx)', 
+                $this->tag->generator->getFunctionPrefix(),
+                $macroname
+            );
+            $this->tag->generator->pushCode($code);
+        }
+        // external macro or ${macroname}, use PHPTAL at runtime to resolve it
+        else {
+            $code = $this->tag->generator->interpolateTalesVarsInString($this->expression);
+            $code = sprintf('<?php $tpl->executeMacro(%s); ?>', $code);
+            $this->tag->generator->pushHtml($code);
+        }
+
+        $this->popSlots();
+    }
+    
+    public function end()
+    {
+    }
+
+    private function pushSlots()
+    {
+        // reset template slots on each macro call ?
+        // 
+        // NOTE: defining a macro and using another macro on the same tag 
+        // means inheriting from the used macro, thus slots are shared, it 
+        // is a little tricky to understand but very natural to use.
+        //
+        // For example, we may have a main design.html containing our main 
+        // website presentation with some slots (menu, content, etc...) then
+        // we may define a member.html macro which use the design.html macro
+        // for the general layout, fill the menu slot and let caller templates
+        // fill the parent content slot without interfering. 
+        if (!$this->tag->hasAttribute('metal:define-macro')){
+            $this->tag->generator->pushCode('$ctx->pushSlots()');
+        }
+    }
+
+    private function popSlots()
+    {
+        // restore slots if not inherited macro
+        if (!$this->tag->hasAttribute('metal:define-macro')){
+            $this->tag->generator->pushCode('$ctx->popSlots()');
+        }
+    }
+    
+    private function generateFillSlots($tag)
+    {
+        if (false == ($tag instanceOf PHPTAL_Php_Tree)) 
+            return;
+
+        // if the tag contains one of the allowed attribute, we generate it
+        foreach (self::$ALLOWED_ATTRIBUTES as $attribute){
+            if ($tag->hasAttribute($attribute)){
+                $tag->generate();
+                return;
+            }
+        }
+        
+        // recurse
+        foreach ($tag->children as $child){
+            $this->generateFillSlots($child);
+        }
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Cache.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Cache.php
new file mode 100644
index 0000000000000000000000000000000000000000..a43ebc3c9d7aa0f400361e0ec58ed135bc880135
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Cache.php
@@ -0,0 +1,92 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Kornel Lesiński <kornel@aardvarkmedia.co.uk>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+/** phptal:cache (note that's not tal:cache) caches element's HTML for a given time. Time is a number with 'd', 'h', 'm' or 's' suffix.
+    There's optional parameter that defines how cache should be shared. By default cache is not sensitive to template's context at all 
+    - it's shared between all pages that use that template. 
+    You can add per url to have separate copy of given element for every URL.
+    
+    You can add per expression to have different cache copy for every different value of an expression (which MUST evaluate to a string). 
+    Expression cannot refer to variables defined using tal:define on the same element.
+
+    NB:
+    * phptal:cache blocks can be nested, but outmost block will cache other blocks regardless of their freshness.
+    * you cannot use metal:fill-slot inside elements with phptal:cache
+
+    Examples:
+    <div phptal:cache="3h">...</div> <!-- <div> to be evaluated at most once per 3 hours. -->
+    <ul phptal:cache="1d per object/id">...</ul> <!-- <ul> be cached for one day, separately for each object. -->
+*/
+class PHPTAL_Php_Attribute_PHPTAL_Cache extends PHPTAL_Php_Attribute
+{  
+    private $cache_tag;
+
+    public function start()
+    {
+        if (!preg_match('/^\s*([0-9]+\s*|[a-zA-Z][a-zA-Z0-9_]*\s+)([dhms])\s*(?:\;?\s*per\s+([^;]+)|)\s*$/',$this->expression, $matches))
+            throw new PHPTAL_Exception("Cache attribute syntax error: ".$this->expression);
+            
+        $cache_len = $matches[1];
+        if (!is_numeric($cache_len)) $cache_len = '$ctx->'.$cache_len;
+        switch($matches[2])
+        {
+            case 'd': $cache_len .= '*24'; /* no break */
+            case 'h': $cache_len .= '*60'; /* no break */
+            case 'm': $cache_len .= '*60'; /* no break */
+        }
+
+        $this->cache_tag = '"'.addslashes( $this->tag->node->getName() . ':' . $this->tag->node->getSourceLine()).'"';
+        
+        $cache_per_expression = isset($matches[3])?trim($matches[3]):NULL;
+        if ($cache_per_expression == 'url')
+        {
+            $this->cache_tag .= '.$_SERVER["REQUEST_URI"]';
+        }
+        else if ($cache_per_expression == 'nothing') {  }
+        else if ($cache_per_expression)
+        {
+             $code = $this->tag->generator->evaluateExpression($cache_per_expression);
+
+             if (is_array($code)) { throw new PHPTAL_Exception("Chained expressions in per-cache directive are not supported"); }
+            
+             $old_cache_tag = $this->cache_tag;
+             $this->cache_tag = '$ctx->cache_tag_';
+             $this->tag->generator->doSetVar($this->cache_tag, '('.$code.')."@".' . $old_cache_tag );
+        }
+    
+	    $cond = '!file_exists(__FILE__.md5('.$this->cache_tag.')) || time() - '.$cache_len.' >= @filemtime(__FILE__.md5('.$this->cache_tag.'))';
+
+        $this->tag->generator->doIf($cond);
+        $this->tag->generator->doEval('ob_start()');
+    }
+
+    public function end()
+    {
+        $this->tag->generator->doEval('file_put_contents(__FILE__.md5('.$this->cache_tag.'), ob_get_flush())');
+        $this->tag->generator->doElse();
+        $this->tag->generator->doEval('readfile(__FILE__.md5('.$this->cache_tag.'))');
+        $this->tag->generator->doEnd();
+    }
+}
+
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Debug.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Debug.php
new file mode 100644
index 0000000000000000000000000000000000000000..a41da0fc9615140f2044ce2aabaf99afbd7f846c
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Debug.php
@@ -0,0 +1,44 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+/**
+ * @package phptal.php.attribute.phptal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_PHPTAL_DEBUG extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        $this->_oldMode = $this->tag->generator->setDebug(true);
+    }
+
+    public function end()
+    {
+        $this->tag->generator->setDebug( $this->_oldMode );
+    }
+
+    private $_oldMode;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Id.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Id.php
new file mode 100644
index 0000000000000000000000000000000000000000..591a8be22660672fa30032313f157284be679862
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Id.php
@@ -0,0 +1,66 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+/**
+ * @package phptal.php.attribute.phptal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_PHPTAL_ID extends PHPTAL_Php_Attribute
+{
+    private $id;
+    
+    public function start()
+    {
+        $this->id = str_replace('"', '\\\"', $this->expression);
+        
+        // retrieve trigger
+        $this->tag->generator->doSetVar(
+            '$trigger', 
+            '$tpl->getTrigger("'.$this->id.'")'
+        );
+
+        // if trigger found and trigger tells to proceed, we execute
+        // the node content
+        $cond = '$trigger && '
+              . '$trigger->start("%s", $tpl) == PHPTAL_Trigger::PROCEED';
+        $cond = sprintf($cond, $this->id);
+
+        $this->tag->generator->doIf($cond);
+    }
+
+    public function end()
+    {
+        // end of if PROCEED
+        $this->tag->generator->doEnd();
+        
+        // if trigger found, notify the end of the node
+        $this->tag->generator->doIf('$trigger');
+        $this->tag->generator->pushCode(
+            '$trigger->end("'.$this->id.'", $tpl)'
+        );
+        $this->tag->generator->doEnd();
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Tales.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Tales.php
new file mode 100644
index 0000000000000000000000000000000000000000..2bf5b019a14681e8d215612b535d70d4b14ee453
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/PHPTAL/Tales.php
@@ -0,0 +1,60 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+/**
+ * @package phptal.php.attribute.phptal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_PHPTAL_TALES extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        $mode = trim($this->expression);
+        $mode = strtolower($mode);
+        
+        if ($mode == '' || $mode == 'default') 
+            $mode = 'tales';
+        
+        if ($mode != 'php' && $mode != 'tales') {
+            $err = "Unsupported TALES mode '%s'";
+            $err = sprintf($err, $mode);
+            throw new PHPTAL_Exception(
+                $err, 
+                $this->tag->getSourceFile(), 
+                $this->tag->getSourceLine()
+            ); 
+        }
+        
+        $this->_oldMode = $this->tag->generator->setTalesMode( $mode );
+    }
+
+    public function end()
+    {
+        $this->tag->generator->setTalesMode( $this->_oldMode );
+    }
+
+    private $_oldMode;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Attributes.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Attributes.php
new file mode 100644
index 0000000000000000000000000000000000000000..99de33a90aaa40bc19ff9de98691ee43f429d448
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Attributes.php
@@ -0,0 +1,168 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// TAL Specifications 1.4
+//
+//       argument             ::= attribute_statement [';' attribute_statement]*
+//       attribute_statement  ::= attribute_name expression
+//       attribute_name       ::= [namespace ':'] Name
+//       namespace            ::= Name
+//
+// examples:
+//
+//      <a href="/sample/link.html"
+//         tal:attributes="href here/sub/absolute_url">
+//      <textarea rows="80" cols="20"
+//         tal:attributes="rows request/rows;cols request/cols">
+//
+// IN PHPTAL: attributes will not work on structured replace.
+//
+
+require_once PHPTAL_DIR.'PHPTAL/Php/TalesChainExecutor.php';
+
+/**
+ * @package phptal.php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_Attributes 
+extends PHPTAL_Php_Attribute
+implements PHPTAL_Php_TalesChainReader
+{
+    const ATT_FULL_REPLACE = '$__ATT_';
+    const ATT_VALUE_REPLACE = '$__att_';
+    // this regex is used to determine if an attribute is entirely replaced
+    // by a php variable or if only its value is replaced.
+    const REGEX_FULL_REPLACE = '/<?php echo \$__ATT_.*? ?>/';
+    
+    public function start()
+    {
+        // split attributes using ; delimiter
+        $attrs = $this->tag->generator->splitExpression($this->expression);
+        foreach ($attrs as $exp) {
+            list($attribute, $expression) = $this->parseSetExpression($exp);
+            if ($expression) {
+                $this->prepareAttribute($attribute, $expression);
+            }
+        }
+    }
+
+    public function end()
+    {
+    }
+
+    private function prepareAttribute($attribute, $expression)
+    {
+        $code = $this->extractEchoType(trim($expression));
+        $code = $this->tag->generator->evaluateExpression($code);
+
+        // if $code is an array then the attribute value is decided by a
+        // tales chained expression
+        if (is_array($code)) {
+            return $this->prepareChainedAttribute2($attribute, $code);
+        }
+       
+        // XHTML boolean attribute does not appear when empty of false
+        if (PHPTAL_Dom_Defs::getInstance()->isBooleanAttribute($attribute)) {
+            return $this->prepareBooleanAttribute($attribute, $code);
+        }
+        
+        // regular attribute which value is the evaluation of $code
+        $attkey = self::ATT_VALUE_REPLACE . $this->getVarName($attribute);
+        if ($this->_echoType == PHPTAL_Php_Attribute::ECHO_STRUCTURE)
+            $value = $code;
+        else
+            $value = $this->tag->generator->escapeCode($code);
+        $this->tag->generator->doSetVar($attkey, $value);
+        $this->tag->overwriteAttributeWithPhpValue($attribute, $attkey);
+    }
+
+    private function prepareChainedAttribute2($attribute, $chain)
+    {
+        $this->_default = false;
+        $this->_attribute = $attribute;
+        if (array_key_exists($attribute, $this->tag->attributes)) {
+            $this->_default = $this->tag->attributes[$attribute];
+        }
+        $this->_attkey = self::ATT_FULL_REPLACE.$this->getVarName($attribute);
+        $executor = new PHPTAL_Php_TalesChainExecutor($this->tag->generator, $chain, $this);
+        $this->tag->overwriteAttributeWithPhpValue($attribute, $this->_attkey);
+    }
+
+    private function prepareBooleanAttribute($attribute, $code)
+    {
+        $attkey = self::ATT_FULL_REPLACE.$this->getVarName($attribute);
+        $value  = "' $attribute=\"$attribute\"'";
+        $this->tag->generator->doIf($code);
+        $this->tag->generator->doSetVar($attkey, $value);
+        $this->tag->generator->doElse();
+        $this->tag->generator->doSetVar($attkey, '\'\'');
+        $this->tag->generator->doEnd();
+        $this->tag->overwriteAttributeWithPhpValue($attribute, $attkey);
+    }
+
+    private function getVarName($attribute)
+    {
+        return strtr($attribute,':-', '__');
+    }
+
+    public function talesChainNothingKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        $executor->doElse();
+        $this->tag->generator->doSetVar(
+            $this->_attkey, 
+            "''"
+        );
+        $executor->breakChain();
+    }
+
+    public function talesChainDefaultKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        $executor->doElse();
+        $code = ($this->_default !== false)
+            ? "' $this->_attribute=\"".str_replace("'",'\\\'',$this->_default)."\"'"  // default value
+            : '\'\'';                       // do not print attribute
+        $this->tag->generator->doSetVar($this->_attkey, $code);
+        $executor->breakChain();
+    }
+
+    public function talesChainPart(PHPTAL_Php_TalesChainExecutor $executor, $exp, $islast)
+    {
+        if (!$islast) {
+        $condition = "!phptal_isempty($this->_attkey = $exp)";
+        }
+        else {
+            $condition = "NULL !== ($this->_attkey = $exp)";
+        }
+        
+        $executor->doIf($condition);
+        if ($this->_echoType == PHPTAL_Php_Attribute::ECHO_STRUCTURE)
+            $value = $this->_attkey;
+        else
+            $value = $this->tag->generator->escapeCode($this->_attkey);
+
+        $this->tag->generator->doSetVar($this->_attkey, "' $this->_attribute=\"'.$value.'\"'");
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Comment.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Comment.php
new file mode 100644
index 0000000000000000000000000000000000000000..4698fb7d722d6d6a093caa827c73a188b5f2ae74
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Comment.php
@@ -0,0 +1,40 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+/**
+ * @package phptal.php.attribute.tal
+ */
+class PHPTAL_Php_Attribute_TAL_Comment extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        $this->tag->generator->doComment($this->expression);
+    }
+
+    public function end()
+    {
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Condition.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Condition.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2d3c28890bc105d29b341b64f3354b6db4a7049
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Condition.php
@@ -0,0 +1,101 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+// TAL Specifications 1.4
+//
+//      argument ::= expression
+//
+// Example:
+//
+//      <p tal:condition="here/copyright"
+//         tal:content="here/copyright">(c) 2000</p>
+//
+//
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/TalesChainExecutor.php';
+
+/**
+ * @package phptal.php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_Condition 
+extends PHPTAL_Php_Attribute
+implements PHPTAL_Php_TalesChainReader
+{
+    private $expressions = array();
+
+    public function start()
+    {
+        $code = $this->tag->generator->evaluateExpression($this->expression);
+
+        // If it's a chained expression build a new code path
+        if (is_array($code)) {
+            $this->expressions = array();
+            $executor = new PHPTAL_Php_TalesChainExecutor( $this->tag->generator, $code, $this );
+            return;
+        }
+
+        // Force a falsy condition if the nothing keyword is active
+        if ($code == PHPTAL_TALES_NOTHING_KEYWORD) {
+            $code = 'false';
+        }        
+
+        $this->tag->generator->doIf($code);
+    }
+
+    public function end() 
+    {
+        $this->tag->generator->doEnd();
+    }
+
+
+    public function talesChainPart(PHPTAL_Php_TalesChainExecutor $executor, $exp, $islast)
+    {
+        // check if the expression is empty
+        if ( $exp !== 'false' ) {
+            $this->expressions[] = '!phptal_isempty($__content__ = ' . $exp . ')';
+        }
+
+        if ( $islast ) {
+            // for the last one in the chain build a ORed condition
+            $this->tag->generator->doIf( implode(' || ', $this->expressions ) );
+            // The executor will always end an if so we output a dummy if
+            $executor->doIf('false');
+        } 
+    }
+
+    public function talesChainNothingKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        // end the chain
+        $this->talesChainPart( $executor, 'false', true );
+        $executor->breakChain();
+    }
+
+    public function talesChainDefaultKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        throw new PHPTAL_Exception('\'default\' keyword not allowed on condition expressions');
+    }
+
+}
+
+
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Content.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Content.php
new file mode 100644
index 0000000000000000000000000000000000000000..2cf320c9d2bb4f0b1dbfc015759f14bf2648bea6
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Content.php
@@ -0,0 +1,98 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// TAL Specifications 1.4
+//
+//      argument ::= (['text'] | 'structure') expression
+//
+// Example:
+// 
+//      <p tal:content="user/name">Fred Farkas</p>
+//
+//
+
+require_once PHPTAL_DIR.'PHPTAL/Php/TalesChainExecutor.php';
+
+/**
+ * @package phptal.php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_Content 
+extends PHPTAL_Php_Attribute
+implements PHPTAL_Php_TalesChainReader
+{
+    public function start()
+    {
+        $expression = $this->extractEchoType($this->expression);
+        
+        $code = $this->tag->generator->evaluateExpression($expression);
+
+        if (is_array($code)) {
+            return $this->generateChainedContent($code);
+        }
+
+        if ($code == PHPTAL_TALES_NOTHING_KEYWORD) {
+            return;
+        }
+
+        if ($code == PHPTAL_TALES_DEFAULT_KEYWORD) {
+            return $this->generateDefault();
+        }
+        
+        $this->doEcho($code);
+    }
+    
+    public function end()
+    {
+    }
+
+    private function generateDefault()
+    {
+        $this->tag->generateContent(true);
+    }
+    
+    private function generateChainedContent($code)
+    {
+        $executor = new PHPTAL_Php_TalesChainExecutor($this->tag->generator, $code, $this);
+    }
+
+    public function talesChainPart(PHPTAL_Php_TalesChainExecutor $executor, $exp, $islast)
+    {
+        $executor->doIf('!phptal_isempty($__content__ = '.$exp.')');
+        $this->doEcho('$__content__');
+    }
+    
+    public function talesChainNothingKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        $executor->breakChain();
+    }
+
+    public function talesChainDefaultKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        $executor->doElse();
+        $this->generateDefault();
+        $executor->breakChain();
+    }
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Define.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Define.php
new file mode 100644
index 0000000000000000000000000000000000000000..dfccdf2fa0586d3cfebc2c1e2b9d3468061aca99
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Define.php
@@ -0,0 +1,183 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// TAL spec 1.4 for tal:define content
+//
+// argument       ::= define_scope [';' define_scope]*
+// define_scope   ::= (['local'] | 'global') define_var
+// define_var     ::= variable_name expression
+// variable_name  ::= Name
+//
+// Note: If you want to include a semi-colon (;) in an expression, it must be escaped by doubling it (;;).*
+//
+// examples:
+// 
+//   tal:define="mytitle template/title; tlen python:len(mytitle)"
+//   tal:define="global company_name string:Digital Creations, Inc."
+//
+          
+
+require_once PHPTAL_DIR.'PHPTAL/Php/TalesChainExecutor.php';
+
+/**
+ * @package phptal.php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_Define 
+extends PHPTAL_Php_Attribute
+implements PHPTAL_Php_TalesChainReader
+{
+    public function start()
+    {
+        $expressions = $this->tag->generator->splitExpression($this->expression);
+        $definesAnyNonGlobalVars = false;
+
+        foreach ($expressions as $exp){
+            list($defineScope, $defineVar, $expression) = $this->parseExpression($exp);
+            if (!$defineVar) {
+                continue;
+            }
+            
+            $this->_defineScope = $defineScope;
+
+            if ($defineScope != 'global') $definesAnyNonGlobalVars = true; // <span tal:define="global foo" /> should be invisible, but <img tal:define="bar baz" /> not
+
+            if ($this->_defineScope != 'global' && !$this->_pushedContext){
+                $this->tag->generator->pushContext();
+                $this->_pushedContext = true;
+            }
+            
+            $this->_defineVar = $defineVar;
+            if ($expression === null) {
+                // no expression give, use content of tag as value for newly defined
+                // var.
+                $this->bufferizeContent();
+                continue;
+            }
+            
+            $code = $this->tag->generator->evaluateExpression($expression);
+            if (is_array($code)){
+                $this->chainedDefine($code);
+            }
+            elseif ($code == PHPTAL_TALES_NOTHING_KEYWORD) {
+                $this->doDefineVarWith('null');
+            }
+            else {
+                $this->doDefineVarWith($code);
+            }
+        }
+
+        // if the content of the tag was buffered or the tag has nothing to tell, we hide it.
+        if ($this->_buffered || (!$definesAnyNonGlobalVars && !$this->tag->hasRealContent() && !$this->tag->hasRealAttributes())){
+            $this->tag->hidden = true;
+        }
+    }
+
+    public function end()
+    {
+        if ($this->_pushedContext){
+            $this->tag->generator->popContext();
+        }
+    }
+    
+    private function chainedDefine($parts)
+    {
+        $executor = new PHPTAL_Php_TalesChainExecutor(
+            $this->tag->generator, $parts, $this
+        );
+    }
+
+    public function talesChainNothingKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        $executor->doElse();
+        $this->doDefineVarWith('null');
+        $executor->breakChain();
+    }
+
+    public function talesChainDefaultKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        $executor->doElse();
+        $this->bufferizeContent();
+        $executor->breakChain();
+    }
+
+    public function talesChainPart(PHPTAL_Php_TalesChainExecutor $executor, $exp, $islast)
+    {
+        if ($this->_defineScope == 'global'){
+            $executor->doIf('($glb->'.$this->_defineVar.' = '.$exp.') !== null');
+        }
+        else {
+            $executor->doIf('($ctx->'.$this->_defineVar.' = '.$exp.') !== null');
+        }
+    }
+    
+    /**
+     * Parse the define expression, already splitted in sub parts by ';'.
+     */
+    public function parseExpression($exp)
+    {
+        $defineScope = false; // (local | global)
+        $defineVar   = false; // var to define
+        
+        // extract defineScope from expression
+        $exp = trim($exp);
+        if (preg_match('/^(local|global)\s+(.*?)$/ism', $exp, $m)) {
+            list(,$defineScope, $exp) = $m;
+            $exp = trim($exp);
+        }
+
+        // extract varname and expression from remaining of expression
+        list($defineVar, $exp) = $this->parseSetExpression($exp);
+        if ($exp !== null) $exp = trim($exp);
+        return array($defineScope, $defineVar, $exp);
+    }
+
+    private function bufferizeContent()
+    {
+        if (!$this->_buffered){
+            $this->tag->generator->pushCode( 'ob_start()' );
+            $this->tag->generateContent();
+            $this->tag->generator->pushCode('$__tmp_content__ = ob_get_clean()');
+            $this->_buffered = true;
+        }
+        $this->doDefineVarWith('$__tmp_content__');
+    }
+
+    private function doDefineVarWith($code)
+    {
+        if ($this->_defineScope == 'global'){
+            $this->tag->generator->doSetVar('$glb->'.$this->_defineVar, $code);
+        }
+        else {
+            $this->tag->generator->doSetVar('$ctx->'.$this->_defineVar, $code);
+        }
+    }
+
+    private $_buffered = false;
+    private $_defineScope = null;
+    private $_defineVar = null;
+    private $_pushedContext = false;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/OmitTag.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/OmitTag.php
new file mode 100644
index 0000000000000000000000000000000000000000..ad4c47a7a790f2a6aa9c85e0b31de2e24fc9f2c6
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/OmitTag.php
@@ -0,0 +1,74 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// TAL Specifications 1.4
+//
+//   argument ::= [expression]
+//
+// Example:
+//
+//      <div tal:omit-tag="" comment="This tag will be removed">
+//          <i>...but this text will remain.</i>
+//      </div>
+//
+//      <b tal:omit-tag="not:bold">I may not be bold.</b>
+//
+// To leave the contents of a tag in place while omitting the surrounding
+// start and end tag, use the omit-tag statement. 
+//
+// If its expression evaluates to a false value, then normal processing 
+// of the element continues. 
+//
+// If the expression evaluates to a true value, or there is no
+// expression, the statement tag is replaced with its contents. It is up to
+// the interface between TAL and the expression engine to determine the
+// value of true and false. For these purposes, the value nothing is false,
+// and cancellation of the action has the same effect as returning a
+// false value.
+// 
+
+/**
+ * @package phptal.php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_OmitTag extends PHPTAL_Php_Attribute
+{
+    public function start()
+    {
+        if (trim($this->expression) == ''){
+            $this->tag->headFootDisabled = true;
+        }
+        else { 
+            // print tag header/foot only if condition is false
+            $cond = $this->tag->generator->evaluateExpression($this->expression);
+            $this->tag->headFootPrintCondition = '!('.$cond.')';
+        }
+    }
+
+    public function end()
+    {
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/OnError.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/OnError.php
new file mode 100644
index 0000000000000000000000000000000000000000..c22dd9ef373ccb02b4f053f3918050d5bf1fb138
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/OnError.php
@@ -0,0 +1,81 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// TAL Specifications 1.4
+//
+//      argument ::= (['text'] | 'structure') expression
+//
+// Example:
+// 
+//      <p tal:on-error="string: Error! This paragraph is buggy!">
+//      My name is <span tal:replace="here/SlimShady" />.<br />
+//      (My login name is 
+//      <b tal:on-error="string: Username is not defined!" 
+//         tal:content="user">Unknown</b>)
+//      </p>
+//  
+
+/**
+ * @package phptal.php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_OnError extends PHPTAL_Php_Attribute
+{
+    const ERR_VAR = '$__err__';
+    
+    public function start()
+    {
+        $this->tag->generator->doTry();
+        $this->tag->generator->pushCode('ob_start()');
+    }
+    
+    public function end()
+    {
+        $this->tag->generator->pushCode('ob_end_flush()');        
+        $this->tag->generator->doCatch('Exception '.self::ERR_VAR);
+        $this->tag->generator->pushCode('$tpl->addError('.self::ERR_VAR.')');
+        $this->tag->generator->pushCode('ob_end_clean()');
+
+        $expression = $this->extractEchoType($this->expression);
+
+        $code = $this->tag->generator->evaluateExpression($expression);
+        switch ($code) {
+            case PHPTAL_TALES_NOTHING_KEYWORD:
+                break;
+
+            case PHPTAL_TALES_DEFAULT_KEYWORD:
+                $this->tag->generator->pushHtml('<pre class="phptalError"');
+                $this->tag->generator->doEcho(self::ERR_VAR);
+                $this->tag->generator->pushHtml('</pre>');
+                break;
+                
+            default:
+                $this->doEcho($code);
+                break;
+        }
+        $this->tag->generator->doEnd();
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Repeat.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Repeat.php
new file mode 100644
index 0000000000000000000000000000000000000000..d798b6cb07d34d62c8b1bdb2b78762a85a907915
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Repeat.php
@@ -0,0 +1,115 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// TAL Specifications 1.4
+//
+//      argument      ::= variable_name expression
+//      variable_name ::= Name
+//
+// Example:
+//
+//      <p tal:repeat="txt python:'one', 'two', 'three'">
+//         <span tal:replace="txt" />
+//      </p>
+//      <table>
+//        <tr tal:repeat="item here/cart">
+//            <td tal:content="repeat/item/index">1</td>
+//            <td tal:content="item/description">Widget</td>
+//            <td tal:content="item/price">$1.50</td>
+//        </tr>
+//      </table>
+//
+// The following information is available from an Iterator:
+//
+//    * index - repetition number, starting from zero.
+//    * number - repetition number, starting from one.
+//    * even - true for even-indexed repetitions (0, 2, 4, ...).
+//    * odd - true for odd-indexed repetitions (1, 3, 5, ...).
+//    * start - true for the starting repetition (index 0).
+//    * end - true for the ending, or final, repetition.
+//    * length - length of the sequence, which will be the total number of repetitions.
+//    
+//    * letter - count reps with lower-case letters: "a" - "z", "aa" - "az", "ba" - "bz", ..., "za" - "zz", "aaa" - "aaz", and so forth.
+//    * Letter - upper-case version of letter.
+//    * roman - count reps with lower-case roman numerals: "i", "ii", "iii", "iv", "v", "vi" ...
+//    * Roman - upper-case version of roman numerals.
+///
+//    * first - true for the first item in a group - see note below
+//    * lasst - true for the last item in a group - see note below
+//
+//  Note: first and last are intended for use with sorted sequences. They try to
+//  divide the sequence into group of items with the same value. If you provide
+//  a path, then the value obtained by following that path from a sequence item
+//  is used for grouping, otherwise the value of the item is used. You can
+//  provide the path by appending it to the path from the repeat variable,
+//  as in "repeat/item/first/color".
+//
+// PHPTAL: index, number, even, etc... will be stored in the
+// $ctx->repeat->'item'  object.  Thus $ctx->repeat->item->odd
+//
+
+
+/**
+ * @package phptal.php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_Repeat extends PHPTAL_Php_Attribute
+{
+    const REPEAT = '$__repeat__';
+    
+    public function start()
+    {
+        // alias to repeats handler to avoid calling extra getters on each variable access
+        $this->tag->generator->doSetVar( self::REPEAT, '$ctx->repeat' );
+
+        list( $varName, $expression ) = $this->parseSetExpression( $this->expression );
+        $code = $this->tag->generator->evaluateExpression( $expression );
+
+        $item = '$ctx->' . $varName;
+        $controller = self::REPEAT . '->' . $varName;
+
+        // reset item var into template context
+        /* // Is this actually needed?
+        $this->tag->generator->doIf( '!isset('.$this->item.')' );
+        $this->tag->generator->doSetVar( $this->item, 'false' );
+        $this->tag->generator->doEnd();
+        */
+
+        // instantiate controller using expression
+        $this->tag->generator->doSetVar( $controller, 'new PHPTAL_RepeatController('.$code.')' );
+
+        // Lets loop the iterator with a foreach construct
+        $this->tag->generator->doForeach( $item, $controller );
+    }
+        
+    public function end()
+    {
+        $this->tag->generator->doEnd();
+    }
+           
+    private $item;
+    private $controller;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Replace.php b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Replace.php
new file mode 100644
index 0000000000000000000000000000000000000000..121b4571ff75347f527087283f38700fd82bd366
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Attribute/TAL/Replace.php
@@ -0,0 +1,117 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+// TAL Specifications 1.4
+//
+//      argument ::= (['text'] | 'structure') expression
+//
+//  Default behaviour : text
+//
+//      <span tal:replace="template/title">Title</span>
+//      <span tal:replace="text template/title">Title</span>
+//      <span tal:replace="structure table" />
+//      <span tal:replace="nothing">This element is a comment.</span>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/TalesChainExecutor.php';
+
+/**
+ * @package phptal.php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_Replace 
+extends PHPTAL_Php_Attribute
+implements PHPTAL_Php_TalesChainReader
+{
+    const REPLACE_VAR = '$__replace__';
+    
+    public function start()
+    {
+        // tal:replace="" => do nothing and ignore node
+        if (trim($this->expression) == ""){
+            return;
+        }
+
+        $expression = $this->extractEchoType($this->expression);
+        $code = $this->tag->generator->evaluateExpression($expression);
+
+        // chained expression
+        if (is_array($code)){
+            return $this->replaceByChainedExpression($code);
+        }
+
+        // nothing do nothing
+        if ($code == PHPTAL_TALES_NOTHING_KEYWORD) {
+            return;
+        }
+
+        // default generate default tag content
+        if ($code == PHPTAL_TALES_DEFAULT_KEYWORD) {
+            return $this->generateDefault();
+        }
+
+        // replace tag with result of expression
+        $this->doEcho($code);
+    }
+
+    public function end()
+    {
+    }
+
+    private function replaceByChainedExpression($expArray)
+    {
+        $executor = new PHPTAL_Php_TalesChainExecutor(
+            $this->tag->generator, $expArray, $this
+        );
+    }
+
+    public function talesChainNothingKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        $executor->continueChain();
+    }
+
+    public function talesChainDefaultKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+    {
+        $executor->doElse();
+        $this->generateDefault();
+        $executor->breakChain();
+    }
+
+    public function talesChainPart(PHPTAL_Php_TalesChainExecutor $executor, $exp, $islast)
+    {
+        $executor->doIf('!phptal_isempty('.self::REPLACE_VAR.' = '.$exp.')');
+        $this->doEcho(self::REPLACE_VAR);
+    }
+
+    private function generateDefault()
+    {
+        $this->tag->generateSurroundHead();
+        $this->tag->generateHead();
+        $this->tag->generateContent();
+        $this->tag->generateFoot();
+        $this->tag->generateSurroundFoot();
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/CodeGenerator.php b/wp-content/themes/vanilla/PHPTAL/Php/CodeGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d7bb7133a73c80c8ce0d15162a1831b7d8d628e
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/CodeGenerator.php
@@ -0,0 +1,55 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Node.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/State.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/CodeWriter.php';
+
+/**
+ * @package phptal.php
+ */
+class PHPTAL_Php_CodeGenerator
+{
+    public function __construct($function_name, $source_path)
+    {
+        $this->_functionName = $function_name;
+        $this->_sourceFile = $source_path;
+        $this->_state = new PHPTAL_Php_State();
+        $this->_writer = new PHPTAL_Php_CodeWriter($this->_state);
+    }
+
+    public function setOutputMode($mode)
+    { 
+        $this->_state->setOutputMode($mode);
+    }
+    
+    public function setEncoding($enc)
+    { 
+        $this->_state->setEncoding($enc);
+    }
+
+    public function generate(PHPTAL_Dom_Tree $tree)
+    {
+        $treeGen = new PHPTAL_Php_Tree($this->_writer, $tree);
+
+        $this->_writer->doComment('Generated by PHPTAL from '.$this->_sourceFile);
+        $this->_writer->doFunction($this->_functionName, '$tpl, $ctx');
+        $this->_writer->setFunctionPrefix($this->_functionName . "_");
+        $this->_writer->doSetVar('$glb', '$tpl->getGlobalContext()');
+        $this->_writer->doSetVar('$_translator', '$tpl->getTranslator()');
+        $treeGen->generate();
+        $this->_writer->doEnd();
+    }
+
+    public function getResult()
+    {
+        return $this->_writer->getResult();
+    }
+
+
+    private $_functionName;
+    private $_sourceFile;
+    private $_writer;
+    private $_state;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/CodeWriter.php b/wp-content/themes/vanilla/PHPTAL/Php/CodeWriter.php
new file mode 100644
index 0000000000000000000000000000000000000000..21eb1d9f92445e73e5d67ca461b428831322348c
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/CodeWriter.php
@@ -0,0 +1,393 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * Helps generate php representation of a template.
+ *
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_CodeWriter
+{
+    public function __construct(PHPTAL_Php_State $state)
+    {
+        $this->_state = $state;
+    }
+
+    public function getResult()
+    {
+        $this->flush();
+        $this->_result = trim($this->_result);
+        return $this->_result;
+    }
+
+    public function setDocType(PHPTAL_Php_Doctype $dt)
+    {
+        $this->_doctype = str_replace('\'', '\\\'', $dt->node->getValue());
+    }
+
+    public function setXmlDeclaration(PHPTAL_Php_XmlDeclaration $dt)
+    {
+        $this->_xmldeclaration = str_replace('\'', '\\\'', $dt->node->getValue());
+    }
+
+    public function setFunctionPrefix($prefix)
+    {
+        $this->_functionPrefix = $prefix;
+    }
+
+    public function getFunctionPrefix()
+    {
+        return $this->_functionPrefix;
+    }
+
+    /**
+     * Returns old tales mode.
+     */
+    public function setTalesMode($mode)
+    {
+        return $this->_state->setTalesMode($mode);
+    }
+
+    public function splitExpression($src)
+    {
+        preg_match_all('/(?:[^;]+|;;)+/sm', $src, $array);
+        $array = $array[0];
+        foreach($array as &$a) $a = str_replace(';;',';',$a);
+        return $array;
+    }
+
+    public function evaluateExpression($src)
+    {
+        return $this->_state->evalTalesExpression($src);
+    }
+    
+    public function indent() 
+    {
+        $this->_indentation ++; 
+    }
+    
+    public function unindent() 
+    {
+        $this->_indentation --; 
+    }
+    
+    public function flush() 
+    {
+        $this->flushCode();
+        $this->flushHtml();
+    }
+
+    public function noThrow($bool)
+    {
+        if ($bool){
+            $this->pushCode('$ctx->noThrow(true)');
+        }
+        else {
+            $this->pushCode('$ctx->noThrow(false)');
+        }
+    }
+    
+    public function flushCode()
+    {
+        if (count($this->_codeBuffer) == 0) 
+            return;
+
+        // special treatment for one code line
+        if (count($this->_codeBuffer) == 1){
+            $codeLine = $this->_codeBuffer[0];
+            // avoid adding ; after } and {
+            if (!preg_match('/\}|\{\s+$/', $codeLine))
+                $this->_result .= '<?php '.$codeLine.'; ?>';
+            else
+                $this->_result .= '<?php '.$codeLine.' ?>';
+            $this->_codeBuffer = array();
+            return;
+        }
+    
+        $this->_result .= '<?php '."\n";
+        foreach ($this->_codeBuffer as $codeLine) {
+            // avoid adding ; after } and {
+            if (!preg_match('/\}|\{\s+$/', $codeLine))
+                $this->_result .= $codeLine . ' ;'."\n";
+            else 
+                $this->_result .= $codeLine;
+        }
+        $this->_result .= '?>';
+        $this->_codeBuffer = array();
+    }
+    
+    public function flushHtml()
+    {
+        if (count($this->_htmlBuffer) == 0) return;
+        
+        $this->_result .= join( '', $this->_htmlBuffer );
+        $this->_htmlBuffer = array();
+    }
+
+    public function doDoctype()
+    {
+        if ($this->_doctype){
+            $code = '$ctx->setDocType(\''.$this->_doctype.'\')';
+            $this->pushCode($code);
+        }
+    }
+
+    public function doXmlDeclaration()
+    {
+        if ($this->_xmldeclaration){
+            $code = '$ctx->setXmlDeclaration(\''.$this->_xmldeclaration.'\')';
+            $this->pushCode($code);
+        }
+    }
+
+    public function doFunction($name, $params)
+    {
+        $name = $this->_functionPrefix . $name;
+        $this->pushGeneratorContext();
+        $this->pushCode("function $name( $params ) {\n");
+        $this->indent();
+        array_push($this->_segments, 'function');
+    }
+    
+    public function doComment($comment)
+    {
+        $comment = str_replace('*/', '* /', $comment);
+        $this->pushCode("/* $comment */");
+    }
+
+    public function doEval($code)
+    {
+        $this->pushCode($code);
+    }
+                       
+    public function doForeach($out, $source)
+    {
+        array_push($this->_segments, 'foreach');
+        $this->pushCode("foreach ($source as \$__key__ => $out ):");
+        $this->indent();
+    }
+
+    public function doEnd()
+    {
+        $segment = array_pop($this->_segments);
+        $this->unindent();
+        if ($segment == 'function') {
+            $this->pushCode("\n}\n\n");
+            $functionCode = $this->getResult();
+            $this->popGeneratorContext();
+            $this->_result = $functionCode . $this->_result;
+        }
+        else if ($segment == 'try')
+            $this->pushCode('}');
+        else if ($segment == 'catch')
+            $this->pushCode('}');
+        else 
+            $this->pushCode("end$segment");
+    }
+
+    public function doTry()
+    {
+        array_push($this->_segments, 'try');
+        $this->pushCode('try {');
+        $this->indent();
+    }
+
+    public function doSetVar($varname, $code)
+    {
+        $this->pushCode($varname.' = '.$code);
+    }
+        
+    public function doCatch($catch)
+    {
+        $this->doEnd();
+        array_push($this->_segments, 'catch');
+        $code = 'catch(%s) {';
+        $this->pushCode(sprintf($code, $catch));
+        $this->indent();
+    }
+
+    public function doIf($condition)
+    {
+        array_push($this->_segments, 'if');
+        $this->pushCode('if ('.$condition.'): ');
+        $this->indent();
+    }
+
+    public function doElseIf($condition)
+    {
+        $this->unindent();
+        $this->pushCode('elseif ('.$condition.'): ');
+        $this->indent();
+    }
+
+    public function doElse()
+    {
+        $this->unindent();
+        $this->pushCode('else: ');
+        $this->indent();
+    }
+
+    public function doEcho($code)
+    {
+        $this->flush();
+        $html = '<?php echo %s ?>';
+        $html = sprintf($html, $this->escapeCode($code));
+        $this->pushHtml($html);
+    }
+
+    public function doEchoRaw($code)
+    {
+        $this->pushHtml('<?php echo '.$code.' ?>');
+    }
+
+    public function pushHtml($html)
+    {
+        $html = $this->_state->interpolateTalesVarsInHtml($html);
+        $this->flushCode();
+        array_push($this->_htmlBuffer, $html);
+    }
+
+	public function pushRawHtml($html)
+	{
+		$this->flushCode();
+		array_push($this->_htmlBuffer, $html);
+	}
+
+    public function pushString($str)
+    {
+        $this->flushCode();
+       
+        // replace ${var} inside strings
+        while (preg_match('/^(.*?)((?<!\$)\$\{[^\}]*?\})(.*?)$/s', $str, $m)){
+            list(,$before,$expression,$after) = $m;
+
+            $before = $this->escapeLTandGT($before);
+            array_push($this->_htmlBuffer, $before);
+
+            $expression = $this->_state->interpolateTalesVarsInHtml($expression);
+            array_push($this->_htmlBuffer, $expression);
+
+            $str = $after;
+        }
+
+		$str = str_replace('$${', '${', $str);
+        
+        if (strlen($str) > 0){
+            $str = $this->escapeLTandGT($str);
+            array_push($this->_htmlBuffer, $str);
+        }
+    }
+
+    public function pushCode($codeLine) 
+    {
+        $this->flushHtml();
+        $codeLine = $this->indentSpaces() . $codeLine;
+        array_push($this->_codeBuffer, $codeLine);
+    }
+
+    public function escapeLTandGT($str){
+        $str = str_replace('<', '&lt;', $str);
+        $str = str_replace('>', '&gt;', $str);
+        return $str;
+    }
+
+    public function escapeCode($code)
+    {
+        return $this->_state->htmlchars($code);
+    }
+    
+    public function getEncoding()
+    {
+        return $this->_state->getEncoding();
+    }
+
+    public function interpolateTalesVarsInString($src)
+    {
+        return $this->_state->interpolateTalesVarsInString($src);
+    }
+
+    public function setDebug($bool)
+    {
+        return $this->_state->setDebug($bool);
+    }
+    
+    public function isDebugOn()
+    {
+        return $this->_state->isDebugOn();
+    }
+
+    public function getOutputMode()
+    {
+        return $this->_state->getOutputMode();
+    }
+
+    public function pushContext()
+    {
+        $this->pushCode('$ctx = $tpl->pushContext()');
+    }
+
+    public function popContext()
+    {
+        $this->pushCode('$ctx = $tpl->popContext()');
+    }
+    
+    // ~~~~~ Private members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    
+    private function indentSpaces() 
+    {
+        return str_repeat("\t", $this->_indent); 
+    }
+
+    private function pushGeneratorContext()
+    {
+        array_push($this->_contexts, clone $this);
+        $this->_result = "";
+        $this->_indent = 0;
+        $this->_codeBuffer = array();
+        $this->_htmlBuffer = array();
+        $this->_segments = array();
+    }
+    
+    private function popGeneratorContext()
+    {
+        $oldContext = array_pop($this->_contexts);
+        $this->_result = $oldContext->_result;
+        $this->_indent = $oldContext->_indent;
+        $this->_codeBuffer = $oldContext->_codeBuffer;
+        $this->_htmlBuffer = $oldContext->_htmlBuffer;
+        $this->_segments = $oldContext->_segments;
+    }
+
+    private $_state;
+    private $_result = "";
+    private $_indent = 0;
+    private $_codeBuffer = array();
+    private $_htmlBuffer = array();
+    private $_segments = array();
+    private $_contexts = array();
+    private $_functionPrefix = "";
+    private $_doctype = "";
+    private $_xmldeclaration = "";
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/ElementWriter.php b/wp-content/themes/vanilla/PHPTAL/Php/ElementWriter.php
new file mode 100644
index 0000000000000000000000000000000000000000..4dd24d176ab34b3b725ea974c204b655a1804ba2
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/ElementWriter.php
@@ -0,0 +1,101 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * @package phptal.php
+ */
+class PHPTAL_Php_ElementWriter
+{
+    public function __construct(PHPTAL_Php_CodeWriter $writer, PHPTAL_Php_Element $tag)
+    {
+        $this->_writer = $writer;
+        $this->_tag = $tag;
+    }
+
+    public function writeHead()
+    {
+        if ($this->_tag->headFootDisabled)
+            return;
+        
+        if ($this->_tag->headFootPrintCondition){
+            $this->_writer->doIf($this->_tag->headFootPrintCondition);
+        }
+
+        $this->_writer->pushHtml('<'.$this->_tag->name);
+        $this->_writeAttributes();
+
+        if ($this->_tag->isEmptyNode()){
+            $this->_writer->pushHtml('/>');
+        }
+        else {
+            $this->_writer->pushHtml('>');
+        }
+
+        if ($this->_tag->headFootPrintCondition){
+            $this->_writer->doEnd();
+        }
+
+    }
+
+    public function writeFoot()
+    {
+        if ($this->_tag->headFootDisabled)
+            return;
+        if ($this->_tag->isEmptyNode())
+            return;
+
+        if ($this->_tag->headFootPrintCondition){
+            $this->_writer->doIf($this->_tag->headFootPrintCondition);
+        }
+
+        $this->_writer->pushHtml('</'.$this->_tag->name.'>');
+
+        if ($this->_tag->headFootPrintCondition){
+            $this->_writer->doEnd();
+        }
+    }
+
+    public function writeAttributes()
+    {
+        $fullreplaceRx = PHPTAL_Php_Attribute_TAL_Attributes::REGEX_FULL_REPLACE;
+        foreach ($this->_tag->attributes as $key=>$value) {
+            if (preg_match($fullreplaceRx, $value)){
+                $this->_writer->pushHtml($value);
+            }
+            /*
+            else if (strpos('<?php', $value) === 0){
+                $this->_writer->pushHtml(' '.$key.'="');
+                $this->_writer->pushRawHtml($value);
+                $this->_writer->pushHtml('"');
+            }
+            */
+            else {
+                $this->_writer->pushHtml(' '.$key.'="'.$value.'"');
+            }
+        }
+    }
+
+    private $_tag;
+    private $_writer;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Node.php b/wp-content/themes/vanilla/PHPTAL/Php/Node.php
new file mode 100644
index 0000000000000000000000000000000000000000..5667a561148a6abc9959ae9834cd3f58454f988f
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Node.php
@@ -0,0 +1,507 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Dom/Defs.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/CodeWriter.php';
+require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php';
+
+/**
+ * Document node abstract class.
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+abstract class PHPTAL_Php_Node
+{
+    public $node;
+    public $generator;
+
+    public function __construct(PHPTAL_Php_CodeWriter $generator, PHPTAL_Dom_Node $node)
+    {
+        $this->generator = $generator;
+        $this->node = $node;
+    }
+
+    public function getSourceFile()
+    {
+        return $this->node->getSourceFile();
+    }
+
+    public function getSourceLine()
+    {
+        return $this->node->getSourceLine();
+    }
+
+    public abstract function generate();
+}
+
+/**
+ * Node container.
+ * 
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Tree extends PHPTAL_Php_Node
+{
+    public $children;
+    
+    public function __construct(PHPTAL_Php_CodeWriter $gen, $node)
+    {
+        parent::__construct($gen,$node);
+        $this->children = array();
+        foreach ($node->getChildren() as $child){
+            if ($child instanceOf PHPTAL_Dom_Element){
+                $gen = new PHPTAL_Php_Element($this->generator, $child);
+            }
+            else if ($child instanceOf PHPTAL_Dom_Text){
+                $gen = new PHPTAL_Php_Text($this->generator, $child);
+            }
+            else if ($child instanceOf PHPTAL_Dom_Doctype){
+                $gen = new PHPTAL_Php_Doctype($this->generator, $child);
+            }
+            else if ($child instanceOf PHPTAL_Dom_XmlDeclaration){
+                $gen = new PHPTAL_Php_XmlDeclaration($this->generator, $child);
+            }
+            else if ($child instanceOf PHPTAL_Dom_Specific){
+                $gen = new PHPTAL_Php_Specific($this->generator, $child);
+            }
+			else if ($child instanceOf PHPTAL_Dom_Comment){
+				$gen = new PHPTAL_Php_Comment($this->generator, $child);
+			}
+            else {
+                throw new PHPTAL_Exception('Unhandled node class '.get_class($child));
+            }
+            array_push($this->children, $gen);
+        }
+    }
+    
+    public function generate()
+    {
+        try
+        {
+        foreach ($this->children as $child){
+            $child->generate();
+        }
+    }
+        catch(PHPTAL_Exception $e)
+        {
+            $e->hintSrcPosition($this->getSourceFile(), $this->getSourceLine());
+            throw $e;
+        }
+    }
+}
+
+/**
+ * Document Tag representation.
+ *
+ * This is the main class used by PHPTAL because TAL is a Template Attribute
+ * Language, other Node kinds are (usefull) toys.
+ *
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Element extends PHPTAL_Php_Tree
+{
+    const ERR_ATTRIBUTES_CONFLICT =
+        "Attribute conflict in '%s' at line '%d', '%s' cannot appear with '%s'";
+    
+    public $name;
+    public $attributes = array();
+    public $talAttributes = array();
+    public $overwrittenAttributes = array();
+    public $replaceAttributes = array();
+    public $contentAttributes = array();
+    public $surroundAttributes = array();
+    public $headFootDisabled = false;
+    public $headFootPrintCondition = false;
+    public $hidden = false;
+
+    public function __construct(PHPTAL_Php_CodeWriter $generator, $node)
+    {
+        parent::__construct($generator, $node);
+        $this->name = $node->getName();
+        $this->attributes = $node->attributes;
+        $this->xmlns = $node->getXmlnsState();
+        $this->prepare();
+    }
+
+    private function prepare()
+    {
+        $this->prepareAttributes();
+        $this->separateAttributes();
+        $this->orderTalAttributes();
+    }
+
+    public function generate()
+    {
+        if ($this->generator->isDebugOn()){
+            $this->generator->pushCode('$ctx->__line = '.$this->getSourceLine());
+            $this->generator->doComment('tag "'.$this->name.'" from line '.$this->getSourceLine());
+        }
+       
+        
+        if (count($this->replaceAttributes) > 0) {
+            $this->generateSurroundHead();
+            foreach ($this->replaceAttributes as $att) {
+                $att->start();
+                $att->end();
+            }
+            $this->generateSurroundFoot();
+            return;
+        }
+
+        $this->generateSurroundHead();
+        // a surround tag may decide to hide us (tal:define for example)
+        if (!$this->hidden){
+            $this->generateHead();
+            $this->generateContent();
+            $this->generateFoot();
+        }
+        $this->generateSurroundFoot();
+    }
+
+    /** Returns true if the element contains specified PHPTAL attribute. */
+    public function hasAttribute($name)
+    {
+        return $this->node->hasAttribute($name);
+    }
+
+    /** Returns the value of specified PHPTAL attribute. */
+    public function getAttribute($name)
+    {
+        return $this->node->getAttribute($name);
+    }
+
+    public function isOverwrittenAttribute($name)
+    {
+        return array_key_exists($name, $this->overwrittenAttributes);
+    }
+
+    public function getOverwrittenAttributeVarName($name)
+    {
+        return $this->overwrittenAttributes[$name];
+    }
+    
+    public function overwriteAttributeWithPhpValue($name, $phpVariable)
+    {
+        $this->attributes[$name] = '<?php echo '.$phpVariable.' ?>';
+        $this->overwrittenAttributes[$name] = $phpVariable;
+    }
+
+    /** 
+     * Returns true if this element or one of its PHPTAL attributes has some
+     * content to print (an empty text node child does not count).
+     */
+    public function hasRealContent()
+    {
+        return $this->node->hasRealContent() 
+            || count($this->contentAttributes) > 0;
+    }
+
+    public function hasRealAttributes()
+    {
+        return ((count($this->attributes) - count($this->talAttributes)) > 0) || $this->hasAttribute('tal:attributes');
+    }
+
+    // ~~~~~ Generation methods may be called by some PHPTAL attributes ~~~~~
+    
+    public function generateSurroundHead()
+    {
+        foreach ($this->surroundAttributes as $att) {
+            $att->start();
+        }
+    }
+
+    public function generateHead()
+    {
+        if ($this->headFootDisabled) return;
+        if ($this->headFootPrintCondition) {
+            $this->generator->doIf($this->headFootPrintCondition);
+        }
+        
+        $this->generator->pushHtml('<'.$this->name);
+        $this->generateAttributes();
+
+        if ($this->isEmptyNode()){
+            $this->generator->pushHtml('/>');
+        }
+        else {
+            $this->generator->pushHtml('>');
+        }
+        
+        if ($this->headFootPrintCondition) {
+            $this->generator->doEnd();
+        }
+    }
+    
+    public function generateContent($realContent=false)
+    {
+        if ($this->isEmptyNode()){
+            return;
+        }
+        
+        if (!$realContent && count($this->contentAttributes) > 0) {
+            foreach ($this->contentAttributes as $att) {
+                $att->start();
+                $att->end();
+            }
+            return;
+        }
+        
+        parent::generate();
+    }
+
+    public function generateFoot()
+    {
+        if ($this->headFootDisabled) 
+            return;
+        if ($this->isEmptyNode())
+            return;
+
+        if ($this->headFootPrintCondition) {
+            $this->generator->doIf($this->headFootPrintCondition);
+        }
+        
+        $this->generator->pushHtml( '</'.$this->name.'>' );
+
+        if ($this->headFootPrintCondition) {
+            $this->generator->doEnd();
+        }
+    }
+
+    public function generateSurroundFoot()
+    {
+        for ($i = (count($this->surroundAttributes)-1); $i >= 0; $i--) {
+            $this->surroundAttributes[$i]->end();
+        }
+    }
+
+    // ~~~~~ Private members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    
+    private function generateAttributes()
+    {
+        // A phptal attribute can modify any node attribute replacing
+        // its value by a <?php echo $somevalue ?\ >.
+        //
+        // The entire attribute (key="value") can be replaced using the
+        // '$__ATT_' value code, it is very usefull for xhtml boolean
+        // attributes like selected, checked, etc...
+        //
+        // example: 
+        //  
+        //  $tag->generator->pushCode(
+        //  '$__ATT_checked = $somecondition ? \'checked="checked"\' : \'\''
+        //  );
+        //  $tag->attributes['checked'] = '<?php echo $__ATT_checked ?\>';
+        // 
+
+        $fullreplaceRx = PHPTAL_Php_Attribute_TAL_Attributes::REGEX_FULL_REPLACE;
+        foreach ($this->attributes as $key=>$value) {
+            if (preg_match($fullreplaceRx, $value)){
+                $this->generator->pushHtml($value);
+            }
+            else if (strpos($value,'<?php') === 0){
+                $this->generator->pushHtml(' '.$key.'="');
+                $this->generator->pushRawHtml($value);
+                $this->generator->pushHtml('"');
+            }
+            else {
+                $this->generator->pushHtml(' '.$key.'="'.$value.'"');
+            }
+        }
+    }
+
+    private function getNodePrefix()
+    {
+        $result = false;
+        if (preg_match('/^(.*?):block$/', $this->name, $m)){
+            list(,$result) = $m;
+        }
+        return $result;
+    }
+    
+    private function isEmptyNode()
+    {
+        return ($this->generator->getOutputMode() == PHPTAL::XHTML && PHPTAL_Dom_Defs::getInstance()->isEmptyTag($this->name)) ||
+               ($this->generator->getOutputMode() == PHPTAL::XML   && !$this->hasContent());
+    }
+
+    private function hasContent()
+    {
+        return count($this->children) > 0 || count($this->contentAttributes) > 0;
+    }
+
+    private function prepareAttributes()
+    {
+        //TODO: use registered namespaces instead of the raw list
+        if (preg_match('/^(tal|metal|phptal|i18n):block$/', $this->name, $m)) {
+            $this->headFootDisabled = true;
+            list(,$ns) = $m;
+            $attributes = array();
+            foreach ($this->attributes as $key=>$value) {
+                if ($this->xmlns->isPhpTalAttribute("$ns:$key")) {
+                    $attributes["$ns:$key"] = $value;
+                }
+                else {
+                    $attributes[$key] = $value;
+                }
+            }
+            $this->attributes = $attributes;
+        }
+    }
+
+    private function separateAttributes()
+    {
+        $attributes = array();
+        $this->talAttributes = array();
+        foreach ($this->attributes as $key=>$value) {
+            // remove handled xml namespaces
+            if (PHPTAL_Dom_Defs::getInstance()->isHandledXmlNs($key,$value)){
+            }
+            else if ($this->xmlns->isPhpTalAttribute($key)) {
+                $this->talAttributes[$key] = $value;
+            }
+            else if (PHPTAL_Dom_Defs::getInstance()->isBooleanAttribute($key)) {
+                $attributes[$key] = $key;
+            }
+            else {
+                $attributes[$key] = $value;
+            }
+        }
+        $this->attributes = $attributes;
+    }
+
+    private function orderTalAttributes()
+    {
+        $attributes = array();
+        foreach ($this->talAttributes as $key=>$exp){
+            $name = $this->xmlns->unAliasAttribute($key);
+            $att = PHPTAL_Dom_Defs::getInstance()->getNamespaceAttribute($name);
+            if (array_key_exists($att->getPriority(), $attributes)){
+                $err = sprintf(self::ERR_ATTRIBUTES_CONFLICT, 
+                               $this->name, 
+                               $this->getSourceLine(), 
+                               $key, 
+                               $attributes[$att->getPriority()][0]
+                               );
+                throw new PHPTAL_Exception($err);
+            }
+            $attributes[$att->getPriority()] = array($key, $att, $exp);
+        }
+        ksort($attributes);
+
+        $this->talHandlers = array();
+        foreach ($attributes as $prio => $dat){        
+            list($key, $att, $exp) = $dat;
+            $handler = $att->createAttributeHandler($this, $exp);
+            $this->talHandlers[$prio] = $handler;
+            
+            if ($att instanceOf PHPTAL_NamespaceAttributeSurround)
+                $this->surroundAttributes[] = $handler;
+            else if ($att instanceOf PHPTAL_NamespaceAttributeReplace)
+                $this->replaceAttributes[] = $handler;
+            else if ($att instanceOf PHPTAL_NamespaceAttributeContent)
+                $this->contentAttributes[] = $handler;
+            else 
+                throw new PHPTAL_Exception("Unknown namespace attribute class ".get_class($att));
+            
+        }
+    }
+}
+
+/**
+ * @package phptal.php
+ */
+class PHPTAL_Php_Comment extends PHPTAL_Php_Node
+{
+	public function generate()
+	{
+		$this->generator->pushRawHtml($this->node->getValue());
+	}
+}
+
+/**
+ * Document text data representation.
+ * @package phptal.php
+ */
+class PHPTAL_Php_Text extends PHPTAL_Php_Node
+{
+    public function generate()
+    {
+        $this->generator->pushString($this->node->getValue());
+    }
+}
+
+/**
+ * Comment, preprocessor, etc... representation.
+ * 
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Specific extends PHPTAL_Php_Node
+{
+    public function generate()
+    {
+        $this->generator->pushHtml($this->node->getValue());
+    }
+}
+
+/**
+ * Document doctype representation.
+ * 
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Doctype extends PHPTAL_Php_Node
+{
+    public function __construct(PHPTAL_Php_CodeWriter $generator, $node)
+    {
+        parent::__construct($generator, $node);
+        $this->generator->setDocType($this);
+    }
+
+    public function generate()
+    {;
+        $this->generator->doDoctype();
+    }
+}
+
+/**
+ * XML declaration node.
+ *
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_XmlDeclaration extends PHPTAL_Php_Node
+{
+    public function __construct(PHPTAL_Php_CodeWriter $gen, $node)
+    {
+        parent::__construct($gen, $node);
+        $this->generator->setXmlDeclaration($this);
+    }
+    
+    public function generate()
+    {
+        $this->generator->doXmlDeclaration();
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/State.php b/wp-content/themes/vanilla/PHPTAL/Php/State.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce1ce9c6a762e8ba7186552e62d5b1c0bafbdf71
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/State.php
@@ -0,0 +1,152 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+require_once PHPTAL_DIR.'PHPTAL/Php/Tales.php';
+
+/** 
+ * @package phptal.php
+ */
+class PHPTAL_Php_State
+{
+    public function __construct()
+    {
+        $this->_debug      = false;
+        $this->_talesMode  = 'tales';
+        $this->_encoding   = 'UTF-8';
+        $this->_outputMode = '';
+    }
+
+    public function setDebug($bool)
+    {
+        $old = $this->_debug;
+        $this->_debug = $bool;
+        return $old;
+    }
+
+    public function isDebugOn()
+    {
+        return $this->_debug;
+    }
+
+    public function setTalesMode($mode)
+    {
+        $old = $this->_talesMode;
+        $this->_talesMode = $mode;
+        return $old;
+    }
+
+    public function getTalesMode()
+    {
+        return $this->_talesMode;
+    }
+
+    public function setEncoding($enc)
+    {
+        $this->_encoding = $enc;
+    }
+
+    public function getEncoding()
+    {
+        return $this->_encoding;
+    }
+
+    public function setOutputMode($mode)
+    {
+        $this->_outputMode = $mode;
+    }
+
+    public function getOutputMode()
+    {
+        return $this->_outputMode;
+    }
+
+    public function evalTalesExpression($expression)
+    {
+        if ($this->_talesMode == 'php')
+            return PHPTAL_TalesInternal::php($expression);
+        return phptal_tales($expression);
+    }
+
+    public function interpolateTalesVarsInString($string)
+    {
+        if ($this->_talesMode == 'tales'){
+            return PHPTAL_TalesInternal::string($string);
+        }
+        
+        // replace ${var} found in expression
+        while (preg_match('/(?<!\$)\$\{([^\}]+)\}/ism', $string, $m)){
+            list($ori, $exp) = $m;
+            $php  = PHPTAL_TalesInternal::php($exp);
+            $repl = '\'.%s.\''; 
+            $repl = sprintf($repl, $php, $this->_encoding);
+            $string = str_replace($ori, $repl, $string);
+        }
+		$string = str_replace('$${', '${', $string);
+        return '\''.$string.'\'';
+    }
+
+    private function _interpolateTalesVarsStructure($matches) {
+        return '<?php echo '.phptal_tale($matches[1]).' ?>';
+    }
+
+    private function _interpolateTalesVarsEscaped($matches) {
+        return '<?php echo phptal_escape('.phptal_tale($matches[1]).', ENT_QUOTES, \''.$this->_encoding.'\');?>';
+    }
+
+    public function interpolateTalesVarsInHtml($src)
+    {
+        if ($this->_talesMode == 'tales'){
+            $result = preg_replace_callback('/(?<!\$)\$\{structure (.*?)\}/ism', array($this,'_interpolateTalesVarsStructure'), $src);
+            $result = preg_replace_callback('/(?<!\$)\$\{(.*?)\}/ism', array($this,'_interpolateTalesVarsEscaped'), $result);
+			$result = str_replace('$${', '${', $result);
+			return $result;
+        }
+
+        while (preg_match('/(?<!\$)\${(structure )?([^\}]+)\}/ism', $src, $m)){
+            list($ori, $struct, $exp) = $m;
+            $php  = PHPTAL_TalesInternal::php($exp);
+            // when structure keyword is specified the output is not html 
+            // escaped
+            if ($struct){
+                $repl = '<?php echo '.$php.'; ?>';
+            }
+            else {
+                $repl = '<?php echo '.$this->htmlchars($php).'; ?>';
+            }
+            $src  = str_replace($ori, $repl, $src);
+        }
+		
+        return str_replace('$${','${', $src);
+    }
+
+    public function htmlchars($php)
+    {
+        return 'phptal_escape('.$php.', ENT_QUOTES, \''.$this->_encoding.'\')';
+    }
+        
+    private $_debug;
+    private $_talesMode;
+    private $_encoding;
+    private $_outputMode;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Tales.php b/wp-content/themes/vanilla/PHPTAL/Php/Tales.php
new file mode 100644
index 0000000000000000000000000000000000000000..0fb7345ab0244e2fd9fe61c96b8baae40cff60f1
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Tales.php
@@ -0,0 +1,135 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+define('PHPTAL_TALES_DEFAULT_KEYWORD', '_DEFAULT_DEFAULT_DEFAULT_DEFAULT_');
+define('PHPTAL_TALES_NOTHING_KEYWORD', '_NOTHING_NOTHING_NOTHING_NOTHING_');
+
+
+// TALES Specification 1.3
+//
+//      Expression  ::= [type_prefix ':'] String
+//      type_prefix ::= Name
+//
+// Examples:
+//
+//      a/b/c
+//      path:a/b/c
+//      nothing
+//      path:nothing
+//      python: 1 + 2
+//      string:Hello, ${username}
+//
+//
+// Builtin Names in Page Templates (for PHPTAL)
+//
+//      * nothing - special singleton value used by TAL to represent a 
+//        non-value (e.g. void, None, Nil, NULL).
+//        
+//      * default - special singleton value used by TAL to specify that 
+//        existing text should not be replaced.
+//
+//      * repeat - the repeat variables (see RepeatVariable).
+// 
+
+function _phptal_tale_wrap($array, $nothrow)
+{
+	if (count($array)==1) return '($ctx->noThrow('.($nothrow?'true':'false').')||1?('.
+		($array[0]==PHPTAL_TALES_NOTHING_KEYWORD?'NULL':$array[0]).
+		'):"")';
+	
+	$expr = array_shift($array);
+	
+	return "((\$tmp5=$expr) && (\$ctx->noThrow(false)||1)?\$tmp5:"._phptal_tale_wrap($array, $nothrow).')';
+}
+
+/** translates array of alternative expressions into single PHP expression. Identical to phptal_tales() for singular expressions. */
+function phptal_tale($expression, $nothrow=false)
+{
+	$r = phptal_tales($expression,true);
+	if (!is_array($r)) return $r;
+	
+	// this weird ternary operator construct is to execute noThrow inside the expression
+	return '($ctx->noThrow(true)||1?'._phptal_tale_wrap($r, $nothrow).':"")';
+}
+
+function phptal_tales($expression, $nothrow=false)
+{
+	$expression = trim($expression);
+
+    // Look for tales modifier (string:, exists:, etc...)
+    //if (preg_match('/^([-a-z]+):(.*?)$/', $expression, $m)) {
+    if (preg_match('/^([a-z][-.a-z]*[a-z]):(.*?)$/i', $expression, $m)) {
+        list(,$typePrefix,$expression) = $m;
+    }
+    // may be a 'string'
+    else if (preg_match('/^\'((?:[^\']|\\\\.)*)\'$/', $expression, $m)) {
+        $expression = stripslashes($m[1]);
+        $typePrefix = 'string';
+    }
+    // failback to path:
+    else {
+        $typePrefix = 'path';
+    }
+    
+    // is a registered TALES expression modifier
+    if(PHPTAL_TalesRegistry::getInstance()->isRegistered($typePrefix)) {
+    	$callback = PHPTAL_TalesRegistry::getInstance()->getCallback($typePrefix);
+		return call_user_func($callback, $expression, $nothrow);
+    }
+
+    // class method
+    if (strpos($typePrefix, '.')){
+        $classCallback = explode('.', $typePrefix, 2);
+        $callbackName  = NULL;
+        if(!is_callable($classCallback, FALSE, $callbackName)) {
+            $err = 'Unknown phptal modifier %s function %s does not exists or is not statically callable.';
+            $err = sprintf($err, $typePrefix, $callbackName);
+            throw new PHPTAL_Exception($err);
+        }
+        $ref = new ReflectionClass($classCallback[0]);
+        if(!$ref->implementsInterface('PHPTAL_Tales')){
+            $err = 'Unable to use phptal modifier %s as the class %s does not implement the PHPTAL_Tales interface.';
+            $err = sprintf($err, $typePrefix, $callbackName);
+            throw new PHPTAL_Exception($err);
+        }
+        return call_user_func($classCallback, $expression, $nothrow);
+    }
+
+    // check if it is implemented via code-generating function
+    $func = 'phptal_tales_'.str_replace('-','_',$typePrefix);
+    if (function_exists($func)) {
+        return $func($expression, $nothrow);
+    }
+    
+    // check if it is implemented via runtime function
+    $runfunc = 'phptal_runtime_tales_'.str_replace('-','_',$typePrefix);
+    if (function_exists($runfunc)) {
+        return "$runfunc(".phptal_tale($expression, $nothrow).")";
+    }
+    
+    throw new PHPTAL_Exception("Unknown phptal modifier '$typePrefix'. Function '$func' does not exist");
+}
+
+// Register internal Tales expression modifiers
+require_once PHPTAL_DIR.'PHPTAL/Php/TalesInternal.php';
+PHPTAL_TalesInternal::registerInternalTales();
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/TalesChainExecutor.php b/wp-content/themes/vanilla/PHPTAL/Php/TalesChainExecutor.php
new file mode 100644
index 0000000000000000000000000000000000000000..f0d649ab481b07aeb97043a4e704ffa6ddc06111
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/TalesChainExecutor.php
@@ -0,0 +1,99 @@
+<?php
+
+/**
+ * @package phptal.php
+ */
+interface PHPTAL_Php_TalesChainReader
+{
+    public function talesChainNothingKeyword(PHPTAL_Php_TalesChainExecutor $executor);
+    public function talesChainDefaultKeyword(PHPTAL_Php_TalesChainExecutor $executor);
+    public function talesChainPart(PHPTAL_Php_TalesChainExecutor $executor, $expression, $islast);
+}
+
+/**
+ * @package phptal.php
+ */
+class PHPTAL_Php_TalesChainExecutor
+{
+    const CHAIN_BREAK = 1;
+    const CHAIN_CONT  = 2;
+
+    public function __construct($generator, $chain, $reader)
+    {
+        assert(is_array($chain));
+        $this->_chain = $chain;
+        $this->_chainStarted = false;
+        $this->_chainGenerator = $generator;
+        $this->_reader = $reader;
+        $this->_executeChain();
+    }
+    
+    public function doIf($condition)
+    {
+        if ($this->_chainStarted == false){
+            $this->_chainStarted = true;
+            $this->_chainGenerator->doIf($condition);
+        }
+        else {
+            $this->_chainGenerator->doElseIf($condition);
+        }
+    }
+
+    public function doElse()
+    {
+        if ($this->_chainStarted){
+            $this->_chainGenerator->doElse();
+        }
+    }
+
+    public function breakChain()
+    {
+        $this->_state = self::CHAIN_BREAK;
+    }
+
+    public function continueChain()
+    {
+        $this->_state = self::CHAIN_CONT;
+    }
+
+    private function _executeChain()
+    {
+        $this->_chainGenerator->noThrow(true);
+        
+        end($this->_chain); $lastkey = key($this->_chain);
+        
+        foreach ($this->_chain as $key => $exp){
+            $this->_state = 0;
+            if ($exp == PHPTAL_TALES_NOTHING_KEYWORD){
+                $this->_reader->talesChainNothingKeyword($this);
+                if ($this->_state == self::CHAIN_BREAK)
+                    break;
+                if ($this->_state == self::CHAIN_CONT)
+                    continue;
+            }
+            else if ($exp == PHPTAL_TALES_DEFAULT_KEYWORD){
+                $this->_reader->talesChainDefaultKeyword($this);
+                if ($this->_state == self::CHAIN_BREAK)
+                    break;
+                if ($this->_state == self::CHAIN_CONT)
+                    continue;
+            }
+            else {
+                $this->_reader->talesChainPart($this, $exp, $lastkey === $key);
+                if ($this->_state == self::CHAIN_BREAK)
+                    break;
+                if ($this->_state == self::CHAIN_CONT)
+                    continue;
+            }
+        }
+        $this->_chainGenerator->doEnd();
+        $this->_chainGenerator->noThrow(false);
+    }
+    
+    private $_state = 0;
+    private $_chain;
+    private $_chainStarted = false;
+    private $_chainGenerator = null;
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/TalesInternal.php b/wp-content/themes/vanilla/PHPTAL/Php/TalesInternal.php
new file mode 100644
index 0000000000000000000000000000000000000000..3cfe2c59f3f915b7578b58a8577c8dc2388cd6cf
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/TalesInternal.php
@@ -0,0 +1,331 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//			 Moritz Bechler <mbechler@eenterphace.org>
+//
+
+require_once PHPTAL_DIR.'PHPTAL/TalesRegistry.php';
+
+class PHPTAL_TalesInternal implements PHPTAL_Tales {
+
+	//
+	// This function registers all internal expression modifiers
+	//
+	static public function registerInternalTales() {
+
+		static $registered = false;
+
+		if($registered) {
+			return;
+		}
+
+		$registry = PHPTAL_TalesRegistry::getInstance();
+
+		$registry->registerPrefix('not', array(__CLASS__, 'not'));
+		$registry->registerPrefix('path', array(__CLASS__, 'path'));
+		$registry->registerPrefix('string', array(__CLASS__, 'string'));
+		$registry->registerPrefix('php', array(__CLASS__, 'php'));
+		$registry->registerPrefix('exists', array(__CLASS__, 'exists'));
+		$registry->registerPrefix('number', array(__CLASS__, 'number'));
+        $registry->registerPrefix('true', array(__CLASS__, 'true'));
+
+		$registered = true;
+	}
+
+    static public function true($src, $nothrow)
+    {
+	    return sprintf('phptal_true($ctx, %s)', self::string(trim($src), $nothrow));
+    }
+
+	//
+	// not:
+	//
+	//      not: Expression
+	//
+	// evaluate the expression string (recursively) as a full expression,
+	// and returns the boolean negation of its value
+	//
+	// return boolean based on the following rules:
+	//
+	//     1. integer 0 is false
+	//     2. integer > 0 is true
+	//     3. an empty string or other sequence is false
+	//     4. a non-empty string or other sequence is true
+	//     5. a non-value (e.g. void, None, Nil, NULL, etc) is false
+	//     6. all other values are implementation-dependent.
+	//
+	// Examples:
+	//
+	//      not: exists: foo/bar/baz
+	//      not: php: object.hasChildren()
+	//      not: string:${foo}
+	//      not: foo/bar/booleancomparable
+	//
+	static public function not($expression, $nothrow)
+	{
+		return '!(' . phptal_tales($expression, $nothrow) . ')';
+	}
+
+
+	//
+	// path:
+	//
+	//      PathExpr  ::= Path [ '|' Path ]*
+	//      Path      ::= variable [ '/' URL_Segment ]*
+	//      variable  ::= Name
+	//
+	// Examples:
+	//
+	//      path: username
+	//      path: user/name
+	//      path: object/method/10/method/member
+	//      path: object/${dynamicmembername}/method
+	//      path: maybethis | path: maybethat | path: default
+	//
+	// PHPTAL:
+	//
+	// 'default' may lead to some 'difficult' attributes implementation
+	//
+	// For example, the tal:content will have to insert php code like:
+	//
+	// if (isset($ctx->maybethis)) {
+	//     echo $ctx->maybethis;
+	// }
+	// else if (isset($ctx->maybethat) {
+	//     echo $ctx->maybethat;
+	// }
+	// else {
+	//     // process default tag content
+	// }
+	//
+	// @returns string or array
+	//
+	static public function path($expression, $nothrow=false)
+	{
+	    $expression = trim($expression);
+	    if ($expression == 'default') return PHPTAL_TALES_DEFAULT_KEYWORD;
+	    if ($expression == 'nothing') return PHPTAL_TALES_NOTHING_KEYWORD;
+	    if ($expression == '')        return PHPTAL_TALES_NOTHING_KEYWORD;
+
+	    // split OR expressions terminated by a string
+	    if (preg_match('/^(.*?)\s*\|\s*?(string:.*)$/sm', $expression, $m)){
+	        list(, $expression, $string) = $m;
+	    }
+	    // split OR expressions terminated by a 'fast' string
+	    else if (preg_match('/^(.*?)\s*\|\s*\'((?:[^\'\\\\]|\\\\.)*)\'\s*$/sm', $expression, $m)){
+	        list(, $expression, $string) = $m;
+	        $string = 'string:'.stripslashes($string);
+	    }
+
+	    // split OR expressions
+	    $exps = preg_split('/\s*\|\s*/sm', $expression);
+
+	    // if (many expressions) or (expressions or terminating string) found then
+	    // generate the array of sub expressions and return it.
+	    if (count($exps) > 1 || isset($string)) {
+	        $result = array();
+	        foreach ($exps as $exp) {
+	            $result[] = phptal_tales(trim($exp), true);
+	        }
+	        if (isset($string)){
+	            $result[] = phptal_tales($string, true);
+	        }
+	        return $result;
+	    }
+
+	    // only one expression to process
+
+	    // first evaluate ${foo} inside the expression and threat the expression
+	    // as if it was a string to interpolate
+	    $expression = self::string($expression);
+	    $expression = substr($expression, 1, -1);
+
+	    $pos = strpos($expression, '/');
+	    // if no sub part for this expression, just optimize the generated code
+	    // and access the $ctx->var
+	    if ($pos === false) {
+	        if (!self::checkExpressionPart($expression)) throw new PHPTAL_Exception("Invalid TALES path: '$expression', expected variable name");
+	        return '$ctx->'.$expression;
+	    }
+
+	    // otherwise we have to call phptal_path() to resolve the path at runtime
+	    // extract the first part of the expression (it will be the phptal_path()
+	    // $base and pass the remaining of the path to phptal_path()
+	    $next = substr($expression, 0, $pos);
+	    $expression = substr($expression, $pos+1);
+
+        if (!self::checkExpressionPart($next))  throw new PHPTAL_Exception("Invalid TALES path: '$next/$expression', expected '$next' to be variable name");
+        
+	    // return php code invoking phptal_path($next, $expression, $notrhow)
+	    return 'phptal_path($ctx->'.$next.', \''.$expression.'\''.($nothrow ? ', true' : '').')';
+	}
+
+    private static function checkExpressionPart($expression)
+    {
+        return preg_match('/^(\$?[a-z_][a-z0-9_]*|{.*})$/i',$expression);
+    }
+
+	//
+	// string:
+	//
+	//      string_expression ::= ( plain_string | [ varsub ] )*
+	//      varsub            ::= ( '$' Path ) | ( '${' Path '}' )
+	//      plain_string      ::= ( '$$' | non_dollar )*
+	//      non_dollar        ::= any character except '$'
+	//
+	// Examples:
+	//
+	//      string:my string
+	//      string:hello, $username how are you
+	//      string:hello, ${user/name}
+	//      string:you have $$130 in your bank account
+	//
+	static public function string($expression, $nothrow=false)
+	{
+	    // This is a simple parser which evaluates ${foo} inside
+	    // 'string:foo ${foo} bar' expressions, it returns the php code which will
+	    // print the string with correct interpollations.
+	    // Nothing special there :)
+
+	    $inPath = false;
+	    $inAccoladePath = false;
+	    $lastWasDollar = false;
+	    $result = '';
+	    $len = strlen($expression);
+	    for ($i=0; $i<$len; $i++) {
+	        $c = $expression[$i];
+	        switch ($c) {
+	            case '$':
+	                if ($lastWasDollar) {
+	                    $lastWasDollar = false;
+	                }
+	                else {
+	                    $lastWasDollar = true;
+	                    $c = '';
+	                }
+	                break;
+
+                case '\\':
+                    $c = '\\\\';
+                    break;
+
+	            case '\'':
+	                $c = '\\\'';
+	                break;
+
+	            case '{':
+	                if ($lastWasDollar) {
+	                    $lastWasDollar = false;
+	                    $inAccoladePath = true;
+	                    $subPath = '';
+	                    $c = '';
+	                }
+	                break;
+
+	            case '}':
+	                if ($inAccoladePath) {
+	                    $inAccoladePath = false;
+	                    $subEval = self::path($subPath);
+	                    if (is_array($subEval)) {
+	                        $err = 'cannot use | operator in evaluated expressions';
+	                        throw new PHPTAL_Exception($err);
+	                    }
+	                    $result .= "'." . $subEval . ".'";
+	                    $subPath = '';
+	                    $lastWasDollar = false;
+	                    $c = '';
+	                }
+	                break;
+
+	            default:
+	                if ($lastWasDollar) {
+	                    $lastWasDollar = false;
+	                    $inPath = true;
+	                    $subPath = $c;
+	                    $c = '';
+	                }
+	                else if ($inAccoladePath) {
+	                    $subPath .= $c;
+	                    $c = '';
+	                }
+	                else if ($inPath) {
+	                    $t = strtolower($c);
+	                    if (($t >= 'a' && $t <= 'z') || ($t >= '0' && $t <= '9') || ($t == '_')){
+	                        $subPath .= $c;
+	                        $c = '';
+	                    }
+	                    else {
+	                        $inPath = false;
+	                        $subEval = self::path($subPath);
+	                        if (is_array($subEval)) {
+	                            $err = 'cannot use | operator in evaluated expressions';
+	                            throw new PHPTAL_Exception($err);
+	                        }
+	                        $result .= "'." . $subEval . ".'";
+	                    }
+	                }
+	                break;
+	        }
+	        $result .= $c;
+	    }
+	    if ($inPath){
+	        $subEval = self::path($subPath);
+	        if (is_array($subEval)){
+	            $err = 'cannot use | operator in evaluated expressions';
+	            throw new PHPTAL_Exception($err);
+	        }
+	        $result .= "'." . $subEval . ".'";
+	    }
+	    return '\''.$result.'\'';
+	}
+
+	/**
+	 * php: modifier.
+	 *
+	 * Transform the expression into a regular PHP expression.
+	 */
+	static public function php($src)
+	{
+	    require_once PHPTAL_DIR.'PHPTAL/Php/Transformer.php';
+	    return PHPTAL_Php_Transformer::transform($src, '$ctx->');
+	}
+
+	/**
+	 * exists: modifier.
+	 *
+	 * Returns the code required to invoke phptal_exists() on specified path.
+	 */
+	static public function exists($src, $nothrow)
+	{
+	    return sprintf('phptal_exists($ctx, %s)', self::string(trim($src), $nothrow));
+	}
+
+	/**
+	 * number: modifier.
+	 *
+	 * Returns the number as is.
+	 */
+	static public function number($src, $nothrow)
+	{
+	    return trim($src);
+	}
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Php/Transformer.php b/wp-content/themes/vanilla/PHPTAL/Php/Transformer.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7a81bc155289db90961be4e09cded16b7d1dade
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Php/Transformer.php
@@ -0,0 +1,384 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+
+/**
+ * Tranform php: expressions into their php equivalent.
+ *
+ * This transformer produce php code for expressions like :
+ *
+ * - a.b["key"].c().someVar[10].foo()
+ * - (a or b) and (c or d)
+ * - not myBool
+ * - ...
+ *
+ * The $prefix variable may be changed to change the context lookup.
+ *
+ * example:
+ * 
+ *      $res = PHPTAL_Php_Transformer::transform('a.b.c[x]', '$ctx->');
+ *      $res == '$ctx->a->b->c[$ctx->x]';
+ *
+ * @package phptal.php
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Transformer
+{
+    const ST_NONE   = 0;
+    const ST_STR    = 1;  // 'foo' 
+    const ST_ESTR   = 2;  // "foo ${x} bar"
+    const ST_VAR    = 3;  // abcd
+    const ST_NUM    = 4;  // 123.02
+    const ST_EVAL   = 5;  // ${somevar}
+    const ST_MEMBER = 6;  // abcd.x
+    const ST_STATIC = 7;  // class::[$]static|const
+    const ST_DEFINE = 8;  // @MY_DEFINE
+
+    public static function transform( $str, $prefix='$' )
+    {
+
+        // 
+        // Here comes the good old state machine.
+        // TODO: benchmark this version and then benchmark a refactored version
+        // with states behaviour separated into methods, keep the fastest.
+        // 
+        
+        $len = strlen($str);
+        $state = self::ST_NONE;
+        $result = '';
+        $i = 0;
+        $inString = false;
+        $backslashed = false;
+        $instanceOf = false;
+        $eval = false;
+
+        for ($i = 0; $i <= $len; $i++) {
+            if ($i == $len) $c = "\0";
+            else $c = $str[$i];
+
+            switch ($state) {
+                // no state defined, just eat char and see what to do with it.
+                case self::ST_NONE:
+                    // begin of eval without {
+                    if ($c == '$' && $i < $len && self::isAlpha($str[$i+1])){
+                        $state = self::ST_EVAL;
+                        $mark = $i+1;
+                        $result .= $prefix.'{';
+                    } 
+                    // that an alphabetic char, then it should be the begining
+                    // of a var
+                    else if (self::isAlpha($c) || $c==='_') {
+                        $state = self::ST_VAR;
+                        $mark = $i;
+                    }
+                    // begining of double quoted string 
+                    else if ($c == '"') {
+                        $state = self::ST_ESTR;
+                        $mark = $i;
+                        $inString = true;
+                    }
+                    // begining of single quoted string
+                    else if ($c == '\'') {
+                        $state = self::ST_STR;
+                        $mark = $i;
+                        $inString = true;
+                    }
+                    // closing a method, an array access or an evaluation
+                    else if ($c == ')' || $c == ']' || $c == '}') {
+                        $result .= $c;
+                        // if next char is dot then an object member must
+                        // follow
+                        if ($i < $len-1 && $str[$i+1] == '.') {
+                            $result .= '->';
+                            $state = self::ST_MEMBER;
+                            $mark = $i+2;
+                            $i+=2;
+                        }
+                    }
+                    // @ is an access to some defined variable
+                    else if ($c == '@') { 
+                        $state = self::ST_DEFINE;
+                        $mark = $i+1;
+                    }
+                    // character we don't mind about
+                    else {
+                        $result .= $c;
+                    }
+                    break;
+               
+                // $xxx
+                case self::ST_EVAL:
+                    if (!self::isVarNameChar($c)){
+                        $result .= $prefix . substr($str, $mark, $i-$mark);
+                        $result .= '}';
+                        $state = self::ST_NONE;
+                    }
+                    break;
+ 
+                // single quoted string
+                case self::ST_STR: 
+                    if ($c == '\\') {
+                        $backslashed = true;
+                    }
+                    else if ($backslashed) {
+                        $backslashed = false;
+                    }
+                    // end of string, back to none state
+                    else if ($c == '\'') {
+                        $result .= substr( $str, $mark, $i-$mark+1 );
+                        $inString = false;
+                        $state = self::ST_NONE;
+                    }
+                    break;
+
+                // double quoted string
+                case self::ST_ESTR: 
+                    if ($c == '\\') {
+                        $backslashed = true;
+                    }
+                    else if ($backslashed) {
+                        $backslashed = false;
+                    }
+                    // end of string, back to none state
+                    else if ($c == '"') {
+                        $result .= substr( $str, $mark, $i-$mark+1 );
+                        $inString = false;
+                        $state = self::ST_NONE;
+                    }
+                    // instring interpolation, search } and transform the
+                    // interpollation to insert it into the string
+                    else if ($c == '$' && $i < $len && $str[$i+1] == '{') {
+                        $result .= substr( $str, $mark, $i-$mark ) . '{';
+                        
+                        $sub = 0;
+                        for ($j = $i; $j<$len; $j++) {
+                            if ($str[$j] == '{') {
+                                $sub++;
+                            }
+                            elseif ($str[$j] == '}' && (--$sub) == 0) {
+                                $part = substr( $str, $i+2, $j-$i-2 );
+                                $result .= self::transform($part, $prefix);
+                                $i = $j;
+                                $mark = $i;
+                            }
+                        }
+                    }
+                    break;
+
+                // var state
+                case self::ST_VAR:
+                    if (self::isVarNameChar($c)) {
+                    }
+                    // end of var, begin of member (method or var)
+                    else if ($c == '.') {
+                        $result .= $prefix . substr( $str, $mark, $i-$mark );
+                        $result .= '->';
+                        $state = self::ST_MEMBER;
+                        $mark = $i+1;
+                    }
+                    // static call, the var is a class name
+                    else if ($c == ':') {
+                        $result .= substr( $str, $mark, $i-$mark+1 );
+                        $mark = $i+1;
+                        $i++;
+                        $state = self::ST_STATIC;
+                        break;
+                    }
+                    // function invocation, the var is a function name
+                    else if ($c == '(') {
+                        $result .= substr( $str, $mark, $i-$mark+1 );
+                        $state = self::ST_NONE;
+                    }
+                    // array index, the var is done
+                    else if ($c == '[') {
+                        if ($str[$mark]==='_') { // superglobal?
+                            $result .= '$' . substr( $str, $mark, $i-$mark+1 );
+                        }
+                        else {
+                            $result .= $prefix . substr( $str, $mark, $i-$mark+1 );
+                        }
+                        $state = self::ST_NONE;
+                    }
+                    // end of var with non-var-name character, handle keywords
+                    // and populate the var name
+                    else {
+                        $var = substr( $str, $mark, $i-$mark );
+                        $low = strtolower($var);
+                        // boolean and null
+                        if ($low == 'true' || $low == 'false' || $low == 'null') {
+                            $result .= $var;
+                        }
+                        // lt, gt, ge, eq, ...
+                        else if (array_key_exists($low, self::$TranslationTable)){
+                            $result .= self::$TranslationTable[$low];
+                        }
+                        // instanceof keyword
+                        else if ($low == 'instanceof'){
+                            $result .= $var;
+                            $instanceOf = true;
+                        }
+                        // previous was instanceof
+                        else if ($instanceOf){
+                            // last was instanceof, this var is a class name
+                            $result .= $var;
+                            $instanceOf = false;
+                        }
+                        // regular variable
+                        else {
+                            $result .= $prefix . $var;
+                        }
+                        $i--;
+                        $state = self::ST_NONE;
+                    }
+                    break;
+
+                // object member
+                case self::ST_MEMBER:
+                    if (self::isVarNameChar($c)) {
+                    }
+                    // eval mode ${foo}
+                    else if ($c == '$') {
+                        $result .= '{' . $prefix;
+                        $mark++;
+                        $eval = true;
+                    }
+                    // end of var member var, begin of new member
+                    else if ($c == '.') {
+                        $result .= substr( $str, $mark, $i-$mark );
+                        if ($eval) { $result .='}'; $eval = false; }
+                        $result .= '->';
+                        $mark = $i+1;
+                        $state = self::ST_MEMBER;
+                    }
+                    // begin of static access
+                    else if ($c == ':') {
+                        $result .= substr( $str, $mark, $i-$mark+1 );
+                        if ($eval) { $result .='}'; $eval = false; }
+                        $state = self::ST_STATIC;
+                        break;
+                    }
+                    // the member is a method or an array
+                    else if ($c == '(' || $c == '[') {
+                        $result .= substr( $str, $mark, $i-$mark+1 );
+                        if ($eval) { $result .='}'; $eval = false; }
+                        $state = self::ST_NONE;
+                    }
+                    // regular end of member, it is a var
+                    else {
+                        $result .= substr( $str, $mark, $i-$mark );
+                        if ($eval) { $result .='}'; $eval = false; }
+                        $state = self::ST_NONE;
+                        $i--;
+                    }   
+                    break;
+
+                // wait for separator
+                case self::ST_DEFINE:
+                    if (self::isVarNameChar($c)) {
+                    }
+                    else {
+                        $state = self::ST_NONE;
+                        $result .= substr( $str, $mark, $i-$mark );
+                        $i--;
+                    }
+                    break;
+                    
+                // static call, can be const, static var, static method
+                // Klass::$static
+                // Klass::const
+                // Kclass::staticMethod()
+                // 
+                case self::ST_STATIC:
+                    if (self::isVarNameChar($c)) {
+                    }
+                    // static var 
+                    else if ($c == '$') {
+                    }
+                    // end of static var which is an object and begin of member
+                    else if ($c == '.') {
+                        $result .= substr( $str, $mark, $i-$mark );
+                        $result .= '->';
+                        $mark = $i+1;
+                        $state = self::ST_MEMBER;
+                    }
+                    // end of static var which is a class name
+                    else if ($c == ':') {
+                        $result .= substr( $str, $mark, $i-$mark+1 );
+                        $state = self::ST_STATIC;
+                        break;
+                    }
+                    // static method or array
+                    else if ($c == '(' || $c == '[') {
+                        $result .= substr( $str, $mark, $i-$mark+1 );
+                        $state = self::ST_NONE;
+                    }
+                    // end of static var or const
+                    else {
+                        $result .= substr( $str, $mark, $i-$mark );
+                        $state = self::ST_NONE;
+                        $i--;
+                    }   
+                    break;
+
+                // numeric value
+                case self::ST_NUM:
+                    if (!self::isDigitCompound($c)) {
+                        $result .= substr( $str, $mark, $i-$mark );
+                        $state = self::ST_NONE;
+                    }
+                    break;
+            }
+        }
+
+        return trim($result);
+    }
+
+    private static function isAlpha($c)
+    {
+        $c = strtolower($c);
+        return $c >= 'a' && $c <= 'z';
+    }
+
+    private static function isDigitCompound($c)
+    {
+        return ($c >= '0' && $c <= '9' || $c == '.');
+    }
+
+    private static function isVarNameChar($c)
+    {
+        return self::isAlpha($c) || ($c >= '0' && $c <= '9') || $c == '_';
+    }
+
+    private static $TranslationTable = array(
+        'not' => '!', 
+        'ne'  => '!=', 
+        'and' => '&&',
+        'or'  => '||',
+        'lt'  => '<',
+        'gt'  => '>',
+        'ge'  => '>=',
+        'le'  => '<=',
+        'eq'  => '==',
+    );
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/RepeatController.php b/wp-content/themes/vanilla/PHPTAL/RepeatController.php
new file mode 100644
index 0000000000000000000000000000000000000000..e902c25e048b6ec014d3b06db77df8d24c649af4
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/RepeatController.php
@@ -0,0 +1,477 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * Stores tal:repeat information during template execution.
+ *
+ * An instance of this class is created and stored into PHPTAL context on each
+ * tal:repeat usage.
+ *
+ * repeat/item/index
+ * repeat/item/number
+ * ...
+ * are provided by this instance.
+ *
+ * 'repeat' is an StdClass instance created to handle RepeatControllers, 
+ * 'item' is an instance of this class. 
+ * 
+ * @package phptal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_RepeatController implements Iterator
+{
+    private $key;
+    private $current;
+    private $valid;
+    private $validOnNext;
+
+    protected $iterator;
+    protected $index;
+    protected $end;
+    protected $length;
+
+    /**
+     * Construct a new RepeatController.
+     *
+     * @param $source array, string, iterator, iterable.
+     */
+    public function __construct($source)
+    {
+        if ( is_string($source) ) {
+            $this->iterator = new ArrayIterator( str_split($source) );  // FIXME: invalid for UTF-8 encoding, use preg_match_all('/./u') trick
+        } else if ( is_array($source) ) {
+            $this->iterator = new ArrayIterator($source);
+        } else if ( $source instanceof IteratorAggregate ) {
+            $this->iterator = $source->getIterator();
+        } else if ( $source instanceof Iterator ) {        
+            $this->iterator = $source;
+        } else if ( $source instanceof SimpleXMLElement) { // has non-unique keys!
+            $array = array();
+            foreach ( $source as $v ) {
+                $array[] = $v;
+            }
+            $this->iterator = new ArrayIterator($array);
+        } else if ( $source instanceof Traversable || $source instanceof DOMNodeList ) {
+            // PDO Statements for example implement the engine internal Traversable 
+            // interface. To make it fully iterable we traverse the set to populate
+            // an array which will be actually used for iteration.
+            $array = array();
+            foreach ( $source as $k=>$v ) {
+                $array[$k] = $v;
+            }
+            $this->iterator = new ArrayIterator($array);
+        } else {
+            $this->iterator = new ArrayIterator( array() );
+        }
+    
+        // Try to find the set length
+        $this->length = 0;
+        if ( $this->iterator instanceof Countable ) {
+            $this->length = count($this->iterator);
+        } else if ( is_object($this->iterator) ) {
+            // This should be removed since there is already the Countable interface in PHP5
+            if ( method_exists( $this->iterator, 'size' ) ) {
+                $this->length = $this->iterator->size();                
+            } else if ( method_exists( $this->iterator, 'length' ) ) {
+                $this->length = $this->iterator->length();
+            }
+        }
+        
+        $this->groups = new PHPTAL_RepeatController_Groups();
+        
+        $this->rewind();            
+    }
+  
+    /**
+     * Returns the current element value in the iteration
+     *
+     * @return Mixed    The current element value
+     */
+    public function current()
+    {
+        return $this->current;
+    }
+    
+    /**
+     * Returns the current element key in the iteration
+     *
+     * @return String/Int   The current element key
+     */
+    public function key()
+    {
+        return $this->key;
+    }
+    
+    /**
+     * Tells if the iteration is over
+     *
+     * @return bool     True if the iteration is not finished yet
+     */
+    public function valid()
+    {   
+        $valid = $this->valid || $this->validOnNext;
+        $this->validOnNext = $this->valid;
+        
+        return $valid;
+    }
+
+    /**
+     * Restarts the iteration process going back to the first element
+     *
+     */
+    public function rewind()
+    {
+        $this->index = 0;
+        $this->end = false;
+        
+        $this->iterator->rewind();
+
+        // Prefetch the next element
+        if ( $this->iterator->valid() ) {
+            $this->validOnNext = true;
+            $this->prefetch();
+        } else {
+            $this->validOnNext = false;
+        }
+        
+        // Notify the grouping helper of the change
+        $this->groups->reset();        
+    }
+
+    /**
+     * Fetches the next element in the iteration and advances the pointer
+     *
+     */
+    public function next()
+    {
+        $this->index++;        
+        
+        // Prefetch the next element
+        $this->prefetch();
+        
+        // Notify the grouping helper of the change
+        $this->groups->reset();        
+    }
+    
+    /**
+     * Gets an object property
+     *
+     * @return $var  Mixed  The variable value
+     */
+    public function __get( $var )
+    {
+        switch ( $var ) {
+            case 'index':
+            case 'end':
+            case 'length':
+                return $this->$var;
+            case 'number':
+                return $this->index + 1;
+            case 'start':
+                return $this->index === 0;
+            case 'even':
+                return ($this->index % 2) === 0;
+            case 'odd':
+                return ($this->index % 2) === 1;
+            case 'key':
+                return $this->key();
+            case 'letter':
+                return strtolower( $this->int2letter($this->index+1) );
+            case 'Letter':
+                return strtoupper( $this->int2letter($this->index+1) );            
+            case 'roman':
+                return strtolower( $this->int2roman($this->index+1) );
+            case 'Roman':            
+                return strtoupper( $this->int2roman($this->index+1) );
+                
+            case 'first':
+                // Compare the current one with the previous in the dictionary
+                $res = $this->groups->first( $this->current );                    
+                return is_bool($res) ? $res : $this->groups;
+            case 'last':
+                // Compare the next one with the dictionary
+                $res = $this->groups->last( $this->iterator->current() );
+                return is_bool($res) ? $res : $this->groups;
+            
+            default:
+                throw new PHPTAL_Exception( "Unable to find part '$var' in repeater controller" );
+        }
+    }    
+    
+    /**
+     * Fetches the next element from the source data store and
+     * updates the end flag if needed. 
+     *
+     * @access protected
+     */
+    protected function prefetch()
+    {
+        $this->valid = true;
+        $this->key = $this->iterator->key();
+        $this->current = $this->iterator->current();
+
+        $this->iterator->next();
+        if ( !$this->iterator->valid() ) {
+            $this->valid = false;
+            $this->end = true;
+        }
+    }    
+    
+    /**
+     * Converts an integer number (1 based) to a sequence of letters
+     *     
+     * @param $int Int  The number to convert
+     * @return String   The letters equivalent as a, b, c-z ... aa, ab, ac-zz ...
+     * @access protected
+     */
+    protected function int2letter( $int )
+    {
+        $lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+        $size = strlen($lookup);
+
+        $letters = '';
+        while ( $int > 0 ) {
+            $int--;
+            $letters = $lookup[$int % $size] . $letters;
+            $int = floor($int / $size);
+        }
+        return $letters;
+    }
+    
+    /**
+     * Converts an integer number (1 based) to a roman numeral
+     *     
+     * @param $int Int  The number to convert
+     * @return String   The roman numeral
+     * @access protected
+     */
+    protected function int2roman( $int )
+    {
+        $lookup = array(
+            '1000'  => 'M',
+            '900'   => 'CM',
+            '500'   => 'D',
+            '400'   => 'CD',
+            '100'   => 'C',
+            '90'    => 'XC',
+            '50'    => 'L',
+            '40'    => 'XL',
+            '10'    => 'X',
+            '9'     => 'IX',
+            '5'     => 'V',
+            '4'     => 'IV',
+            '1'     => 'I',
+        );
+        
+        $roman = '';
+        foreach ( $lookup as $max => $letters ) {
+            while ( $int >= $max ) {
+                $roman .= $letters;
+                $int -= $max;
+            }
+        }
+        
+        return $roman;
+    }
+}
+
+
+/**
+ * Keeps track of variable contents when using grouping in a path (first/ and last/)
+ *
+ * @package phptal
+ * @author Iv�n Montes <drslump@pollinimini.net>
+ */
+class PHPTAL_RepeatController_Groups {
+
+    protected $dict = array();
+    protected $cache = array();
+    protected $data = null;
+    protected $vars = array();
+    protected $branch;
+    
+        
+    public function __construct()
+    {
+        $this->dict = array();        
+        $this->reset();
+    }
+    
+    /**
+     * Resets the result caches. Use it to signal an iteration in the loop
+     * 
+     */
+    public function reset()
+    {
+        $this->cache = array();
+    }
+        
+    /**
+     * Checks if the data passed is the first one in a group
+     * 
+     * @param $data Mixed   The data to evaluate
+     * @return Mixed    True if the first item in the group, false if not and
+     *                  this same object if the path is not finished
+     */ 
+    public function first( $data )
+    {
+        if ( !is_array($data) && !is_object($data) && !is_null($data) ) {
+            
+            if ( !isset($this->cache['F']) ) {
+                
+                $hash = md5($data);
+                
+                if ( !isset($this->dict['F']) || $this->dict['F'] !== $hash ) {                
+                    $this->dict['F'] = $hash;
+                    $res = true;
+                } else {
+                    $res = false;
+                }
+                
+                $this->cache['F'] = $res;
+            }
+            
+            return $this->cache['F'];
+        }
+        
+        $this->data = $data;
+        $this->branch = 'F';
+        $this->vars = array();
+        return $this;
+    }
+   
+    /**
+     * Checks if the data passed is the last one in a group
+     * 
+     * @param $data Mixed   The data to evaluate
+     * @return Mixed    True if the last item in the group, false if not and
+     *                  this same object if the path is not finished
+     */ 
+    public function last( $data )
+    {
+        if ( !is_array($data) && !is_object($data) && !is_null($data) ) {
+            
+            if ( !isset($this->cache['L']) ) {
+                
+                $hash = md5($data);
+                
+                if (empty($this->dict['L'])) {
+                    $this->dict['L'] = $hash;
+                    $res = false;
+                } else if ( $this->dict['L'] !== $hash ) {
+                    $this->dict['L'] = $hash;
+                    $res = true;
+                } else {
+                    $res = false;
+                }
+                
+                $this->cache['L'] = $res;
+            }
+            
+            return $this->cache['L'];
+        }
+        
+        $this->data = $data;
+        $this->branch = 'L';
+        $this->vars = array();
+        return $this;
+    }    
+    
+    /**
+     * Handles variable accesses for the tal path resolver
+     *
+     * @param $var String   The variable name to check
+     * @return Mixed    An object/array if the path is not over or a boolean
+     *
+     * @todo    replace the phptal_path() with custom code
+     */
+    public function __get( $var )
+    {
+        // When the iterator item is empty we just let the tal 
+        // expression consume by continuously returning this 
+        // same object which should evaluate to true for 'last'
+        if ( is_null($this->data) ) {
+            return $this;
+        }
+        
+        // Find the requested variable
+        $value = @phptal_path( $this->data, $var, true );
+        
+        // Check if it's an object or an array
+        if ( is_array($value) || is_object($value) ) {
+            // Move the context to the requested variable and return
+            $this->data = $value;
+            $this->addVarName( $var );
+            return $this;
+        }
+        
+        // get a hash of the variable contents
+        $hash = md5( $value );
+        
+        // compute a path for the variable to use as dictionary key
+        $path = $this->branch . $this->getVarPath() . $var;
+
+        // If we don't know about this var store in the dictionary        
+        if ( !isset($this->cache[$path]) ) {
+        
+            if ( !isset($this->dict[$path]) ) {
+                $this->dict[$path] = $hash;
+                $res = $this->branch === 'F';
+            } else {
+                // Check if the value has changed
+                if ( $this->dict[$path] !== $hash ) {
+                    $this->dict[$path] = $hash;
+                    $res = true;
+                } else {
+                    $res = false;
+                }
+            }
+            
+            $this->cache[$path] = $res;
+        }
+        
+        return $this->cache[$path];
+
+    }
+
+    /**
+     * Adds a variable name to the current path of variables
+     *
+     * @param $varname String  The variable name to store as a path part
+     * @access protected
+     */
+    protected function addVarName( $varname )
+    {
+        $this->vars[] = $varname;
+    }
+
+    /**
+     * Returns the current variable path separated by a slash
+     *
+     * @return String  The current variable path
+     * @access protected
+     */
+    protected function getVarPath()
+    {
+        return implode('/', $this->vars) . '/';
+    }
+}
diff --git a/wp-content/themes/vanilla/PHPTAL/Source.php b/wp-content/themes/vanilla/PHPTAL/Source.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc5f0706db2e1ecf215e6b7fc2da9886c0dc61fe
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Source.php
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @package phptal
+ */
+interface PHPTAL_Source
+{
+    /** Returns string, unique path identifying the template source. */
+    public function getRealPath();
+    /** Returns long, the template source last modified time. */
+    public function getLastModifiedTime();
+    /** Returns string, the template source. */
+    public function getData();
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/SourceResolver.php b/wp-content/themes/vanilla/PHPTAL/SourceResolver.php
new file mode 100644
index 0000000000000000000000000000000000000000..065a8f1cb558b6849d38e00b1fa8a863e2bf6002
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/SourceResolver.php
@@ -0,0 +1,16 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Source.php';
+
+/** 
+ * @package phptal
+ */
+interface PHPTAL_SourceResolver 
+{
+    /**
+     * Returns PHPTAL_Source or null.
+     */
+    public function resolve($path);
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/StringSource.php b/wp-content/themes/vanilla/PHPTAL/StringSource.php
new file mode 100644
index 0000000000000000000000000000000000000000..f62546da26b5cef6ced2c8c51387f52bc48957b2
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/StringSource.php
@@ -0,0 +1,34 @@
+<?php
+
+require_once PHPTAL_DIR.'PHPTAL/Source.php';
+
+/**
+ * @package phptal
+ */
+class PHPTAL_StringSource implements PHPTAL_Source
+{
+    public function __construct($data, $realpath)
+    {
+        $this->_data = $data;
+        $this->_realpath = $realpath;
+    }
+
+    public function getLastModifiedTime()
+    {
+        if (file_exists($this->_realpath))
+            return @filemtime($this->_realpath);
+        return 0;
+    }
+
+    public function getData()
+    {
+        return $this->_data;
+    }
+
+    public function getRealPath()
+    {
+        return $this->_realpath;
+    }
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Tales.php b/wp-content/themes/vanilla/PHPTAL/Tales.php
new file mode 100644
index 0000000000000000000000000000000000000000..c9a203cb90bb713fbaed2ca99aaa9b19b2787c0e
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Tales.php
@@ -0,0 +1,7 @@
+<?php
+
+interface PHPTAL_Tales
+{
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/TalesRegistry.php b/wp-content/themes/vanilla/PHPTAL/TalesRegistry.php
new file mode 100644
index 0000000000000000000000000000000000000000..7973952cce7f647f5bb662c4f6e9e156b28492e7
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/TalesRegistry.php
@@ -0,0 +1,109 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//
+//  Authors: Moritz Bechler <mbechler@eenterphace.org>
+//
+
+require_once PHPTAL_DIR.'PHPTAL/Tales.php';
+
+/**
+ * Global registry of TALES expression modifiers
+ *
+ */
+class PHPTAL_TalesRegistry {
+
+	static $instance;
+
+	static public function initialize() {
+		self::$instance = new PHPTAL_TalesRegistry();
+	}
+
+	/**
+	 * Enter description here...
+	 *
+	 * @return PHPTAL_TalesRegistry
+	 */
+	static public function getInstance() {
+		if(!(self::$instance instanceof PHPTAL_TalesRegistry)) {
+			self::initialize();
+		}
+
+		return self::$instance;
+	}
+
+	protected function __construct() {
+
+	}
+
+	/**
+	 *
+	 * Expects an either a function name or an array of class and method as
+	 * callback.
+	 *
+	 * @param unknown_type $prefix
+	 * @param unknown_type $callback
+	 */
+	public function registerPrefix($prefix, $callback) {
+		if($this->isRegistered($prefix)) {
+			throw new PHPTAL_Exception(sprintf('Expression modifier "%s" is already registered.',$prefix));
+		}
+
+		// Check if valid callback
+
+		if(is_array($callback)) {
+
+			$class = new ReflectionClass($callback[0]);
+
+			if(!$class->isSubclassOf('PHPTAL_Tales')) {
+				throw new PHPTAL_Exception('The class you want to register does not implement "PHPTAL_Tales".');
+			}
+
+			$method = new ReflectionMethod($callback[0], $callback[1]);
+
+			if(!$method->isStatic()) {
+				throw new PHPTAL_Exception('The method you want to register is not static.');
+			}
+
+			// maybe we want to check the parameters the method takes
+
+		} else {
+			if(!function_exists($callback)) {
+				throw new PHPTAL_Exception('The function you are trying to register does not exist.');
+			}
+		}
+
+
+		$this->_callbacks[$prefix] = $callback;
+	}
+
+	public function isRegistered($prefix) {
+		return (array_key_exists($prefix, $this->_callbacks));
+	}
+
+	public function getCallback($prefix) {
+		if(!$this->isRegistered($prefix)) {
+			throw new PHPTAL_Exception(sprintf('Expression modifier "%s" is not registered.', $prefix));
+		}
+		return $this->_callbacks[$prefix];
+	}
+
+	private $_callbacks = array();
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/TranslationService.php b/wp-content/themes/vanilla/PHPTAL/TranslationService.php
new file mode 100644
index 0000000000000000000000000000000000000000..8fd63a8f2afaee0b94a555d94bb7790f0ebe1e14
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/TranslationService.php
@@ -0,0 +1,41 @@
+<?php
+
+/** 
+ * @package phptal
+ */
+interface PHPTAL_TranslationService
+{
+    /**
+     * Set the target language for translations.
+     *
+     * When set to '' no translation will be done.
+     *
+     * You can specify a list of possible language for exemple :
+     *
+     * setLanguage('fr_FR', 'fr_FR@euro')
+     */
+    function setLanguage();
+
+    /**
+     * PHPTAL will inform translation service what encoding page uses.
+     * Output of translate() must be in this encoding.
+     */
+    function setEncoding($encoding);
+
+    /**
+     * Set the domain to use for translations.
+     */
+    function useDomain($domain);
+
+    /**
+     * Set an interpolation var.
+     */
+    function setVar($key, $value);
+
+    /**
+     * Translate a gettext key and interpolate variables.
+     */
+    function translate($key, $htmlescape=true);
+}
+
+?>
diff --git a/wp-content/themes/vanilla/PHPTAL/Trigger.php b/wp-content/themes/vanilla/PHPTAL/Trigger.php
new file mode 100644
index 0000000000000000000000000000000000000000..75a5bc935761b93e8f3f4b4be1dda20a28e83d23
--- /dev/null
+++ b/wp-content/themes/vanilla/PHPTAL/Trigger.php
@@ -0,0 +1,36 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+//  
+//  Copyright (c) 2004-2005 Laurent Bedubourg
+//  
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//  
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//  
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//  
+//  Authors: Laurent Bedubourg <lbedubourg@motion-twin.com>
+//  
+
+/**
+ * @package phptal
+ */
+interface PHPTAL_Trigger
+{
+    const SKIPTAG = 1;
+    const PROCEED = 2;
+
+    public function start($id, $tpl);
+
+    public function end($id, $tpl);
+}
+
+?>
diff --git a/wp-content/themes/vanilla/_carrington/README.txt b/wp-content/themes/vanilla/_carrington/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..118f61fe3c9ec0ea331f1fe45759ec9834a866b2
--- /dev/null
+++ b/wp-content/themes/vanilla/_carrington/README.txt
@@ -0,0 +1,21 @@
+## functions/
+
+### Overview
+
+This directory contains Carrington's custom features and functionality.
+
+
+### Supported Override Filenames
+
+- (none)
+
+
+### File Descriptions
+
+You do not need to do anything with files in this folder; they should remain as-is.
+
+- *admin.php* - Handles custom admin pages for Carrington features.
+- *classnames.php - Includes semantic CSS classname functions for Carrington
+- *sandbox.php* - Includes further useful semantic CSS classname functions - from the Sandbox theme.
+- *templates.php* - Carrington template functions.
+- *utility.php* - Carrington utility functions.
diff --git a/wp-content/themes/vanilla/_carrington/admin.php b/wp-content/themes/vanilla/_carrington/admin.php
new file mode 100644
index 0000000000000000000000000000000000000000..c79060630f4af16d52c738d39274b084e24b7534
--- /dev/null
+++ b/wp-content/themes/vanilla/_carrington/admin.php
@@ -0,0 +1,245 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+// - add admin page for config settings
+
+function cfct_admin_menu() {
+	if (!current_user_can('manage_options')) {
+		return;
+	}
+	add_submenu_page(
+		'themes.php'
+		, __('Carrington Settings', 'carrington')
+		, __('Carrington', 'carrington')
+		, 0
+		, 'carrington-settings'
+		, 'cfct_settings_form'
+	);
+}
+add_action('admin_menu', 'cfct_admin_menu');
+
+function cfct_admin_request_handler() {
+	if (isset($_POST['cf_action'])) {
+		switch ($_POST['cf_action']) {
+			case 'cfct_update_settings':
+				call_user_func($_POST['cf_action']);
+				wp_redirect(trailingslashit(get_bloginfo('wpurl')).'wp-admin/themes.php?page=carrington-settings&updated=true');
+		}
+	}
+}
+
+function cfct_update_settings() {
+	if (!current_user_can('manage_options')) {
+		return;
+	}
+	global $cfct_options;
+	foreach ($cfct_options as $option) {
+		if (isset($_POST[$option])) {
+			update_option($option, stripslashes($_POST[$option]));
+		}
+	}
+	do_action('cfct_update_settings');
+}
+
+function cfct_settings_form() {
+	if (isset($_GET['updated'])) {
+		print('
+<div id="message" class="updated fade">
+	<p>'.__('Settings updated.', 'carrington').'</p>
+</div>
+		');
+	}
+	print('
+<div class="wrap">
+	<h2>'.__('Carrington Settings', 'carrington').'</h2>
+	<form action="options.php" method="post">
+		<table class="form-table">
+			<tbody>'
+//			.cfct_options_home_column('1')
+//			.cfct_options_home_column('2')
+//			.cfct_options_home_column('3')
+			.cfct_options_misc()
+			.'</tbody>
+		</table>
+	');
+	do_action('cfct_settings_form');
+	print('
+		<p class="submit">
+			<input type="hidden" name="cf_action" value="cfct_update_settings" />
+			<input type="submit" name="submit_button" value="'.__('Save Changes', 'carrington').'" />
+		</p>
+	</form>
+</div>
+	');
+	do_action('cfct_settings_form_after');
+}
+
+function cfct_options_home_column($key) {
+	$categories = get_categories('hide_empty=0');
+	$cat_options = '';
+	foreach ($categories as $category) {
+		if ($category->term_id == get_option('cfct_home_col_'.$key.'_cat')) {
+			$selected = 'selected="selected"';
+		}
+		else {
+			$selected = '';
+		}
+		$cat_options .= "\n\t<option value='$category->term_id' $selected>$category->name</option>";
+	}
+	$show_options = '';
+	$show_option = cfct_get_option('cfct_home_column_'.$key.'_content');
+	if ($show_option == 'latest') {
+		$latest_selected = 'selected="selected"';
+		$list_selected = '';
+	}
+	else {
+		$latest_selected = '';
+		$list_selected = 'selected="selected"';
+	}
+	$html = '
+				<tr valign="top">
+					<th scope="row">'.sprintf(__('Home Column %s', 'carrington'), $key).'</td>
+					<td>
+						<fieldset>
+							<p>
+								<label for="cfct_home_column_'.$key.'_cat">'.__('Category:', 'carrington').'</label>
+								<select name="cfct_home_column_'.$key.'_cat" id="cfct_home_column_'.$key.'_cat">'.$cat_options.'</select>
+							</p>
+							<p>
+								<label for="cfct_home_column_'.$key.'_content">'.__('Show:', 'carrington').'</label>
+								<select name="cfct_home_column_'.$key.'_content" id="cfct_home_column_'.$key.'_content" class="home_column_select">
+									<option value="latest" '.$latest_selected.'>'.__('Latest Post Preview', 'carrington').'</option>
+									<option value="list" '.$list_selected.'>'.__('List of Recent Post Titles', 'carrington').'</option>
+								</select>
+							</p>
+							<p id="cfct_latest_limit_'.$key.'_option" class="hidden">
+								<label for="cfct_latest_limit_'.$key.'">'.__('Length of preview, in characters (250 recommended):', 'carrington').'</label>
+								<input type="text" name="cfct_latest_limit_'.$key.'" id="cfct_latest_limit_'.$key.'" value="'.cfct_get_option('cfct_latest_limit_'.$key).'" />
+							</p>
+							<p id="cfct_list_limit_'.$key.'_option" class="hidden">
+								<label for="cfct_list_limit_'.$key.'">'.__('Number of titles to show in list (5 recommended):', 'carrington').'</label>
+								<input type="text" name="cfct_list_limit_'.$key.'" id="cfct_list_limit_'.$key.'" value="'.cfct_get_option('cfct_list_limit_'.$key).'" />
+							</p>
+						</fieldset>
+					</td>
+				</tr>
+	';
+	return $html;
+}
+
+function cfct_options_misc() {
+	$options = array(
+		'yes' => 'Yes'
+		, 'no' => 'No'
+	);
+	$ajax_load_options = '';
+	$credit_options = '';
+	foreach ($options as $k => $v) {
+		if ($k == get_option('cfct_ajax_load')) {
+			$ajax_load_selected = 'selected="selected"';
+		}
+		else {
+			$ajax_load_selected = '';
+		}
+		$ajax_load_options .= "\n\t<option value='$k' $ajax_load_selected>$v</option>";
+		if ($k == get_option('cfct_credit')) {
+			$credit_selected = 'selected="selected"';
+		}
+		else {
+			$credit_selected = '';
+		}
+		$credit_options .= "\n\t<option value='$k' $credit_selected>$v</option>";
+	}
+	$cfct_posts_per_archive_page = get_option('cfct_posts_per_archive_page');
+	if (intval($cfct_posts_per_archive_page) == 0) {
+		$cfct_posts_per_archive_page = 25;
+	}
+	$html = '
+				<tr valign="top">
+					<th scope="row">'.sprintf(__('Misc.', 'carrington'), $key).'</td>
+					<td>
+						<fieldset>
+							<p>
+								<label for="cfct_about_text">'.__('About text (shown in sidebar):', 'carrington').'</label>
+								<br />
+								<textarea name="cfct_about_text" id="cfct_about_text" cols="40" rows="8">'.htmlspecialchars(get_option('cfct_about_text')).'</textarea>
+							</p>
+							<p>
+								<label for="cfct_ajax_load">'.__('Load archives and comments with AJAX:', 'carrington').'</label>
+								<select name="cfct_ajax_load" id="cfct_ajax_load">'.$ajax_load_options.'</select>
+							</p>
+							<p>
+								<label for="cfct_posts_per_archive_page">'.__('Posts shown on archives pages:', 'carrington').'</label>
+								<input type="text" name="cfct_posts_per_archive_page" id="cfct_posts_per_archive_page" value="'.$cfct_posts_per_archive_page.'" size="3" />
+							</p>
+							<p>
+								<label for="cfct_credit">'.__('Give <a href="http://crowdfavorite.com">Crowd Favorite</a> credit in footer:', 'carrington').'</label>
+								<select name="cfct_credit" id="cfct_credit">'.$credit_options.'</select>
+							</p>
+							<p>
+								<label for="cfct_wp_footer">'.__('Footer code (for analytics, etc.):', 'carrington').'</label>
+								<br />
+								<textarea name="cfct_wp_footer" id="cfct_wp_footer" cols="40" rows="5">'.htmlspecialchars(get_option('cfct_wp_footer')).'</textarea>
+							</p>
+						</fieldset>
+					</td>
+				</tr>
+	';
+	return $html;
+}
+
+function cfct_admin_js() {
+?>
+<script type="text/javascript">
+jQuery(function() {
+	jQuery('select.home_column_select').each(function() {
+		cfct_home_columns(jQuery(this), false);
+	}).change(function() {
+		cfct_home_columns(jQuery(this), true);
+	});
+});
+
+function cfct_home_columns(elem, slide) {
+	var id = elem.attr('id').replace('cfct_home_column_', '').replace('_content', '');
+	var val = elem.val();
+	var option_show = '#cfct_latest_limit_' + id + '_option';
+	var option_hide = '#cfct_list_limit_' + id + '_option';
+	if (val == 'list') {
+		option_show = '#cfct_list_limit_' + id + '_option';
+		option_hide = '#cfct_latest_limit_' + id + '_option';
+	}
+	if (slide) {
+		jQuery(option_hide).slideUp(function() {
+			jQuery(option_show).slideDown();
+		});
+	}
+	else {
+		jQuery(option_show).show();
+		jQuery(option_hide).hide();
+	}
+}
+</script>
+<?php
+}
+add_action('admin_head', 'cfct_admin_js');
+
+// TODO
+// - color pickers for background/theme integration
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_carrington/ajax-load.php b/wp-content/themes/vanilla/_carrington/ajax-load.php
new file mode 100644
index 0000000000000000000000000000000000000000..74facc7dbe5b3262d956c4c4d99b674c92fec10e
--- /dev/null
+++ b/wp-content/themes/vanilla/_carrington/ajax-load.php
@@ -0,0 +1,84 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function cfct_ajax_post_content($post_id) {
+	global $posts, $post, $wp;
+	$posts = get_posts('include='.$post_id);
+	$post = $posts[0];
+	if (is_null($post)) {
+		$posts = get_pages('include='.$post_id);
+		$post = $posts[0];
+	}
+	setup_postdata($post);
+	remove_filter('the_content', 'st_add_widget');
+	$wp->send_headers();
+	cfct_content();
+}
+
+function cfct_ajax_post_comments($post_id) {
+	global $post, $wp_query, $wp;
+	$wp_query->is_single = true;
+	$posts = get_posts('include='.$post_id);
+	$post = $posts[0];
+	if (is_null($post)) {
+		$posts = get_pages('include='.$post_id);
+		$post = $posts[0];
+	}
+	setup_postdata($post);
+	$wp->send_headers();
+	comments_template();
+}
+
+function cfct_ajax_load() {
+	if (isset($_GET['cfct_action'])) {
+		switch ($_GET['cfct_action']) {
+			case 'post_content':
+			case 'post_comments':
+				if (isset($_GET['id'])) {
+					$post_id = intval($_GET['id']);
+				}
+				else if (isset($_GET['url'])) {
+					$post_id = url_to_post_id($_GET['url']);
+				}
+				if ($post_id) {
+					call_user_func('cfct_ajax_'.$_GET['cfct_action'], $post_id);
+					die();
+				}
+		}
+	}
+}
+
+function cfct_ajax_comment_link() {
+	global $post;
+	return ' rev="post-'.$post->ID.'" '; // alister modified
+}
+add_filter('comments_popup_link_attributes', 'cfct_ajax_comment_link');
+
+function cfct_posts_per_archive_page($query) {
+	$count = get_option('cfct_posts_per_archive_page');
+	intval($count) > 0 ? $count = $count : $count = 25;
+	$query->set('posts_per_archive_page', $count);
+	if (is_category()) {
+		$query->set('posts_per_page', $count);
+	}
+	return $query;
+}
+add_filter('pre_get_posts', 'cfct_posts_per_archive_page');
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_carrington/sandbox.php b/wp-content/themes/vanilla/_carrington/sandbox.php
new file mode 100644
index 0000000000000000000000000000000000000000..6cbaefb2e27a20593a28b519e05a36ddd027b520
--- /dev/null
+++ b/wp-content/themes/vanilla/_carrington/sandbox.php
@@ -0,0 +1,292 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+// The following functions are taken from Sandbox
+// http://www.plaintxt.org/themes/sandbox/
+
+function sandbox_date_classes( $t, &$c, $p = '' ) {
+	$t = $t + ( get_option('gmt_offset') * 3600 );
+	$c[] = $p . 'y' . gmdate( 'Y', $t ); // Year
+	$c[] = $p . 'm' . gmdate( 'm', $t ); // Month
+	$c[] = $p . 'd' . gmdate( 'd', $t ); // Day
+	$c[] = $p . 'h' . gmdate( 'H', $t ); // Hour
+}
+
+function sandbox_body_class( $print = true ) {
+	global $wp_query, $current_user;
+
+	// It's surely a WordPress blog, right?
+	$c = array('wordpress');
+
+	// Applies the time- and date-based classes (below) to BODY element
+	sandbox_date_classes( time(), $c );
+
+	// Generic semantic classes for what type of content is displayed
+	is_front_page()  ? $c[] = 'home'       : null; // For the front page, if set
+	is_home()        ? $c[] = 'blog'       : null; // For the blog posts page, if set
+	is_archive()     ? $c[] = 'archive'    : null;
+	is_date()        ? $c[] = 'date'       : null;
+	is_search()      ? $c[] = 'search'     : null;
+	is_paged()       ? $c[] = 'paged'      : null;
+	is_attachment()  ? $c[] = 'attachment' : null;
+	is_404()         ? $c[] = 'four04'     : null; // CSS does not allow a digit as first character
+
+	// Special classes for BODY element when a single post
+	if ( is_single() ) {
+		$postID = $wp_query->post->ID;
+		the_post();
+
+		// Adds 'single' class and class with the post ID
+		$c[] = 'single postid-' . $postID;
+
+		// Adds classes for the month, day, and hour when the post was published
+		if ( isset( $wp_query->post->post_date ) )
+			sandbox_date_classes( mysql2date( 'U', $wp_query->post->post_date ), $c, 's-' );
+
+		// Adds category classes for each category on single posts
+		if ( $cats = get_the_category() )
+			foreach ( $cats as $cat )
+				$c[] = 's-category-' . $cat->slug;
+
+		// Adds tag classes for each tags on single posts
+		if ( $tags = get_the_tags() )
+			foreach ( $tags as $tag )
+				$c[] = 's-tag-' . $tag->slug;
+
+		// Adds MIME-specific classes for attachments
+		if ( is_attachment() ) {
+			$mime_type = get_post_mime_type();
+			$mime_prefix = array( 'application/', 'image/', 'text/', 'audio/', 'video/', 'music/' );
+				$c[] = 'attachmentid-' . $postID . ' attachment-' . str_replace( $mime_prefix, "", "$mime_type" );
+		}
+
+		// Adds author class for the post author
+		$c[] = 's-author-' . sanitize_title_with_dashes(strtolower(get_the_author_login()));
+		rewind_posts();
+	}
+
+	// Author name classes for BODY on author archives
+	elseif ( is_author() ) {
+		$author = $wp_query->get_queried_object();
+		$c[] = 'author';
+		$c[] = 'author-' . $author->user_nicename;
+	}
+
+	// Category name classes for BODY on category archvies
+	elseif ( is_category() ) {
+		$cat = $wp_query->get_queried_object();
+		$c[] = 'category';
+		$c[] = 'category-' . $cat->slug;
+	}
+
+	// Tag name classes for BODY on tag archives
+	elseif ( is_tag() ) {
+		$tags = $wp_query->get_queried_object();
+		$c[] = 'tag';
+		$c[] = 'tag-' . $tags->slug;
+	}
+
+	// Page author for BODY on 'pages'
+	elseif ( is_page() ) {
+		$pageID = $wp_query->post->ID;
+		$page_children = wp_list_pages("child_of=$pageID&echo=0");
+		the_post();
+		$c[] = 'page pageid-' . $pageID;
+		$c[] = 'page-author-' . sanitize_title_with_dashes(strtolower(get_the_author('login')));
+		// Checks to see if the page has children and/or is a child page; props to Adam
+		if ( $page_children )
+			$c[] = 'page-parent';
+		if ( $wp_query->post->post_parent )
+			$c[] = 'page-child parent-pageid-' . $wp_query->post->post_parent;
+		if ( is_page_template() ) // Hat tip to Ian, themeshaper.com
+			$c[] = 'page-template page-template-' . str_replace( '.php', '-php', get_post_meta( $pageID, '_wp_page_template', true ) );
+		rewind_posts();
+	}
+
+	// Search classes for results or no results
+	elseif ( is_search() ) {
+		the_post();
+		if ( have_posts() ) {
+			$c[] = 'search-results';
+		} else {
+			$c[] = 'search-no-results';
+		}
+		rewind_posts();
+	}
+
+	// For when a visitor is logged in while browsing
+	if ( $current_user->ID )
+		$c[] = 'loggedin';
+
+	// Paged classes; for 'page X' classes of index, single, etc.
+	if ( ( ( $page = $wp_query->get('paged') ) || ( $page = $wp_query->get('page') ) ) && $page > 1 ) {
+		$c[] = 'paged-' . $page;
+		if ( is_single() ) {
+			$c[] = 'single-paged-' . $page;
+		} elseif ( is_page() ) {
+			$c[] = 'page-paged-' . $page;
+		} elseif ( is_category() ) {
+			$c[] = 'category-paged-' . $page;
+		} elseif ( is_tag() ) {
+			$c[] = 'tag-paged-' . $page;
+		} elseif ( is_date() ) {
+			$c[] = 'date-paged-' . $page;
+		} elseif ( is_author() ) {
+			$c[] = 'author-paged-' . $page;
+		} elseif ( is_search() ) {
+			$c[] = 'search-paged-' . $page;
+		}
+	}
+
+	// Separates classes with a single space, collates classes for BODY
+	$c = join( ' ', apply_filters( 'body_class',  $c ) ); // Available filter: body_class
+
+	// And tada!
+	return $print ? print($c) : $c;
+}
+
+// Generates semantic classes for each post DIV element. Edited from original code: moved static hentry classname out of function.
+function sandbox_post_class( $print = true ) {
+	global $post, $sandbox_post_alt;
+
+	// gets 'alt' for every other post DIV, describes the post type and p[n]
+	$c = array( "p$sandbox_post_alt", $post->post_type, $post->post_status );
+
+	// Author for the post queried
+	$c[] = 'author-' . sanitize_title_with_dashes(strtolower(get_the_author('login')));
+
+	// Category for the post queried
+	foreach ( (array) get_the_category() as $cat )
+		$c[] = 'category-' . $cat->slug;
+
+	// Tags for the post queried; if not tagged, use .untagged
+	if ( get_the_tags() == null ) {
+		$c[] = 'untagged';
+	} else {
+		foreach ( (array) get_the_tags() as $tag )
+			$c[] = 'tag-' . $tag->slug;
+	}
+
+	// For password-protected posts
+	if ( $post->post_password )
+		$c[] = 'protected';
+
+	// Applies the time- and date-based classes (below) to post DIV
+	sandbox_date_classes( mysql2date( 'U', $post->post_date ), $c );
+
+	// If it's the other to the every, then add 'alt' class
+	if ( ++$sandbox_post_alt % 2 )
+		$c[] = 'alt';
+
+	// Separates classes with a single space, collates classes for post DIV
+	$c = join( ' ', apply_filters( 'post_class', $c ) ); // Available filter: post_class
+
+	// And tada!
+	return $print ? print($c) : $c;
+}
+
+
+// Define the num val for 'alt' classes (in post DIV and comment LI)
+$sandbox_post_alt = 1;
+
+// Generates semantic classes for each comment LI element
+function sandbox_comment_class( $print = true ) {
+	global $comment, $post, $sandbox_comment_alt;
+
+	// Collects the comment type (comment, trackback),
+	$c = array( $comment->comment_type );
+
+	// Counts trackbacks (t[n]) or comments (c[n])
+	if ( $comment->comment_type == 'comment' ) {
+		$c[] = "c$sandbox_comment_alt";
+	} else {
+		$c[] = "t$sandbox_comment_alt";
+	}
+
+	// If the comment author has an id (registered), then print the log in name
+	if ( $comment->user_id > 0 ) {
+		$user = get_userdata($comment->user_id);
+		// For all registered users, 'byuser'; to specificy the registered user, 'commentauthor+[log in name]'
+		$c[] = 'byuser comment-author-' . sanitize_title_with_dashes(strtolower( $user->user_login ));
+		// For comment authors who are the author of the post
+		if ( $comment->user_id === $post->post_author )
+			$c[] = 'bypostauthor';
+	}
+
+	// If it's the other to the every, then add 'alt' class; collects time- and date-based classes
+	sandbox_date_classes( mysql2date( 'U', $comment->comment_date ), $c, 'c-' );
+	if ( ++$sandbox_comment_alt % 2 )
+		$c[] = 'alt';
+
+	// Separates classes with a single space, collates classes for comment LI
+	$c = join( ' ', apply_filters( 'comment_class', $c ) ); // Available filter: comment_class
+
+	// Tada again!
+	return $print ? print($c) : $c;
+}
+
+// based on sandbox_comment_class() above
+function cfct_comment_class($print = true) {
+	global $comment, $post, $sandbox_comment_alt;
+
+	// Collects the comment type (comment, trackback),
+	$c = array( $comment->comment_type );
+
+	// If the comment author has an id (registered), then print the log in name
+	if ( $comment->user_id > 0 ) {
+		$user = get_userdata($comment->user_id);
+		// For all registered users, 'byuser'; to specificy the registered user, 'commentauthor+[log in name]'
+		$c[] = 'byuser comment-author-' . sanitize_title_with_dashes(strtolower( $user->user_login ));
+		// For comment authors who are the author of the post
+		if ( $comment->user_id === $post->post_author )
+			$c[] = 'bypostauthor';
+	}
+
+	// collects time- and date-based classes
+	sandbox_date_classes( mysql2date( 'U', $comment->comment_date ), $c, 'c-' );
+	// Separates classes with a single space, collates classes for comment DIV
+	$c = join( ' ', apply_filters( 'comment_class', $c ) ); // Available filter: comment_class
+
+	// Tada again!
+	return $print ? print($c) : $c;
+}
+
+// based on sandbox_comment_class() above
+function cfct_comment_list_class($print = true) {
+	global $comment, $post, $sandbox_comment_alt;
+
+	// Counts trackbacks (t[n]) or comments (c[n])
+	if ( $comment->comment_type == 'comment' ) {
+		$c[] = "c$sandbox_comment_alt";
+	} else {
+		$c[] = "t$sandbox_comment_alt";
+	}
+
+	// If it's the other to the every, then add 'alt' class
+	if ( ++$sandbox_comment_alt % 2 )
+		$c[] = 'alt';
+
+	// Separates classes with a single space, collates classes for comment LI
+	$c = join( ' ', apply_filters( 'comment_list_class', $c ) ); // Available filter: comment_list_class
+
+	// Tada again!
+	return $print ? print($c) : $c;
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_carrington/templates.php b/wp-content/themes/vanilla/_carrington/templates.php
new file mode 100644
index 0000000000000000000000000000000000000000..2cb9b69fba45a7ceb44a3e4fc8ca935abe7e9e67
--- /dev/null
+++ b/wp-content/themes/vanilla/_carrington/templates.php
@@ -0,0 +1,106 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function cfct_page($file = '') {
+	if (empty($file)) {
+		$file = cfct_default_file('pages');
+	}
+	cfct_template_file('pages', $file);
+}
+
+/* ========================================
+   General
+   ======================================== */
+
+function cfct_header() {
+	$file = cfct_choose_general_template('header');
+	cfct_template_file('header', $file);
+}
+
+function cfct_footer() {
+	$file = cfct_choose_general_template('footer');
+	cfct_template_file('footer', $file);
+}
+
+function cfct_sidebar() {
+	$file = cfct_choose_general_template('sidebar');
+	cfct_template_file('sidebar', $file);
+}
+
+function cfct_posts() {
+	$file = cfct_choose_general_template('posts');
+	cfct_template_file('posts', $file);
+}
+
+function cfct_single() {
+	$file = cfct_choose_general_template('single');
+	cfct_template_file('single', $file);
+}
+
+function cfct_loop() {
+	$file = cfct_choose_general_template('loop');
+	cfct_template_file('loop', $file);
+}
+
+/* ========================================
+   Content
+   ======================================== */
+
+function cfct_content() {
+	$file = cfct_choose_content_template();
+	cfct_template_file('content', $file);
+}
+
+function cfct_excerpt() {
+	$file = cfct_choose_content_template('excerpt');
+	cfct_template_file('excerpt', $file);
+}
+
+/* ========================================
+   Comments
+   ======================================== */
+
+function cfct_comments() {
+	$file = cfct_choose_general_template('comments');
+	cfct_template_file('comments', $file);
+}
+
+function cfct_comment() {
+	$file = cfct_choose_comment_template();
+	cfct_template_file('comment', $file);
+}
+
+/* ========================================
+   Other
+   ======================================== */
+
+function cfct_form($name = '') {
+	cfct_template_file('forms', $name);
+}
+
+function cfct_misc($name = '') {
+	cfct_template_file('misc', $name);
+}
+
+function cfct_error($name = '') {
+	cfct_template_file('error', $name);
+}
+
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_carrington/utility.php b/wp-content/themes/vanilla/_carrington/utility.php
new file mode 100644
index 0000000000000000000000000000000000000000..4740240cd4f5964909611ef2c69a9ec51f0b444c
--- /dev/null
+++ b/wp-content/themes/vanilla/_carrington/utility.php
@@ -0,0 +1,702 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function cfct_die($str = '') {
+	if (!empty($str)) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		include(CFCT_PATH.$set.'error/exit.php');
+		die();
+	}
+}
+
+function cfct_banner($str = '') {
+	if (!empty($str)) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		include(CFCT_PATH.$set.'misc/banner.php');
+	}
+}
+
+function cfct_get_option($name) {
+	$defaults = array(
+		'cfct_list_limit_1' => CFCT_HOME_LIST_LENGTH
+		, 'cfct_latest_limit_1' => CFCT_HOME_LATEST_LENGTH
+		, 'cfct_list_limit_2' => CFCT_HOME_LIST_LENGTH
+		, 'cfct_latest_limit_2' => CFCT_HOME_LATEST_LENGTH
+		, 'cfct_list_limit_3' => CFCT_HOME_LIST_LENGTH
+		, 'cfct_latest_limit_3' => CFCT_HOME_LATEST_LENGTH
+		, 'cfct_ajax_load' => 'yes'
+		, 'cfct_credit' => 'yes'
+	);
+	$value = get_option($name);
+	if ($value == '' && isset($defaults[$name])) {
+		$value = $defaults[$name];
+	}
+	return $value;
+}
+
+function cfct_load_plugins() {
+	// load universal plugins
+	$files = cfct_files(CFCT_PATH.'plugins');
+	foreach ($files as $file) {
+		include(CFCT_PATH.'plugins/'.$file);
+	}
+	// load template set-specific plugins
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	$files = cfct_files(CFCT_PATH.$set.'plugins');
+	foreach ($files as $file) {
+		include(CFCT_PATH.$set.'plugins/'.$file);
+	}
+}
+
+function cfct_default_file($dir) {
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	$fancy = $dir.'-default.php';
+	file_exists(CFCT_PATH.$set.$dir.'/'.$fancy) ? $default = $fancy : $default = 'default.php';
+	return $default;
+}
+
+function cfct_context() {
+	$context = 'home';
+	if (is_page()) {
+		$context = 'page';
+	}
+	else if (is_single()) {
+		$context = 'single';
+	}
+	else if (is_category()) {
+		$context = 'category';
+	}
+	else if (is_tag()) {
+		$context = 'tag';
+	}
+	else if (is_author()) {
+		$context = 'author';
+	}
+	else if (is_archive()) {
+// possible future abstraction for:
+// 	is_month()
+// 	is_year()
+// 	is_day()
+		$context = 'archive';
+	}
+	else if (is_search()) {
+		$context = 'search';
+	}
+	else if (is_home()) {
+		$context = 'home';
+		// TODO - check page #
+	}
+	else if (is_404()) {
+		$context = '404';
+	}
+	return apply_filters('cfct_context', $context);
+}
+
+/**
+ * @param $template = folder name of file
+ * @param $type = file name of file
+ * @param $keys = keys that could be used for additional filename params
+ * returns false if file does not exist
+ *
+ */
+function cfct_filename($dir, $type = 'default', $keys = array()) {
+	switch ($type) {
+		case 'author':
+			if (count($keys)) {
+				$file = 'author-'.$keys[0];
+			}
+			else {
+				$file = 'author';
+			}
+			break;
+		case 'category':
+			if (count($keys)) {
+				$file = 'cat-'.$keys[0];
+			}
+			else {
+				$file = 'category';
+			}
+			break;
+		case 'tag':
+			if (count($keys)) {
+				$file = 'tag-'.$keys[0];
+			}
+			else {
+				$file = 'tag';
+			}
+			break;
+		case 'meta':
+			if (count($keys)) {
+				foreach ($keys as $k => $v) {
+					if (!empty($v)) {
+						$file = 'meta-'.$k.'-'.$v;
+					}
+					else {
+						$file = 'meta-'.$k;
+					}
+					break;
+				}
+			}
+			break;
+		case 'user':
+			if (count($keys)) {
+				$file = 'user-'.$keys[0];
+			}
+			break;
+		case 'role':
+			if (count($keys)) {
+				$file = 'role-'.$keys[0];
+			}
+			break;
+		case 'parent':
+			if (count($keys)) {
+				$file = 'parent-'.$keys[0];
+			}
+			break;
+		default:
+		// handles single, etc.
+			$file = $type;
+	}
+	// fallback for category, author, tag, etc.
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	$path = CFCT_PATH.$set.$dir.'/'.$file.'.php';
+	if (!file_exists($path)) {
+		switch ($type) {
+			case 'author':
+			case 'category':
+			case 'tag':
+				$archive_file = CFCT_PATH.$set.$dir.'/archive.php';
+				if (file_exists($archive_file)) {
+					$path = $archive_file;
+				}
+		}
+	}
+	$default = CFCT_PATH.$set.$dir.'/'.cfct_default_file($dir);
+	if (file_exists($path)) {
+		$path = $path;
+	}
+	else if (file_exists($default)) {
+		$path = $default;
+	}
+	else {
+		$path = false;
+	}
+	return apply_filters('cfct_filename', $path);
+}
+
+function cfct_template($dir, $keys = array()) {
+	$context = cfct_context();
+	$file = cfct_filename($dir, $context, $keys);
+	if ($file) {
+		include($file);
+	}
+	else {
+		cfct_die('Error loading '.$dir.' '.__LINE__);
+	}
+}
+
+function cfct_template_file($dir, $file) {
+	$path = '';
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	if (!empty($file)) {
+		$file = basename($file, '.php');
+		$path = CFCT_PATH.$set.$dir.'/'.$file.'.php';
+	}
+	if (file_exists($path)) {
+		
+		// Alister - if there is a way to dynamically load PHPTAL template components, do it here...
+		include($path);
+	}
+	else {
+		cfct_die('Error loading '.$file.' '.__LINE__);
+	}
+}
+
+/* ========================================
+   General Template Selection
+   ======================================== */
+
+function cfct_choose_general_template($dir) {
+	$exec_order = array(
+		'author'
+		, 'role'
+		, 'category'
+		, 'tag'
+		, 'default'
+	);
+	$new_exec_order = apply_filters('cfct_general_match_order', $exec_order);
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	$files = cfct_files(CFCT_PATH.$set.$dir);
+	foreach ($new_exec_order as $func) {
+		$func_name = 'cfct_choose_general_template_'.$func;
+		if (function_exists($func_name) && in_array($func, $exec_order)) {
+			$filename = $func_name($dir, $files);
+			if ($filename != false) {
+				break;
+			}
+		}
+	}
+	return apply_filters('cfct_choose_general_template', $filename);
+}
+
+function cfct_choose_general_template_author($dir, $files) {
+	$files = cfct_author_templates($dir, $files);
+	if (count($files)) {
+		$username = get_query_var('author_name');
+		$filename = 'author-'.$username.'.php';
+		if (in_array($filename, $files)) {
+			$keys = array($username);
+			return cfct_filename($dir, 'author', $keys);
+		}
+ 	}
+	return false;
+}
+
+function cfct_choose_general_template_category($dir, $files) {
+	$files = cfct_cat_templates($dir, $files);
+	if (count($files)) {
+		global $cat;
+		$slug = cfct_cat_id_to_slug($cat);
+		if (in_array('cat-'.$slug.'.php', $files)) {
+			$keys = array($slug);
+			return cfct_filename($dir, 'category', $keys);
+		}
+ 	}
+	return false;
+}
+
+function cfct_choose_general_template_tag($dir, $files) {
+	$files = cfct_tag_templates($dir, $files);
+	if (count($files)) {
+		$tag = get_query_var('tag');
+		if (in_array('tag-'.$tag.'.php', $files)) {
+			$keys = array($tag);
+			return cfct_filename($dir, 'tag', $keys);
+		}
+ 	}
+	return false;
+}
+
+function cfct_choose_general_template_role($dir, $files) {
+	$files = cfct_role_templates($dir, $files);
+	if (count($files)) {
+		$username = get_query_var('author_name');
+		$user = new WP_User(cfct_username_to_id($username));
+		if (!empty($user->user_login)) {
+			if (count($user->roles)) {
+				foreach ($user->roles as $role) {
+					$role_file = 'role-'.$role.'.php';
+					if (in_array($role_file, $files)) {
+						return $role_file;
+					}
+				}
+			}
+		}
+ 	}
+	return false;
+}
+
+function cfct_choose_general_template_default($dir, $files) {
+	$context = cfct_context();
+	return cfct_filename($dir, $context);
+}
+
+/* ========================================
+   Content Template Selection
+   ======================================== */
+   
+function cfct_choose_content_template($type = 'content') {
+	$exec_order = array(
+		'author'
+		, 'meta'
+		, 'category'
+		, 'role'
+		, 'tag'
+		, 'parent'
+		, 'default'
+	);
+	$new_exec_order = apply_filters('cfct_content_match_order', $exec_order);
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	$files = cfct_files(CFCT_PATH.$set.$type);
+	foreach ($new_exec_order as $func) {
+		$func_name = 'cfct_choose_content_template_'.$func;
+		if (function_exists($func_name) && in_array($func, $exec_order)) {
+			$filename = $func_name($type, $files);
+			if ($filename != false) {
+				break;
+			}
+		}
+	}
+	return apply_filters('cfct_choose_content_template', $filename);
+}
+
+function cfct_choose_content_template_author($type = 'content', $files = null) {
+	$files = cfct_author_templates($type, $files);
+	if (count($files)) {
+		$author = get_the_author_login();
+		$file = 'author-'.$author.'.php';
+		if (in_array($file, $files)) {
+			$keys = array($author);
+			return cfct_filename($type, 'author', $keys);
+		}
+	}
+	return false;
+}
+
+function cfct_choose_content_template_meta($type = 'content', $files = null) {
+	global $post;
+	$files = cfct_meta_templates($type, $files);
+	if (count($files)) {
+		$meta = get_post_custom($post->ID);
+		if (count($meta)) {
+// check key, value matches first
+			foreach ($meta as $k => $v) {
+				$val = $v[0];
+				$file = 'meta-'.$k.'-'.$val.'.php';
+				if (in_array($file, $files)) {
+					$keys = array($k => $val);
+					return cfct_filename($type, 'meta', $keys);
+				}
+			}
+// check key matches only
+			foreach ($meta as $k => $v) {
+				$file = 'meta-'.$k.'.php';
+				if (in_array($file, $files)) {
+					$keys = array($k => '');
+					return cfct_filename($type, 'meta', $keys);
+				}
+			}
+		}
+	}
+	return false;
+}
+
+function cfct_choose_content_template_category($type = 'content', $files = null) {
+	$files = cfct_cat_templates($type, $files);
+	if (count($files)) {
+		foreach ($files as $file) {
+			$cat_id = cfct_cat_filename_to_id($file);
+			if (in_category($cat_id)) {
+				$keys = array(cfct_cat_filename_to_slug($file));
+				return cfct_filename($type, 'category', $keys);
+			}
+		}
+	}
+	return false;
+}
+
+function cfct_choose_content_template_role($type = 'content', $files = null) {
+	$files = cfct_role_templates($type, $files);
+	if (count($files)) {
+		$user = new WP_User(get_the_author_ID());
+		if (count($user->roles)) {
+			foreach ($files as $file) {
+				foreach ($user->roles as $role) {
+					if (cfct_role_filename_to_name($file) == $role) {
+						$keys = array($role);
+						return cfct_filename($type, 'role', $keys);
+					}
+				}
+			}
+		}
+	}
+	return false;
+}
+
+function cfct_choose_content_template_tag($type = 'content', $files = null) {
+	global $post;
+	$files = cfct_tag_templates($type, $files);
+	if (count($files)) {
+		$tags = get_the_tags($post->ID);
+		if (count($tags)) {
+			foreach ($files as $file) {
+				foreach ($tags as $tag) {
+					if ($tag->slug == cfct_tag_filename_to_name($file)) {
+						$keys = array($tag->slug);
+						return cfct_filename($type, 'tag', $keys);
+					}
+				}
+			}
+		}
+	}
+	return false;
+}
+
+function cfct_choose_content_template_parent($type = 'content', $files = null) {
+	global $post;
+	$files = cfct_parent_templates($type, $files);
+	if (count($files) && $post->post_parent > 0) {
+		$parent = cfct_post_id_to_slug($post->post_parent);
+		$file = 'parent-'.$parent.'.php';
+		if (in_array($file, $files)) {
+			$keys = array($parent);
+			return cfct_filename($type, 'parent', $keys);
+		}
+	}
+	return false;
+}
+
+function cfct_choose_content_template_default($type = 'content') {
+	$context = cfct_context();
+	return cfct_filename($type, $context);
+}
+
+/* ========================================
+   Comment Template Selection
+   ======================================== */
+
+function cfct_choose_comment_template() {
+	$exec_order = array(
+		'ping'
+		, 'author'
+		, 'user'
+		, 'role'
+		, 'default'
+	);
+	$new_exec_order = apply_filters('cfct_comment_match_order', $exec_order);
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	$files = cfct_files(CFCT_PATH.$set.'comment');
+	foreach ($new_exec_order as $func) {
+		$func_name = 'cfct_choose_comment_template_'.$func;
+		if (function_exists($func_name) && in_array($func, $exec_order)) {
+			$filename = $func_name($files);
+			if ($filename != false) {
+				break;
+			}
+		}
+	}
+	return apply_filters('cfct_choose_comment_template', $filename);
+}
+
+function cfct_choose_comment_template_ping($files) {
+	global $comment;
+	switch ($comment->comment_type) {
+		case 'pingback':
+		case 'trackback':
+			return 'ping';
+			break;
+	}
+	return false;
+}
+
+function cfct_choose_comment_template_author($files) {
+	global $post, $comment;
+	if (!empty($comment->user_id) && $comment->user_id == $post->post_author && in_array('author.php', $files)) {
+		return 'author';
+ 	}
+	return false;
+}
+
+function cfct_choose_comment_template_user($files) {
+	global $comment;
+	$files = cfct_comment_templates('user', $files);
+	if (count($files) && !empty($comment->user_id)) {
+		$user = new WP_User($comment->user_id);
+		if (!empty($user->user_login)) {
+			$user_file = 'user-'.$user->user_login.'.php';
+			if (in_array($user_file, $files)) {
+				return $user_file;
+			}
+		}
+ 	}
+	return false;
+}
+
+function cfct_choose_comment_template_role($files) {
+	global $comment;
+	$files = cfct_comment_templates('user', $files);
+	if (count($files) && !empty($comment->user_id)) {
+		$user = new WP_User($comment->user_id);
+		if (!empty($user->user_login)) {
+			if (count($user->roles)) {
+				foreach ($user->roles as $role) {
+					$role_file = 'role-'.$role.'.php';
+					if (in_array($role_file, $files)) {
+						return $role_file;
+					}
+				}
+			}
+		}
+ 	}
+	return false;
+}
+
+function cfct_choose_comment_template_default($files) {
+	return cfct_default_file('comment');
+}
+
+/* ========================================
+   Files
+   ======================================== */
+
+function cfct_files($path) {
+	$files = wp_cache_get('cfct_files_'.$path, 'cfct');
+	if ($files) {
+		return $files;
+	}
+	$files = array();
+	if ($handle = opendir($path)) {
+		while (false !== ($file = readdir($handle))) {
+			$path = trailingslashit($path);
+			if (is_file($path.$file) && strtolower(substr($file, -4, 4)) == ".php") {
+				$files[] = $file;
+			}
+		}
+	}
+	wp_cache_set('cfct_files_'.$path, $files, 'cfct', 3600);
+	return $files;
+}
+
+function cfct_filter_files($files = array(), $prefix = '') {
+	$matches = array();
+	if (count($files)) {
+		foreach ($files as $file) {
+			if (substr($file, 0, strlen($prefix)) == $prefix) {
+				$matches[] = $file;
+			}
+		}
+	}
+	return $matches;
+}
+
+function cfct_meta_templates($dir, $files = null) {
+	if (is_null($files)) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		$files = cfct_files(CFCT_PATH.$set.$dir);
+	}
+	$matches = cfct_filter_files($files, 'meta-');
+	return apply_filters('cfct_meta_templates', $matches);
+}
+
+function cfct_cat_templates($dir, $files = null) {
+	if (is_null($files)) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		$files = cfct_files(CFCT_PATH.$set.$dir);
+	}
+	$matches = cfct_filter_files($files, 'cat-');
+	return apply_filters('cfct_cat_templates', $matches);
+}
+
+function cfct_tag_templates($dir, $files = null) {
+	if (is_null($files)) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		$files = cfct_files(CFCT_PATH.$set.$dir);
+	}
+	$matches = cfct_filter_files($files, 'tag-');
+	return apply_filters('cfct_tag_templates', $matches);
+}
+
+function cfct_author_templates($dir, $files = null) {
+	if (is_null($files)) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		$files = cfct_files(CFCT_PATH.$set.$dir);
+	}
+	$matches = cfct_filter_files($files, 'author-');
+	return apply_filters('cfct_author_templates', $matches);
+}
+
+function cfct_role_templates($dir, $files = null) {
+	if (is_null($files)) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		$files = cfct_files(CFCT_PATH.$set.$dir);
+	}
+	$matches = cfct_filter_files($files, 'role-');
+	return apply_filters('cfct_role_templates', $matches);
+}
+
+function cfct_parent_templates($dir, $files = null) {
+	if (is_null($files)) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		$files = cfct_files(CFCT_PATH.$set.$dir);
+	}
+	$matches = cfct_filter_files($files, 'parent-');
+	return apply_filters('cfct_parent_templates', $matches);
+}
+
+function cfct_comment_templates($type, $files = false) {
+	if (!$files) {
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		$files = cfct_files(CFCT_PATH.$set.'comment');
+	}
+	$matches = array();
+	switch ($type) {
+		case 'user':
+			$matches = cfct_filter_files($files, 'user-');
+			break;
+		case 'role':
+			$matches = cfct_filter_files($files, 'role-');
+			break;
+	}
+	return apply_filters('cfct_comment_templates', $matches);
+}
+
+/* ========================================
+   Utility Functions
+   ======================================== */
+
+function cfct_cat_filename_to_id($file) {
+	$cat = str_replace(array('cat-', '.php'), '', $file);
+	$cat = get_category_by_slug($cat);
+	return $cat->cat_ID;
+}
+
+function cfct_cat_filename_to_name($file) {
+	$cat = str_replace(array('cat-', '.php'), '', $file);
+	$cat = get_category_by_slug($cat);
+	return $cat->name;
+}
+
+function cfct_cat_filename_to_slug($file) {
+	return str_replace(array('cat-', '.php'), '', $file);
+}
+
+function cfct_cat_id_to_slug($id) {
+	$cat = &get_category($id);
+	return $cat->slug;
+}
+
+function cfct_username_to_id($username) {
+	return get_profile('ID', $username);
+}
+
+function cfct_tag_filename_to_name($file) {
+	return str_replace(array('tag-', '.php'), '', $file);
+}
+
+function cfct_author_filename_to_name($file) {
+	return str_replace(array('author-', '.php'), '', $file);
+}
+
+function cfct_role_filename_to_name($file) {
+	return str_replace(array('role-', '.php'), '', $file);
+}
+
+function cfct_hcard_comment_author_link($str) {
+	return str_replace('<a href', "<a class='fn url' href", $str);
+}
+function cfct_hcard_ping_author_link($str) {
+	return str_replace('<a href', "<a rel='bookmark' class='fn url' href", $str);
+}
+
+function cfct_post_id_to_slug($id) {
+	$post = get_post($id);
+	return $post->post_name;
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/admin_actions.php b/wp-content/themes/vanilla/_custom-widgets/admin_actions.php
new file mode 100755
index 0000000000000000000000000000000000000000..ea8bd263e2e65c7a6d5d0bc90dda52319a7f97ed
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/admin_actions.php
@@ -0,0 +1,134 @@
+<?php
+
+global $wp_registered_sidebars, $wp_registered_widgets, $wp_registered_widget_controls;
+
+
+// Compute current admin sub-page
+$_POST['act'] = !empty($_POST['act']) ? $_POST['act'] : (!empty($_GET['act']) ? $_GET['act'] : false );
+
+
+// Do action
+switch($_POST['act']){
+	
+	default:
+		// Default action | Save main plugin options
+		
+		echo '<div class="updated"><p><strong>', _e('Options saved.', 'mt_trans_domain' ) ,'</strong></p></div>';
+		
+			
+		break;
+	
+	case 'save_ext':
+		
+		if(isset($_GET['id']) && !empty($wp_registered_widgets[$_GET['id']])){
+			
+			if(empty($this->widgets[$_GET['id']]))	$this->widgets[$_GET['id']] = $this->info['blank'];
+			
+			$opts = array('is_home', 'is_single', 'is_sticky', 'comments_open', 'is_page', 'is_category', 'is_tag', 'is_archive', 'is_search', 'is_404', 'is_preview');
+			
+			foreach($opts as $opt)
+				$this->widgets[$_GET['id']]['opts'][$opt] = isset($_POST['opt'][$opt]);
+			
+			update_option('slayer_widgets', $this->widgets);
+			
+			echo '<div class="updated"><p><strong>', _e('Options saved.', 'mt_trans_domain' ) ,'</strong></p></div>';
+			
+			}
+				
+		
+		break;
+	
+	case 'edit':
+		
+		if(isset($_GET['id']) && !empty($wp_registered_widgets[$_GET['id']])){
+			
+			if(empty($this->widgets[$_GET['id']]))	$this->widgets[$_GET['id']] = $this->info['blank'];
+			
+			if(!empty($_POST['posts'])){
+				
+				foreach($_POST['posts'] as $post){
+					
+					$title = explode('_', $post);
+					$id = array_shift($title);
+					$title = implode('_', $title);
+					
+					$this->widgets[$_GET['id']]['posts'][$id] = $title;
+					
+					}
+				
+				}
+			
+			if(!empty($_POST['authors'])){
+				foreach($_POST['authors'] as $author){
+					
+					$title = explode('_', $author);
+					$id = array_shift($title);
+					$title = implode('_', $title);
+					
+					$this->widgets[$_GET['id']]['authors'][$id] = $title;
+					
+					}
+				
+				}
+
+			if(!empty($_POST['pages'])){
+				
+				foreach($_POST['pages'] as $post){
+					
+					$title = explode('_', $post);
+					$id = array_shift($title);
+					$title = implode('_', $title);
+					
+					$this->widgets[$_GET['id']]['pages'][$id] = $title;
+					
+					}
+				
+				}
+				
+				
+			if(!empty($_POST['categories'])){
+				
+				foreach($_POST['categories'] as $post){
+					
+					$title = explode('_', $post);
+					$id = array_shift($title);
+					$title = implode('_', $title);
+					
+					$this->widgets[$_GET['id']]['categories'][$id] = $title;
+					
+					}
+				
+				}
+				
+				
+			if(!empty($_POST['tags'])){
+				
+				foreach($_POST['tags'] as $post){
+					
+					$title = explode('_', $post);
+					$id = array_shift($title);
+					$title = implode('_', $title);
+					
+					$this->widgets[$_GET['id']]['tags'][$id] = $title;
+					
+					}
+				
+				}
+				
+			
+			
+			update_option('slayer_widgets', $this->widgets);
+			
+			
+			echo '<div class="updated"><p><strong>Widget saved</strong></p></div>';
+			
+			
+			}
+
+		break;
+		
+
+	}
+
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/admin_css.php b/wp-content/themes/vanilla/_custom-widgets/admin_css.php
new file mode 100755
index 0000000000000000000000000000000000000000..66585e6282b8d81a7dcaf9d229d3bacb10e27af9
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/admin_css.php
@@ -0,0 +1,23 @@
+.slayer_list{list-style:none;padding:5px;margin:0px;display:block;line-height:normal;background:#FFF;border:1px solid #C6D9E9;overflow:hidden;}
+.slayer_list li {margin:5px;padding:5px;border:1px solid #F0F0F0;float:left;width:30% !important;}
+.slayer_list li ul{list-style:none;padding:0px;height:225px;overflow:auto;}
+.slayer_list li li{float:none;width:auto !important;height:auto;overflow:visible;}
+.slayer_list h4{margin:0px;padding:5px;}
+.slayer_list span{float:right;}
+.slayer_main_table{width:100%;background:#E4F2FD;padding:5px;margin:10px 0px;border:1px solid #C6D9E9;}
+.slayer_main_table table{background:#FFF;}
+.slayer_post_list {background:#FFF;height:400px;margin:10px 10px 10px 0px;border:1px solid #C6D9E9;overflow:auto;list-style:none;padding:0px;}
+.slayer_post_list li{padding:5px;margin:5px 5px;border-bottom:1px solid #C6D9E9;}
+.slayer_post_list li a,.slayer_post_list li a:visited{display:block;}
+.slayer_paypal{display:block;margin:10px 0px;text-align:center;}
+.not_registered{opacity:0.15;}
+.slayer_donate_wrapper{margin:10px 0px;}
+.rbet_checkbox div{position:relative;}
+.rbet_tip{display:none;position:absolute;background:url(<?php echo $this->info['url']; ?>/images/tip.gif) top left no-repeat;padding:5px 4px;width:242px;height:70px;left:-60px;top:-55px;z-index:2;line-height:135%;cursor:default;color:#2583AD;font-size:11px;font-weight:normal;}
+.rbet_tip_img{background:url(<?php echo $this->info['url']; ?>/images/help.gif) top left no-repeat;background-position:0px 15px;position:relative;padding:16px 0px 5px 0px;margin:0px 5px;}
+.rbet_tip_img ,link{padding:16px 16px 5px 0px;outline:none;}
+
+#rbet_extended h3 .rbet_tip{left:auto;margin-left:-60px;font-size:10px;}
+#rbet_extended h3 .rbet_tip_img{background-image:url(<?php echo $this->info['url']; ?>/images/help_blue.gif);}
+#rbet_extended h3 img{vertical-align:middle;}
+#rbet_extended table{width:100%;}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/admin_template_edit.php b/wp-content/themes/vanilla/_custom-widgets/admin_template_edit.php
new file mode 100755
index 0000000000000000000000000000000000000000..939672beeee576dd70267a3b62cb37bde3fb8613
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/admin_template_edit.php
@@ -0,0 +1,230 @@
+<?php
+
+
+global $wp_registered_sidebars, $wp_registered_widgets, $wp_registered_widget_controls;
+
+
+
+if(!isset($_GET['id']) || empty($wp_registered_widgets[$_GET['id']]))
+	
+	echo '<div class="error"><p><strong>Error! Could not find widget.</strong></p></div>';
+	
+else {
+	
+	if(isset($_GET['reset_widget'])){
+		
+		$this->widgets[$_GET['id']] = $this->info['blank'];
+		
+		update_option(slayer_widgets,$this->widgets);
+		
+		}
+	
+	$url = $this->info['admin_url'] . '&amp;act=edit&amp;id=' . $_GET['id'];
+	
+	$widget = &$wp_registered_widgets[$_GET['id']];
+	
+	if(!empty($_GET['opt'])){
+	
+		echo '<h2><a href="', $this->info['admin_url'] ,'">Custom widgets</a> &raquo; <a href="',$url,'">', $widget['name'], '</a> &raquo; ' , $_GET['opt'] ,'</h2>';
+		
+		require(dirname(__FILE__) . '/show_in_' . $_GET['opt'] . '.php');
+		
+		}
+		
+	else
+		{
+		
+		echo '<h2><a href="', $this->info['admin_url'] ,'">Custom widgets</a> &raquo; ', $widget['name'],'</h2>';
+		
+		echo '<table class="form-table">';
+			echo '<tr>';
+				echo '<th scope="row" style="width:200px;">';
+					echo '<h3>Options</h3>';
+					echo '<div style="font-weight:normal;margin-bottom:20px;">Select where do you want this specific widget to show:</div>';
+					
+					echo '<ul style="margin:0px;padding:0px;font-weight:normal;list-style-position:inside;">';
+						echo '<li><strong>Posts</strong>: will only show if the user is viewing one of the posts in the list</li>';
+						echo '<li><strong>Pages</strong>: will only show if the user is viewing one of the pages in the list</li>';
+						echo '<li><strong>Categories</strong>: will only show if the user is viewing one of the categories in the list or a post that was filed under one of the specified categories.</li>';
+						echo '<li><strong>Tags</strong>: will only show if the user is viewing the specified tags page.</li>';
+echo '<li><strong>Authors</strong>: will only show if the user is viewing a page or post which was written by the specified author.</li>';
+					echo '</ul>';
+					
+					echo '<br /><a class="button" onclick="if(!confirm(\'Are you sure you want to reset this widget?\')) return false;" href="',$url,'&amp;reset_widget">Reset this widget</a>';
+					
+				echo '</th>';
+				echo '<td>';
+					echo '<ul class="metabox-holder">';
+						
+						if(empty($this->widgets[$_GET['id']]))	
+							$this->widgets[$_GET['id']] = $this->info['blank'];
+						
+						$has_limit = false;
+						
+						foreach($this->widgets[$_GET['id']] as $group => $data )
+							if(!empty($data))
+								if($group != 'opts')
+									$has_limit = true;
+								else
+									foreach($data as $opt)
+										if(!empty($opt)){
+											$has_limit = true;
+											break;
+											}
+						
+						foreach($this->info['blank'] as $group => $data )
+							if($group != 'opts') {
+							
+							$data = $this->widgets[$_GET['id']][$group];
+							
+							echo '<li style="float:left; margin-right:2em;"><div class="postbox">';
+							
+								echo '<h3 class="hndle">', $group ,' (<a href="',$url,'&amp;opt=', $group ,'">Edit</a>)</h3>';
+								
+								echo '<div class="inside" style="padding: 0 1em;"><ul>';
+									
+									$i = 0;
+									
+									if(!$data)
+										echo '<li>', $has_limit ? 'none' : 'all' ,'</li>';
+									else
+										foreach($data as $name){
+										
+											echo '<li><strong>' , ++$i , '.</strong> ' ;
+											
+												echo $name;
+											
+											echo '</li>';
+										
+											}
+								echo '</ul></div>';
+								
+							echo '</div></li>';
+							
+							}
+					
+					echo '</ul>';
+					
+							
+					echo '<form action="" method="post" style="clear:both;" class="metabox-holder"><div id="rbet_extended" class="postbox">';
+						
+						echo '<h3 class="hndle" style="margin:0;">Extended features (assign a widget to a specific WP template)';
+							
+							echo '<span class="rbet_tip_img">';
+								echo '<a class="link" onclick="return false;" href="', $v['url'] ,'"></a>';
+								echo '<span class="rbet_tip">';
+										echo 'The Conditional Tags can be used in your Template files to change what content is displayed and how that content is displayed on a particular page.';
+									echo '</span>';
+							echo '</span>';
+							
+						echo '</h3>';
+						
+						
+						$data = array(
+								
+							'is_home' => array(
+									'title' => 'Show Widget Only on Homepage',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#The_Main_Page',
+									'tip' => 'The widget is shown only on your blog\'s homepage using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#The_Main_Page">is_home()</a> tag',
+									),
+							'is_single' => array(
+									'title' => 'Show Widget on all posts',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#A_Single_Post_Page',
+									'tip' => 'The widget is shown when any post is displayed using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#A_Single_Post_Page">is_single()</a> tag',
+									),
+							'is_sticky' => array(
+									'title' => 'Show Widget only on Sticky posts',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#A_Sticky_Post',
+									'tip' => 'The widget is shown when any stickied page is displayed using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#A_Sticky_Post">is_sticky()</a> tag'
+									),
+							'comments_open' => array(
+									'title' => 'Show Widget on Posts/pages Where commenting is open',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#Any_Page_Containing_Posts',
+									'tip' => 'The widget is shown when any post is displayed where commenting is possible using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#Any_Page_Containing_Posts">comments_open()</a> tag'
+									),
+							'is_page' => array(
+									'title' => 'Show widget on all pages',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#A_PAGE_Page',
+									'tip' => 'The widget is shown when any page is displayed using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#A_PAGE_Page">is_page()</a> tag'
+									),
+						
+							'is_category' => array(
+									'title' => 'Show widget on all Categories',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#A_Category_Page',
+									'tip' => 'The widget is shown when any category is displayed using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#A_Category_Page">is_category()</a> tag'
+									),
+							'is_tag' => array(
+									'title' => 'Show widget on all Tag Pages',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#A_Tag_Page',
+									'tip' => 'The widget is shown when any Tag page is displayed using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#A_Tag_Page">is_tag()</a> tag'
+									),
+							'is_archive' => array(
+									'title' => 'Show widget on all Archive pages',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#Any_Archive_Page',
+									'tip' => 'The widget is shown when any type of Archive page is displayed using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#Any_Archive_Page">is_archive()</a> tag'
+									),
+							'is_search' => array(
+									'title' => 'Show widget on Search results',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#A_Search_Result_Page',
+									'tip' => 'The widget is shown on all search results using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#A_Search_Result_Page">is_search()</a> tag'
+									),
+							'is_404' => array(
+									'title' => 'Show widget on the 404 - Not found Error Page',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#A_404_Not_Found_Page',
+									'tip' => 'The widget is shown on the 404 - Not found error page using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#A_404_Not_Found_Page">is_404()</a> tag'
+									),
+							'is_preview' => array(
+									'title' => 'Show Widget for admin previews',
+									'url' => 'http://codex.wordpress.org/Conditional_Tags#A_Preview',
+									'tip' => 'The widget is shown when a single post being displayed is viewed in Draft mode using the <a onclick="window.open(this.href); return false;" href="http://codex.wordpress.org/Conditional_Tags#A_Preview">is_preview()</a>  tag'
+									)
+							);
+						
+						
+						echo '<table class="rbet_checkbox">';
+						
+							$i = 1 ;
+							echo '<tr>';
+							
+							foreach($data as $id => $v){
+								
+								//if($i === true)	echo '</tr><tr>';
+								
+								echo '<tr><td><label>';
+									echo '<input ', !empty($this->widgets[$_GET['id']]['opts'][$id]) ? 'checked="checked"' : false ,' type="checkbox" name="opt[',$id,']" value="1" /> ', $v['title'];
+									echo '<span class="rbet_tip_img">';
+										echo '<a class="link" onclick="return false;" href="', $v['url'] ,'"></a>';
+										echo '<span class="rbet_tip">';
+											echo $v['tip'];
+										echo '</span>';
+									echo '</span>';
+								echo '</label></td></tr>';
+								
+								//$i = $i ? false : true;
+								
+								}/*
+							if($i)	echo '<td></td>';
+							echo '</tr>';
+							*/
+						echo '</table>';
+						
+						echo '<input type="hidden" name="act" value="save_ext" />';
+						
+						echo '<p class="submit" style="padding:1em 2em;"><input type="submit" value="Save Changes" class="button-primary" /></p>';
+						
+					echo '</div></form>';
+					
+				echo '</td>';
+			
+			echo '</tr>';
+		
+		echo '</table>';
+		
+		} 
+	
+	echo '<script type="text/javascript">//<!--' , "\n" , file_get_contents(dirname(__FILE__) . '/javascript.js') , '//--></script>';
+	
+	} 
+	
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/admin_template_main.php b/wp-content/themes/vanilla/_custom-widgets/admin_template_main.php
new file mode 100755
index 0000000000000000000000000000000000000000..424da1e2ea553552ee75d67c80f417a53811e6ac
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/admin_template_main.php
@@ -0,0 +1,89 @@
+
+<h2>Custom widgets</h2>
+<table class="form-table">
+	<tr>
+		<th scope="row" style="width:200px;">
+			<h3>Widgets</h3>
+			<div style="font-weight:normal;margin-bottom:20px;">Select a widget from the list that you want to customize.</div>
+			
+			<h4>Legend</h4>
+			<div style="font-weight:normal;margin-top:10px;">
+				Blue text - normal widget <br/>
+				Red  text - customized widget
+			</div>
+			
+			<br/><br/>
+			
+			<a class="button" onclick="if(!confirm('Are you sure you want to reset all widgets?')) return false;" href="<?php echo $this->info['admin_url'] ?>&amp;reset_widgets">Reset all widgets</a>
+		</th>
+		<td>
+			<?php
+/*			
+<div id="postexcerpt" class="postbox " >
+<div class='handlediv'><br /></div><h3 class='hndle'><span>Excerpt</span></h3>
+<div class="inside">
+<label class="hidden" for="excerpt">Excerpt</label><textarea rows="1" cols="40" name="excerpt" tabindex="6" id="excerpt"></textarea>
+<p>Excerpts are optional hand-crafted summaries of your content. You can <a href="http://codex.wordpress.org/Template_Tags/the_excerpt" target="_blank">use them in your template</a></p>
+</div>
+</div>
+*/
+			
+			
+			
+				
+				global $wp_registered_sidebars, $wp_registered_widgets, $wp_registered_widget_controls;
+				
+				$sidebars = wp_get_sidebars_widgets();
+				
+				if(!$sidebars)
+					echo '<div class="slayer_list">No widgets registered. Please setup at least one widget via wordpress <a href="widgets.php">widgets control panel</a>(found under the Design tab)</div>';
+				else
+					{
+					echo '<ul class="metabox-holder">';
+					
+						foreach($sidebars as $sidebar_id => $widgets){
+							
+							echo '<li style="float:left; margin-right:2em;"><div class="postbox">';
+							
+								echo '<h3 class="hndle ', !empty($wp_registered_sidebars[$sidebar_id]['name']) ? false : 'not_registered' ,'"><span>',!empty($wp_registered_sidebars[$sidebar_id]['name']) ? $wp_registered_sidebars[$sidebar_id]['name'] : 'Not registered','</span></h3>';
+								
+								echo '<div class="inside" style="padding: 0 1em;"><ul>';
+									
+									foreach($widgets as $widget_id){
+										
+										$has_limit = false;
+										if(!empty($this->widgets[$widget_id]))
+											foreach($this->widgets[$widget_id] as $group => $data )
+												if(!empty($data))
+													if($group != 'opts'){
+														$has_limit = true;
+														break;
+														}
+													else
+														foreach($data as $opt)
+															if(!empty($opt)){
+																$has_limit = true;
+																break;
+																}
+										
+										echo '<li><a style="', $has_limit ? 'color:red;' : false ,'" href="',$this->info['admin_url'],'&amp;act=edit&amp;id=',$wp_registered_widgets[$widget_id]['id'],'">';
+										
+											echo !empty($wp_registered_widgets[$widget_id]['name']) ? $wp_registered_widgets[$widget_id]['name'] : $wp_registered_widgets[$widget_id]['id'];
+										
+										echo '</a></li>';
+									
+										}
+								echo '</ul></div>';
+								
+							echo '</div></li>';
+							
+							
+							}
+						
+					echo '</ul>';
+					}
+			?>
+			
+		</td>
+	</tr>
+</table>
diff --git a/wp-content/themes/vanilla/_custom-widgets/custom_widgets.php b/wp-content/themes/vanilla/_custom-widgets/custom_widgets.php
new file mode 100755
index 0000000000000000000000000000000000000000..494695789bceb63d304b579f395a40caa28dd0f2
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/custom_widgets.php
@@ -0,0 +1,216 @@
+<?php
+/*
+Description:  This plugin enables you to select which widgets appear on specific posts, pages, categories,author's posts and tag pages. By default, all widgets appear wherever the sidebar is loaded within your theme. With this plugin, you can configure where widgets are displayed on a per post or per <a href="http://codex.wordpress.org/Conditional_Tags" target ="_blank">WP Template</a>(Using conditional Tags) basis.
+Author: ThaSlayer
+Version: 1.2
+Author URI: http://www.thaslayer.com/
+*/
+
+
+
+	
+	/*
+	 * 
+	 * PHP Code by mucenica.bogdan@yahoo.com for ThaSlayer | Romania 2008
+	 *
+	 *
+	 * Creation date: October 14, 2008
+	 * Revision date: October 30, 2008
+	 *
+	*/
+
+class slayer_Custom_widgets{
+	
+	
+	/*
+	 * Contains information regarding the plugin
+	 * 
+	 * access public
+	 * type: array
+	 *
+	*/
+	var $info;
+	
+	
+	
+	/*
+	 * Object constructor
+	 *
+	*/
+	function slayer_Custom_widgets(){
+		
+		// Initialization
+		
+		
+		// Main plugin options
+		$this->info = array(
+			'admin_url'			=> '?page=' . (!empty($_GET['page']) ? $_GET['page'] : false),
+			'dir'				=> array_pop(explode("/", str_replace("\\", "/", dirname(__FILE__)))),
+			'posts_per_page'	=> 10,
+			'blank'				=> array(
+									'posts'			=> array(),
+									'pages'			=> array(),
+									'categories'	=> array(),
+									'tags'			=> array(),
+									'authors'		=> array(),
+									'opts'			=> array()
+								)
+			);
+		
+		if(isset($_GET['reset_widgets']))
+			update_option(slayer_widgets,array());
+		
+		// Compute option page link
+		$this->info['url'] =  get_bloginfo('template_directory') . '/' . $this->info['dir'];
+		
+		
+		// Compute plugin images link
+		$this->info['images'] = $this->info['url'] . '/images';
+		
+		$this->widgets = get_option('slayer_widgets');
+		$this->widgets = $this->widgets ? $this->widgets : array();
+		
+		add_action('get_header',	array(&$this, 'init'));
+		add_action('admin_head', 	array(&$this, 'add_admin_css'));
+		add_action('admin_menu', 	array(&$this, 'add_admin_menu'));
+		
+		}
+	
+	
+	/*
+	 * Style admin panel page through CSS head inseriton
+	 * 
+	*/
+	function add_admin_css(){
+		
+		echo '<style type="text/css">';
+			require( dirname(__FILE__) .'/admin_css.php');
+		echo '</style>';
+		
+		}
+	
+	
+	/*
+	 * Add new submeniu under the admin settings page
+	 * 
+	*/
+	function add_admin_menu() {
+	    
+	    //add_options_page('Custom widgets', 'Custom widgets', 8, __FILE__ , array(&$this, 'admin_page'));
+		add_theme_page("Custom Widgets", "Custom Widgets", 8, basename(__FILE__), array(&$this, 'admin_page'));
+	}
+
+	
+	/*
+	 * Render admin page controllers
+	 * 
+	*/
+	function admin_page() {
+		// If data was sent through POST, process it
+		if(!empty($_POST))
+			require(dirname(__FILE__) . '/admin_actions.php');
+			
+		// Compute current admin sub page
+		$_GET['act'] = !empty($_GET['act']) ? $_GET['act'] : 'main';
+		
+		// Find current page
+		if(!file_exists( $f = dirname(__FILE__) . '/admin_template_' . $_GET['act'] . '.php' ))	{
+			$_GET['act'] = 'main';
+			$f = dirname(__FILE__) . '/admin_template_' . $_GET['act'] . '.php';
+			}
+		
+		//Render current page
+		
+		echo '<div class="wrap">';
+		
+			require($f);
+		
+		echo '</div>';
+
+		}
+
+	
+	/*
+	 * Initialize the plugin
+	 * 
+	*/
+	function init(){
+		
+		global $wp_registered_widgets;
+		
+		foreach($this->widgets as $id => $data){
+			
+			$keep = false;
+			
+			if(!empty($data['opts']))
+				foreach($data['opts'] as $opt => $bool)
+					if($bool && $opt())
+						$keep = true;
+			
+			
+			if(is_single()){
+				
+				global $post;
+				
+				$categories = get_the_category($post->ID);
+				if($categories)
+					foreach( $categories as $category )
+						if(isset($data['categories'][$category->term_id]))
+							$keep = true;
+				
+				if(!empty($data['authors'][$post->post_author]))
+					$keep = true;
+				
+				$tags = get_the_tags($post->ID);
+				if($tags)
+					foreach( $tags as $tag )
+						if(isset($data['tags'][$tag->term_id]))
+							$keep = true;
+				
+				if(isset($data['posts'][$post->ID]))
+					$keep = true;
+				
+				}
+				
+			if(is_page()){
+				
+				global $post;
+				
+				if(isset($data['pages'][$post->ID]))
+					$keep = true;
+				}
+			
+			if(is_category()){
+				
+				if(isset($data['categories'][get_query_var('cat')]))
+					$keep = true;
+				
+				}
+			
+			if(is_tag()){
+				
+				if(is_array($data['tags']) && in_array(get_query_var('tag'), $data['tags']))
+					$keep = true;
+				
+				}
+			
+			if(!$keep)
+				unset($wp_registered_widgets[$id]);
+			
+			}
+		
+		}
+	
+		
+	}
+
+
+new slayer_Custom_widgets;
+
+
+
+// I'm done :)
+
+
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/images/help.gif b/wp-content/themes/vanilla/_custom-widgets/images/help.gif
new file mode 100755
index 0000000000000000000000000000000000000000..31c2166fee75ad55ff1726ba2f7228645b0e5a95
Binary files /dev/null and b/wp-content/themes/vanilla/_custom-widgets/images/help.gif differ
diff --git a/wp-content/themes/vanilla/_custom-widgets/images/help_blue.gif b/wp-content/themes/vanilla/_custom-widgets/images/help_blue.gif
new file mode 100755
index 0000000000000000000000000000000000000000..35b17948882dc97eca55a4d6593961a15e9abb86
Binary files /dev/null and b/wp-content/themes/vanilla/_custom-widgets/images/help_blue.gif differ
diff --git a/wp-content/themes/vanilla/_custom-widgets/images/tip.gif b/wp-content/themes/vanilla/_custom-widgets/images/tip.gif
new file mode 100755
index 0000000000000000000000000000000000000000..29106f23a33e2955aa96532712e5b6e30505d7f4
Binary files /dev/null and b/wp-content/themes/vanilla/_custom-widgets/images/tip.gif differ
diff --git a/wp-content/themes/vanilla/_custom-widgets/javascript.js b/wp-content/themes/vanilla/_custom-widgets/javascript.js
new file mode 100755
index 0000000000000000000000000000000000000000..8301f7805c90f4bfcc5a66ab3a10eed43a4a32b6
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/javascript.js
@@ -0,0 +1,47 @@
+jQuery(document).ready(function(){
+	
+	jQuery('.rbet_tip').each(function(){
+				
+				this.parentNode.rbet_tip = this;
+				
+				jQuery(this).hide();
+				
+				this.parentNode.onmouseover = function(){
+							
+						jQuery(this.rbet_tip).show();
+						
+					};
+				this.parentNode.onmouseout = function(){
+						
+						jQuery(this.rbet_tip).hide();
+						
+						
+					};
+				
+			}
+		);
+	
+	jQuery('.check-column-controller').each(function(){
+			
+			jQuery('tr',this.parentNode.parentNode.parentNode.tBodies[0]).each(function(){
+					this.style.cursor = 'pointer';
+					this.onclick = function(ev) {
+						ev = ev || window.event;
+						var target = ev.target || ev.srcElement;
+						if( !target.type || target.type != 'checkbox' )
+							this.firstChild.firstChild.checked = !this.firstChild.firstChild.checked;
+						}
+					}
+				);
+			
+			this.firstChild.onclick = function(){
+				jQuery('.check-column',this.parentNode.parentNode.parentNode.parentNode.tBodies[0]).each(function(){
+						this.firstChild.checked = !this.firstChild.checked;
+						}
+					);
+				}
+			}
+		);
+	
+	}
+);
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/show_in_authors.php b/wp-content/themes/vanilla/_custom-widgets/show_in_authors.php
new file mode 100755
index 0000000000000000000000000000000000000000..c62047b43de3c0cba7ee1099eee5875b896d127f
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/show_in_authors.php
@@ -0,0 +1,87 @@
+<?php 
+
+$url .= '&amp;opt='. $_GET['opt'] . '&amp;author_pag=' . ( $_GET['author_pag']  = ( !empty($_GET['author_pag']) ? $_GET['author_pag'] : 0 ) );
+
+if(!empty($_GET['delete_author']) && isset($this->widgets[$_GET['id']]['authors'][$_GET['delete_author']])){
+	
+	unset($this->widgets[$_GET['id']]['authors'][$_GET['delete_author']]);
+	
+	update_option('slayer_widgets', $this->widgets);
+	
+	}
+
+echo '<table class="slayer_main_table">';
+	
+	echo '<tr>';
+	
+		echo '<td style="width:50%;" valign="top">';
+		
+			echo '<h2>Show in posts with the folowing authors</h2>';
+			
+			echo '<ul class="slayer_post_list">';
+				
+				if(empty($this->widgets[$_GET['id']]['authors']))
+					echo '<li>all</li>';
+				else
+					{
+					
+					foreach($this->widgets[$_GET['id']]['authors'] as $id => $title){
+						
+						echo '<li><a onclick="if(!confirm(\'Are you sure you want to remove this author from the list?\')) return false;" href="', $url , '&amp;delete_author=' , $id ,'">', $title ,'</a></li>';
+						
+						}
+					
+					}
+			
+			echo '</ul>';
+			
+			echo 'Click a author to remove it.';
+		
+		echo '</td>';
+		
+		
+		echo '<td valign="top">';
+			echo '<form action="', $url ,'" method="post">';
+			echo '<table class="widefat" style="width:100%;">';
+				echo '<thead>';
+					echo '<tr>';
+						echo '<th class="check-column check-column-controller" scope="col"><input type="checkbox"/></th>';
+						echo '<th scope="col">Post title</th>';
+					echo '</tr>';
+				echo '</thead>';
+				
+				echo '<tbody>';
+					
+					$authors = get_users_of_blog();
+					
+					$alternative = true;
+					
+					foreach($authors as $author){
+						
+						if($alternative)	$alternative = false;
+						else				$alternative = true;
+						
+						echo '<tr class="', $alternative ? 'alternate':false ,' author-self status-publish">';
+							
+							echo '<th class="check-column"><input name="authors[]" ', isset($this->widgets[$_GET['id']]['authors'][$author->user_id]) ? 'checked="checked"' : false ,' type="checkbox" value="', $author->user_id ,'_', $author->display_name ,'" /></th>';
+							
+							echo '<td>', $author->display_name ,'</td>';
+						
+						echo '</tr>';
+						
+						}
+				echo '</tbody>';
+			
+			echo '</table>';
+			
+			echo '<p class="submit" style="clear:both;margin-top:25px;">';
+				echo '<input type="submit" value="&laquo; Add selected authors" />';
+			echo '</p>';
+			echo '</form>';
+		echo '</td>';
+	
+	echo '</tr>';
+
+echo '</table>';
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/show_in_categories.php b/wp-content/themes/vanilla/_custom-widgets/show_in_categories.php
new file mode 100755
index 0000000000000000000000000000000000000000..1e64093bbbc10158c4d0422345d3f05b453d013f
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/show_in_categories.php
@@ -0,0 +1,113 @@
+<?php 
+
+
+$url .= '&amp;opt='. $_GET['opt'] . '&amp;cat_pag=' . ( $_GET['cat_pag']  = ( !empty($_GET['cat_pag']) ? $_GET['cat_pag'] : 0 ) );
+
+
+if(!empty($_GET['delete_cat']) && isset($this->widgets[$_GET['id']]['categories'][$_GET['delete_cat']])){
+	
+	
+	unset($this->widgets[$_GET['id']]['categories'][$_GET['delete_cat']]);
+	
+	update_option('slayer_widgets', $this->widgets);
+	
+	}
+
+
+
+echo '<table class="slayer_main_table">';
+	
+	echo '<tr>';
+	
+		echo '<td style="width:50%;" valign="top">';
+		
+			echo '<h2>Show in Category</h2>';
+			
+			echo '<ul class="slayer_post_list">';
+				
+				if(empty($this->widgets[$_GET['id']]['categories']))
+					echo '<li>all</li>';
+				else
+					{
+					
+					foreach($this->widgets[$_GET['id']]['categories'] as $id => $title){
+						
+						echo '<li><a onclick="if(!confirm(\'Are you sure you want to remove this category from the list?\')) return false;" href="', $url , '&amp;delete_cat=' , $id ,'">', $title ,'</a></li>';
+						
+						}
+					
+					}
+			
+			echo '</ul>';
+			
+			echo 'Click a category to remove it.';
+		
+		echo '</td>';
+		
+		
+		echo '<td valign="top">';
+			echo '<form action="', $url ,'" method="post">';
+			echo '<table class="widefat" style="width:100%;">';
+				echo '<thead>';
+					echo '<tr>';
+						echo '<th class="check-column check-column-controller" scope="col"><input type="checkbox"/></th>';
+						echo '<th scope="col">Category name</th>';
+					echo '</tr>';
+				echo '</thead>';
+				
+				echo '<tbody>';
+					
+					$data = get_categories(array('hide_empty'=>false));
+					$categories = array();
+					
+					foreach($data as $category)
+						$categories[] = $category;
+					
+					$alternative = true;
+					
+					$offset = $_GET['cat_pag'] * $this->info['posts_per_page'];
+					$limit = $offset + $this->info['posts_per_page'];
+					$count = count($categories);
+					
+					for($i = $offset ; $i < $limit && $i < $count ;  $i++){
+						
+						$category = $categories[$i];
+						
+						if($alternative)	$alternative = false;
+						else				$alternative = true;
+						
+						echo '<tr class="', $alternative ? 'alternate':false ,' author-self status-publish">';
+							
+							echo '<th class="check-column"><input name="categories[]" ', isset($this->widgets[$_GET['id']]['categories'][$category->term_id]) ? 'checked="checked"' : false ,' type="checkbox" value="', $category->term_id ,'_', $category->name ,'" /></th>';
+							
+							echo '<td>',$category->name,'</td>';
+						
+						echo '</tr>';
+						
+						}
+				echo '</tbody>';
+			
+			echo '</table>';
+			
+			if( $_GET['cat_pag']+1 < ($count / $this->info['posts_per_page']) )
+				echo '<a style="float:left;" href="', str_replace( '&amp;cat_pag='.$_GET['cat_pag'],'&amp;cat_pag='.($_GET['cat_pag']+1),$url) ,'">&laquo; Next</a>';
+			
+			if($_GET['cat_pag'])
+				echo '<a style="float:right;" href="', str_replace('&amp;cat_pag='.$_GET['cat_pag'],'&amp;cat_pag='.($_GET['cat_pag']-1),$url) ,'">Previous &raquo;</a>';
+			
+			echo '<p class="submit" style="clear:both;margin-top:25px;">';
+				echo '<input type="submit" value="&laquo; Add selected categories" />';
+			echo '</p>';
+			echo '</form>';
+		echo '</td>';
+	
+	echo '</tr>';
+
+echo '</table>';
+
+
+
+
+
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/show_in_pages.php b/wp-content/themes/vanilla/_custom-widgets/show_in_pages.php
new file mode 100755
index 0000000000000000000000000000000000000000..fee3490018f01beed7732cba5ce5942d46fc1026
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/show_in_pages.php
@@ -0,0 +1,109 @@
+<?php
+
+$url .= '&amp;opt='. $_GET['opt'] . '&amp;page_pag=' . ( $_GET['page_pag']  = ( !empty($_GET['page_pag']) ? $_GET['page_pag'] : 0 ) );
+	
+if(!empty($_GET['delete_page']) && isset($this->widgets[$_GET['id']]['pages'][$_GET['delete_page']])){
+	
+	
+	unset($this->widgets[$_GET['id']]['pages'][$_GET['delete_page']]);
+	
+	update_option('slayer_widgets', $this->widgets);
+	
+	}
+
+
+
+echo '<table class="slayer_main_table">';
+	
+	echo '<tr>';
+	
+		echo '<td style="width:50%;" valign="top">';
+		
+			echo '<h2>Show in Pages</h2>';
+			
+			echo '<ul class="slayer_post_list">';
+				
+				if(empty($this->widgets[$_GET['id']]['pages']))
+					echo '<li>', !empty($this->widgets[$_GET['id']]['posts']) || !empty($this->widgets[$_GET['id']]['cats']) ? 'none' : 'all' ,'</li>';
+				else
+					{
+					foreach($this->widgets[$_GET['id']]['pages'] as $id => $title){
+						
+						echo '<li><a onclick="if(!confirm(\'Are you sure you want to remove this post from the list?\')) return false;" href="', $url , '&amp;delete_page=' , $id ,'">', $title ,'</a></li>';
+						
+						}
+					
+					}
+			
+			echo '</ul>';
+			
+			echo 'Click a post to remove it.';
+		
+		echo '</td>';
+		
+		
+		echo '<td valign="top">';
+			echo '<form action="', $url ,'" method="post">';
+			echo '<table class="widefat" style="width:100%;">';
+				echo '<thead>';
+					echo '<tr>';
+						echo '<th class="check-column check-column-controller" scope="col"><input type="checkbox"/></th>';
+						echo '<th scope="col">Page title</th>';
+					echo '</tr>';
+				echo '</thead>';
+				
+				echo '<tbody>';
+					
+					$posts = get_posts(array(
+						'numberposts'	=> $this->info['posts_per_page'],
+						'offset'		=> $_GET['page_pag'] * $this->info['posts_per_page'],
+						'post_type' 	=> 'page'
+						));
+					
+					//alert($posts);
+					
+					$alternative = true;
+					
+					foreach($posts as $post){
+						
+						//alert($post);
+						if($alternative)	$alternative = false;
+						else				$alternative = true;
+						
+						echo '<tr class="', $alternative ? 'alternate':false ,' author-self status-publish">';
+							
+							echo '<th class="check-column"><input name="pages[]" ', isset($this->widgets[$_GET['id']]['pages'][$post->ID]) ? 'checked="checked"' : false ,' type="checkbox" value="', $post->ID ,'_', $post->post_title ,'" /></th>';
+							
+							echo '<td>',$post->post_title,'</td>';
+						
+						echo '</tr>';
+						
+						}
+				echo '</tbody>';
+			
+			echo '</table>';
+			
+			$num_posts = wp_count_posts( 'page', 'readable' );
+			
+			$num_posts = $num_posts->publish;
+			
+			
+			if( $_GET['page_pag']+1 < ($num_posts / $this->info['posts_per_page']) )
+				echo '<a style="float:left;" href="', str_replace( '&amp;page_pag='.$_GET['page_pag'],'&amp;page_pag='.($_GET['page_pag']+1),$url) ,'">&laquo; Older Entries</a>';
+			
+			if($_GET['page_pag'])
+				echo '<a style="float:right;" href="', str_replace('&amp;page_pag='.$_GET['page_pag'],'&amp;page_pag='.($_GET['page_pag']-1),$url) ,'">Newer Entries &raquo;</a>';
+			
+			echo '<p class="submit" style="clear:both;margin-top:25px;">';
+				echo '<input type="submit" value="&laquo; Add selected pages" />';
+			echo '</p>';
+			echo '</form>';
+		echo '</td>';
+	
+	echo '</tr>';
+
+echo '</table>';
+
+
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/show_in_posts.php b/wp-content/themes/vanilla/_custom-widgets/show_in_posts.php
new file mode 100755
index 0000000000000000000000000000000000000000..7e74160d202bb9945186415cf49c8e1fdfb03287
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/show_in_posts.php
@@ -0,0 +1,102 @@
+<?php 
+
+$url .= '&amp;opt='. $_GET['opt'] . '&amp;post_pag=' . ( $_GET['post_pag']  = ( !empty($_GET['post_pag']) ? $_GET['post_pag'] : 0 ) );
+
+if(!empty($_GET['delete_post']) && isset($this->widgets[$_GET['id']]['posts'][$_GET['delete_post']])){
+	
+	unset($this->widgets[$_GET['id']]['posts'][$_GET['delete_post']]);
+	
+	update_option('slayer_widgets', $this->widgets);
+	
+	}
+
+echo '<table class="slayer_main_table">';
+	
+	echo '<tr>';
+	
+		echo '<td style="width:50%;" valign="top">';
+		
+			echo '<h2>Show in Posts</h2>';
+			
+			echo '<ul class="slayer_post_list">';
+				
+				if(empty($this->widgets[$_GET['id']]['posts']))
+					echo '<li>all</li>';
+				else
+					{
+					
+					foreach($this->widgets[$_GET['id']]['posts'] as $id => $title){
+						
+						echo '<li><a onclick="if(!confirm(\'Are you sure you want to remove this post from the list?\')) return false;" href="', $url , '&amp;delete_post=' , $id ,'">', $title ,'</a></li>';
+						
+						}
+					
+					}
+			
+			echo '</ul>';
+			
+			echo 'Click a post to remove it.';
+		
+		echo '</td>';
+		
+		
+		echo '<td valign="top">';
+			echo '<form action="', $url ,'" method="post">';
+			echo '<table class="widefat" style="width:100%;">';
+				echo '<thead>';
+					echo '<tr>';
+						echo '<th class="check-column check-column-controller" scope="col"><input type="checkbox"/></th>';
+						echo '<th scope="col">Post title</th>';
+					echo '</tr>';
+				echo '</thead>';
+				
+				echo '<tbody>';
+					
+					$posts = get_posts(array(
+						'numberposts'	=> $this->info['posts_per_page'],
+						'offset'		=> $_GET['post_pag'] * $this->info['posts_per_page'],
+						'post_type' 	=> 'post'
+						));
+					
+					$alternative = true;
+					
+					foreach($posts as $post){
+						
+						if($alternative)	$alternative = false;
+						else				$alternative = true;
+						
+						echo '<tr class="', $alternative ? 'alternate':false ,' author-self status-publish">';
+							
+							echo '<th class="check-column"><input name="posts[]" ', isset($this->widgets[$_GET['id']]['posts'][$post->ID]) ? 'checked="checked"' : false ,' type="checkbox" value="', $post->ID ,'_', $post->post_title ,'" /></th>';
+							
+							echo '<td>',$post->post_title,'</td>';
+						
+						echo '</tr>';
+						
+						}
+				echo '</tbody>';
+			
+			echo '</table>';
+			
+			$num_posts = wp_count_posts( 'post', 'readable' );
+			
+			$num_posts = $num_posts->publish;
+			
+			
+			if( $_GET['post_pag']+1 < ($num_posts / $this->info['posts_per_page']) )
+				echo '<a style="float:left;" href="', str_replace( '&amp;post_pag='.$_GET['post_pag'],'&amp;post_pag='.($_GET['post_pag']+1),$url) ,'">&laquo; Older Entries</a>';
+			
+			if($_GET['post_pag'])
+				echo '<a style="float:right;" href="', str_replace('&amp;post_pag='.$_GET['post_pag'],'&amp;post_pag='.($_GET['post_pag']-1),$url) ,'">Newer Entries &raquo;</a>';
+			
+			echo '<p class="submit" style="clear:both;margin-top:25px;">';
+				echo '<input type="submit" value="&laquo; Add selected posts" />';
+			echo '</p>';
+			echo '</form>';
+		echo '</td>';
+	
+	echo '</tr>';
+
+echo '</table>';
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_custom-widgets/show_in_tags.php b/wp-content/themes/vanilla/_custom-widgets/show_in_tags.php
new file mode 100755
index 0000000000000000000000000000000000000000..1850b4f15c9fac393f719101eaef4a415103dc8e
--- /dev/null
+++ b/wp-content/themes/vanilla/_custom-widgets/show_in_tags.php
@@ -0,0 +1,106 @@
+<?php
+
+$url .= '&amp;opt='. $_GET['opt'] . '&amp;tags_pag=' . ( $_GET['tags_pag']  = ( !empty($_GET['tags_pag']) ? $_GET['tags_pag'] : 0 ) );
+
+if(!empty($_GET['delete_tag']) && isset($this->widgets[$_GET['id']]['tags'][$_GET['delete_tag']])){
+	
+	
+	unset($this->widgets[$_GET['id']]['tags'][$_GET['delete_tag']]);
+	
+	update_option('slayer_widgets', $this->widgets);
+	
+	}
+
+
+echo '<table class="slayer_main_table">';
+	
+	echo '<tr>';
+	
+		echo '<td style="width:50%;" valign="top">';
+		
+			echo '<h2>Show in posts with tags</h2>';
+			
+			echo '<ul class="slayer_post_list">';
+				
+				if(empty($this->widgets[$_GET['id']]['tags']))
+					echo '<li>all</li>';
+				else
+					{
+					
+					foreach($this->widgets[$_GET['id']]['tags'] as $id => $title){
+						
+						echo '<li><a onclick="if(!confirm(\'Are you sure you want to remove this tag from the list?\')) return false;" href="', $url , '&amp;delete_tag=' , $id ,'">', $title ,'</a></li>';
+						
+						}
+					
+					}
+			
+			echo '</ul>';
+			
+			echo 'Click a tag to remove it.';
+		
+		echo '</td>';
+		
+		
+		echo '<td valign="top">';
+			echo '<form action="', $url ,'" method="post">';
+			echo '<table class="widefat" style="width:100%;">';
+				echo '<thead>';
+					echo '<tr>';
+						echo '<th class="check-column check-column-controller" scope="col"><input type="checkbox"/></th>';
+						echo '<th scope="col">Tag name</th>';
+					echo '</tr>';
+				echo '</thead>';
+				
+				echo '<tbody>';
+					
+					
+					$alternative = true;
+					
+					$tags = get_tags(array('hide_empty'=>false));
+					
+					$offset = $_GET['tags_pag'] * $this->info['posts_per_page'];
+					$limit = $offset + $this->info['posts_per_page'];
+					$count = count($tags);
+					
+					for($i = $offset ; $i < $limit && $i < $count ;  $i++){
+						
+						$tag = $tags[$i];
+						
+						if($alternative)	$alternative = false;
+						else				$alternative = true;
+						
+						echo '<tr class="', $alternative ? 'alternate':false ,' author-self status-publish">';
+							
+							echo '<th class="check-column"><input name="tags[]" ', isset($this->widgets[$_GET['id']]['tags'][$tag->term_id]) ? 'checked="checked"' : false ,' type="checkbox" value="', $tag->term_id ,'_', $tag->name ,'" /></th>';
+							
+							echo '<td>',$tag->name,'</td>';
+						
+						echo '</tr>';
+						
+						}
+				echo '</tbody>';
+			
+			echo '</table>';
+			
+			if( $_GET['tags_pag'] + 1 < ($count / $this->info['posts_per_page']) )
+				echo '<a style="float:left;" href="', str_replace( '&amp;tags_pag='.$_GET['tags_pag'],'&amp;tags_pag='.($_GET['tags_pag']+1),$url) ,'">&laquo; Next</a>';
+			
+			if($_GET['tags_pag'])
+				echo '<a style="float:right;" href="', str_replace('&amp;tags_pag='.$_GET['tags_pag'],'&amp;tags_pag='.($_GET['tags_pag']-1),$url) ,'">Previous &raquo;</a>';
+			
+			echo '<p class="submit" style="clear:both;margin-top:25px;">';
+				echo '<input type="submit" value="&laquo; Add selected categories" />';
+			echo '</p>';
+			echo '</form>';
+		echo '</td>';
+	
+	echo '</tr>';
+
+echo '</table>';
+
+
+
+
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/admin/about.php b/wp-content/themes/vanilla/_hybrid/admin/about.php
new file mode 100755
index 0000000000000000000000000000000000000000..13653c5c880a9d7f1244a198f127d88ace600f71
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/admin/about.php
@@ -0,0 +1,26 @@
+<div class="postbox close">
+<h3><?php _e('About This Theme','hybrid'); ?></h3>
+
+<div class="inside">
+	<table class="form-table">
+
+	<tr>
+		<th><?php _e('Theme Description:','hybrid'); ?></th>
+		<td><?php echo $theme_data['Description']; ?></td>
+	</tr>
+	<tr>
+		<th><?php _e('Theme Version:','hybrid'); ?></th>
+		<td><?php echo $theme_data['Title']; ?> <?php echo $theme_data['Version']; ?></td>
+	</tr>
+	<tr>
+		<th><?php _e('Theme Documentation:','hybrid'); ?></th>
+		<td><a href="<?php echo $theme_data['URI']; ?>" title="<?php _e('Theme Documentation','hybrid'); ?>"><?php _e('Theme Documentation','hybrid'); ?></a></td>
+	</tr>
+	<tr>
+		<th><?php _e('Theme Support:','hybrid'); ?></th>
+		<td><a href="http://themehybrid.com/support" title="<?php _e('Get support for this theme','hybrid'); ?>"><?php _e('Visit the support forums.','hybrid'); ?></a></td>
+	</tr>
+
+	</table>
+</div>
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/admin/general.php b/wp-content/themes/vanilla/_hybrid/admin/general.php
new file mode 100755
index 0000000000000000000000000000000000000000..b7c0d3ddfb1a6d86c282e5f7dab140a247f929e6
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/admin/general.php
@@ -0,0 +1,212 @@
+<div class="postbox open">
+
+<h3><?php _e('Select your theme settings','hybrid'); ?></h3>
+
+<div class="inside">
+
+	<table class="form-table">
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['primary_inserts_default']; ?>"><?php _e('Widget Inserts:','hybrid'); ?></label>
+		</th>
+		<td>
+			<input id="<?php echo $data['primary_inserts_default']; ?>" name="<?php echo $data['primary_inserts_default']; ?>" type="checkbox" <?php if($val['primary_inserts_default']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['primary_inserts_default']; ?>">
+				<?php _e('Select this if you want your primary widget inserts to default to the home insert when nothing else is selected.','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['secondary_inserts_default']; ?>" name="<?php echo $data['secondary_inserts_default']; ?>" type="checkbox" <?php if($val['secondary_inserts_default']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['secondary_inserts_default']; ?>">
+				<?php _e('Select this if you want your secondary widget inserts to default to the home insert when nothing else is selected.','hybrid'); ?>
+			</label>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['print_style']; ?>"><?php _e('Stylesheets:','hybrid'); ?></label>
+		</th>
+		<td>
+			<input id="<?php echo $data['print_style']; ?>" name="<?php echo $data['print_style']; ?>" type="checkbox" <?php if($val['print_style']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['print_style']; ?>">
+				<?php _e('Select this to have the theme automatically include a print stylesheet.','hybrid'); ?>
+			</label>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['pullquotes_js']; ?>"><?php _e('JavaScript:','hybrid'); ?></label>
+		</th>
+		<td>
+			<input id="<?php echo $data['pullquotes_js']; ?>" name="<?php echo $data['pullquotes_js']; ?>" type="checkbox" <?php if($val['pullquotes_js']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['pullquotes_js']; ?>">
+				<?php _e('Include the pull quote JavaScript.','hybrid'); ?>
+			</label>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['feed_url']; ?>"><?php _e('Feeds:','hybrid'); ?></label>
+		</th>
+		<td>
+			<input id="<?php echo $data['feed_url']; ?>" name="<?php echo $data['feed_url']; ?>" value="<?php echo $val['feed_url']; ?>" size="30" />
+			<br />
+			<?php _e('If you have a an alternate feed address, such as one from <a href="http://feedburner.com" title="Feedburner">Feedburner</a>, you can enter it here to have the theme set your feed URL link.  If blank, the theme will default to your WordPress RSS feed.','hybrid'); ?>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['seo_cats']; ?>"><?php _e('Title &amp; Meta:','hybrid'); ?></label>
+		</th>
+		<td>
+			<input id="<?php echo $data['seo_cats']; ?>" name="<?php echo $data['seo_cats']; ?>" type="checkbox" <?php if($val['seo_cats']) echo 'checked="checked"'; ?> value="true" />
+			<label for="<?php echo $data['seo_cats']; ?>">
+				<?php _e('Use category slugs on single posts for your meta keywords?','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['seo_tags']; ?>" name="<?php echo $data['seo_tags']; ?>" type="checkbox" <?php if($val['seo_tags']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['seo_tags']; ?>">
+				<?php _e('Use tag slugs on single posts for your meta keywords?','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['seo_single_excerpts']; ?>" name="<?php echo $data['seo_single_excerpts']; ?>" type="checkbox" <?php if($val['seo_single_excerpts']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['seo_single_excerpts']; ?>">
+				<?php _e('Use the excerpt on single posts for your meta description?','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['seo_author']; ?>" name="<?php echo $data['seo_author']; ?>" type="checkbox" <?php if($val['seo_author']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['seo_author']; ?>">
+				<?php _e('Use the author bio on author archives for your meta description?','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['seo_category']; ?>" name="<?php echo $data['seo_category']; ?>" type="checkbox" <?php if($val['seo_category']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['seo_category']; ?>">
+				<?php _e('Use the category description on category archives for your meta description?','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['seo_blog_title']; ?>" name="<?php echo $data['seo_blog_title']; ?>" type="checkbox" <?php if($val['seo_blog_title']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['seo_blog_title']; ?>">
+				<?php _e('Append site title to the end of the page name?','hybrid'); ?>
+			</label>
+			<p>
+				<?php _e('You can change these settings in the box labeled <em>Hybrid Settings</em> when writing a post or page.','hybrid'); ?> <?php printf(__('The <a href="%1$s" title="All-In-One SEO Pack">All-In-One SEO Pack</a> and <a href="%2$s" title="Headspace2">Headspace2</a> plugins will override these settings and the Indexing settings.','hybrid'), 'http://wordpress.org/extend/plugins/all-in-one-seo-pack', 'http://wordpress.org/extend/plugins/headspace2'); ?>
+			</p>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['robots_home']; ?>"><?php _e('Indexing:','hybrid'); ?></label>
+		</th>
+		<td>
+			<?php _e('Choose which pages of your blog get indexed by the search engines. Only selected pages will be indexed.  If not selected, those pages will be blocked.','hybrid'); ?> <em><?php _e('Note: Some of these settings will render the Title &amp; Meta settings moot.  Also, setting your site to privacy mode will override these controls.','hybrid'); ?></em>
+			<p style="width:30%;float:left;">
+				<input id="<?php echo $data['robots_home']; ?>" name="<?php echo $data['robots_home']; ?>" type="checkbox" <?php if($val['robots_home']) echo 'checked="checked"'; ?> value="true" />
+				<label for="<?php echo $data['robots_home']; ?>"><?php _e('Home page','hybrid'); ?></label>
+			<br />
+				<input id="<?php echo $data['robots_single']; ?>" name="<?php echo $data['robots_single']; ?>" type="checkbox" <?php if($val['robots_single']) echo 'checked="checked"'; ?> value="true" /> 
+				<label for="<?php echo $data['robots_single']; ?>"><?php _e('Single posts','hybrid'); ?></label>
+			<br />
+				<input id="<?php echo $data['robots_attachment']; ?>" name="<?php echo $data['robots_attachment']; ?>" type="checkbox" <?php if($val['robots_attachment']) echo 'checked="checked"'; ?> value="true" /> 
+				<label for="<?php echo $data['robots_attachment']; ?>"><?php _e('Attachments','hybrid'); ?></label>
+			<br />
+				<input id="<?php echo $data['robots_page']; ?>" name="<?php echo $data['robots_page']; ?>" type="checkbox" <?php if($val['robots_page']) echo 'checked="checked"'; ?> value="true" /> 
+				<label for="<?php echo $data['robots_page']; ?>"><?php _e('Pages','hybrid'); ?></label>
+			</p>
+			<p style="width:30%;float:left;">
+				<input id="<?php echo $data['robots_date']; ?>" name="<?php echo $data['robots_date']; ?>" type="checkbox" <?php if($val['robots_date']) echo 'checked="checked"'; ?> value="true" />
+				<label for="<?php echo $data['robots_date']; ?>"><?php _e('Date-based archives','hybrid'); ?></label>
+			<br />
+				<input id="<?php echo $data['robots_category']; ?>" name="<?php echo $data['robots_category']; ?>" type="checkbox" <?php if($val['robots_category']) echo 'checked="checked"'; ?> value="true" />
+				<label for="<?php echo $data['robots_category']; ?>"><?php _e('Category archives','hybrid'); ?></label>
+			<br />
+				<input id="<?php echo $data['robots_tag']; ?>" name="<?php echo $data['robots_tag']; ?>" type="checkbox" <?php if($val['robots_tag']) echo 'checked="checked"'; ?> value="true" />
+				<label for="<?php echo $data['robots_tag']; ?>"><?php _e('Tag archives','hybrid'); ?></label>
+			<br />
+				<input id="<?php echo $data['robots_author']; ?>" name="<?php echo $data['robots_author']; ?>" type="checkbox" <?php if($val['robots_author']) echo 'checked="checked"'; ?> value="true" />
+				<label for="<?php echo $data['robots_author']; ?>"><?php _e('Author archives','hybrid'); ?></label>
+			</p>
+			<p style="width:30%;float:left;">
+				<input id="<?php echo $data['robots_search']; ?>" name="<?php echo $data['robots_search']; ?>" type="checkbox" <?php if($val['robots_search']) echo 'checked="checked"'; ?> value="true" />
+				<label for="<?php echo $data['robots_search']; ?>"><?php _e('Search','hybrid'); ?></label>
+			<br />
+				<input id="<?php echo $data['robots_404']; ?>" name="<?php echo $data['robots_404']; ?>" type="checkbox" <?php if($val['robots_404']) echo 'checked="checked"'; ?> value="true" />
+				<label for="<?php echo $data['robots_404']; ?>"><?php _e('404','hybrid'); ?></label>
+			</p>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['default_avatar']; ?>"><?php _e('Avatars:','hybrid'); ?></label>
+		</th>
+		<td>
+			<input id="<?php echo $data['default_avatar']; ?>" name="<?php echo $data['default_avatar']; ?>" value="<?php echo $val['default_avatar']; ?>" size="30" />
+			<br />
+			<?php _e('You can set a default avatar for users without one if you don\'t like the choices WordPress offers you. Simply add the full path to the image file.','hybrid'); ?>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['comments_popup']; ?>"><?php _e('Comments:','hybrid'); ?></label>
+		</th>
+		<td>
+			<input id="<?php echo $data['comments_popup']; ?>" name="<?php echo $data['comments_popup']; ?>" type="checkbox" <?php if($val['comments_popup']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['comments_popup']; ?>">
+				<?php _e('Check to use the comments popup window instead of regular comments.','hybrid'); ?> <em><?php _e('WP 2.7+ only.','hybrid'); ?></em>
+			</label>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['footer_insert']; ?>"><?php _e('Footer Insert:','hybrid'); ?></label>
+		</th>
+		<td>
+			<textarea id="<?php echo $data['footer_insert']; ?>" name="<?php echo $data['footer_insert']; ?>" cols="60" rows="5" style="width: 95%;"><?php echo str_replace('<','&lt;',stripslashes($val['footer_insert'])); ?></textarea>
+			<br />
+			<?php _e('You can place XHTML and JavaScript here to have it inserted automatically into your theme.  If you have a script, such as one from Google Analytics, this could be useful.','hybrid'); ?>
+		</td>
+	</tr>
+
+	<tr>
+		<th>
+			<label for="<?php echo $data['copyright']; ?>"><?php _e('Footer Settings:', 'hybrid'); ?></label>
+		</th>
+		<td>
+			<input id="<?php echo $data['copyright']; ?>" name="<?php echo $data['copyright']; ?>" type="checkbox" <?php if($val['copyright']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['copyright']; ?>">
+				<?php _e('Check this if you want the theme to auto-generate your site\'s copyright and title in the footer.','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['wp_credit']; ?>" name="<?php echo $data['wp_credit']; ?>" type="checkbox" <?php if($val['wp_credit']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['wp_credit']; ?>">
+				<?php _e('Want to show your love of WordPress?  Check this and a link will be added to your footer back to WordPress.org.','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['th_credit']; ?>" name="<?php echo $data['th_credit']; ?>" type="checkbox" <?php if($val['th_credit']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['th_credit']; ?>">
+				<?php _e('Check this to have a link back to Theme Hybrid automatically appended to your footer.  This is totally optional.  Really.','hybrid'); ?>
+			</label>
+			<br />
+			<input id="<?php echo $data['query_counter']; ?>" name="<?php echo $data['query_counter']; ?>" type="checkbox" <?php if($val['query_counter']) echo 'checked="checked"'; ?> value="true" /> 
+			<label for="<?php echo $data['query_counter']; ?>">
+				<?php _e('For testing purposes, this will append a database query counter and page load timer to your footer.','hybrid'); ?>
+			</label>
+		</td>
+	</tr>
+
+	</table>
+
+	<p class="submit">
+		<input type="submit" name="Submit"  class="button-primary" value="<?php _e('Save Changes', 'hybrid' ) ?>" />
+		<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y" />
+	</p>
+
+</div>
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/admin/meta-box.php b/wp-content/themes/vanilla/_hybrid/admin/meta-box.php
new file mode 100755
index 0000000000000000000000000000000000000000..a38a04982bd91a0e587b7cb84b73f8a4d2e6c35c
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/admin/meta-box.php
@@ -0,0 +1,285 @@
+<?php
+
+/**
+* Add actions to the admin
+*/
+add_action('admin_menu', 'hybrid_create_meta_box');
+add_action('save_post', 'hybrid_save_meta_data');
+
+/**
+* Function for adding meta boxes to the admin
+* Separate the post and page meta boxes
+*
+* @since 0.3
+*/
+function hybrid_create_meta_box() {
+	global $theme_name;
+
+	add_meta_box('post-meta-boxes', __('Hybrid Settings','hybrid'), 'post_meta_boxes', 'post', 'normal', 'high');
+	add_meta_box('page-meta-boxes', __('Hybrid Settings','hybrid'), 'page_meta_boxes', 'page', 'normal', 'high');
+}
+
+/**
+* Array of variables for post meta boxes
+* Make the function filterable to add options through child themes
+*
+* @since 0.3
+* @return Array $meta_boxes
+* @filter
+*/
+function hybrid_post_meta_boxes() {
+	$meta_boxes = array(
+		'title' => array(
+			'name' => 'Title',
+			'default' => '',
+			'title' => __('Title','hybrid'),
+			'type' => 'text',
+			'show_description' => false,
+			'description' => __('Add a title that will be seen by search engines.','hybrid'),
+			),
+		'description' => array(
+			'name' => 'Description',
+			'default' => '',
+			'title' => __('Description','hybrid'),
+			'type' => 'textarea',
+			'show_description' => false,
+			'description' => __('Add a description that will be seen by search engines.','hybrid'),
+			),
+		'keywords' => array(
+			'name' => 'Keywords',
+			'default' => '',
+			'title' => __('Keywords:','hybrid'),
+			'type' => 'text',
+			'show_description' => false,
+			'description' => __('Add keywords that will be seen by search engines.','hybrid'),
+			),
+		'thumbnail' => array(
+			'name' => 'Thumbnail',
+			'default' => '',
+			'title' => __('Thumbnail:','hybrid'),
+			'type' => 'text',
+			'show_description' => false,
+			'description' => __('Add an image URL here.','hybrid'),
+			),
+		);
+
+	return apply_filters('hybrid_post_meta_boxes', $meta_boxes);
+}
+
+/**
+* Array of variables for meta boxes to pages
+* Make the function filterable to add options through child themes
+*
+* @since 0.3
+* @return Array $meta_boxes
+* @filter
+*/
+function hybrid_page_meta_boxes() {
+	$meta_boxes = array(
+		'title' => array(
+			'name' => 'Title',
+			'default' => '',
+			'title' => __('Title','hybrid'),
+			'type' => 'text',
+			'show_description' => false,
+			'description' => __('Add a title that will be seen by search engines.','hybrid'),
+			),
+		'description' => array(
+			'name' => 'Description',
+			'default' => '',
+			'title' => __('Description','hybrid'),
+			'type' => 'textarea',
+			'show_description' => false,
+			'description' => __('Add a title that will be seen by search engines.','hybrid'),
+			),
+		'keywords' => array(
+			'name' => 'Keywords',
+			'default' => '',
+			'title' => __('Keywords:','hybrid'),
+			'type' => 'text',
+			'show_description' => false,
+			'description' => __('Add a title that will be seen by search engines.','hybrid'),
+			),
+		);
+
+	return apply_filters('hybrid_page_meta_boxes', $meta_boxes);
+}
+
+/**
+* Displays meta boxes on the Write Post panel
+* Loops through each meta box in the $meta_boxes variable
+* Gets array from hybrid_post_meta_boxes()
+*
+* @since 0.3
+*/
+function post_meta_boxes() {
+	global $post;
+	$meta_boxes = hybrid_post_meta_boxes();
+?>
+
+<table class="form-table">
+<?php
+	foreach($meta_boxes as $meta) :
+
+		$value = get_post_meta($post->ID, $meta['name'], true);
+
+		if($meta['type'] == 'text') :
+			get_meta_text_input($meta, $value);
+		elseif($meta['type'] == 'textarea') :
+			get_meta_textarea($meta, $value);
+		elseif($meta['type'] == 'select') :
+			get_meta_select($meta, $value);
+		endif;
+
+	endforeach;
+?>
+</table>
+<?php
+}
+
+/**
+* Displays meta boxes on the Write Page panel
+* Loops through each meta box in the $meta_boxes variable
+* Gets array from hybrid_page_meta_boxes()
+*
+* @since 0.3
+*/
+function page_meta_boxes() {
+	global $post;
+	$meta_boxes = hybrid_page_meta_boxes();
+?>
+
+<table class="form-table">
+<?php
+	foreach($meta_boxes as $meta) :
+
+		$value = stripslashes(get_post_meta($post->ID, $meta['name'], true));
+
+		if($meta['type'] == 'text') :
+			get_meta_text_input($meta, $value);
+		elseif($meta['type'] == 'textarea') :
+			get_meta_textarea($meta, $value);
+		elseif($meta['type'] == 'select') :
+			get_meta_select($meta, $value);
+		endif;
+
+	endforeach;
+?>
+</table>
+<?php
+}
+
+/**
+* Outputs a text input box with arguments from the parameters
+* Used for both the post/page meta boxes
+*
+* @since 0.3
+*/
+function get_meta_text_input($args = array(), $value = false) {
+	extract($args);
+?>
+
+	<tr>
+		<th style="width:10%;">
+		<label for="<?php echo $name; ?>"><?php echo $title; ?></label>
+		</th>
+		<td>
+		<input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo htmlentities($value, ENT_QUOTES); ?>" size="30" tabindex="30" style="width: 97%;" />
+		<input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce(plugin_basename(__FILE__)); ?>" />
+		</td>
+	</tr>
+<?php
+}
+
+/**
+* Outputs a select box with arguments from the parameters
+* Used for both the post/page meta boxes
+*
+* @since 0.3
+*/
+function get_meta_select($args = array(), $value = false) {
+	extract($args);
+?>
+
+	<tr>
+		<th style="width:10%;">
+		<label for="<?php echo $name; ?>"><?php echo $title; ?></label>
+		</th>
+		<td>
+		<select vname="<?php echo $name; ?>" id="<?php echo $name; ?>">
+		<?php foreach($options as $option) : ?>
+			<option <?php if(htmlentities($value, ENT_QUOTES) == $option) echo ' selected="selected"'; ?>>
+				<?php echo $option; ?>
+			</option>
+		<?php endforeach; ?>
+		<input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce(plugin_basename(__FILE__)); ?>" />
+		</td>
+	</tr>
+<?php
+}
+
+/**
+* Outputs a textarea with arguments from the parameters
+* Used for both the post/page meta boxes
+*
+* @since 0.3
+*/
+function get_meta_textarea($args = array(), $value = false) {
+	extract($args);
+?>
+	<tr>
+		<th style="width:10%;">
+		<label for="<?php echo $name; ?>"><?php echo $title; ?></label>
+		</th>
+		<td>
+		<textarea name="<?php echo $name; ?>" id="<?php echo $name; ?>" cols="60" rows="4" tabindex="30" style="width: 97%;"><?php echo $value; ?></textarea>
+		<input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce(plugin_basename(__FILE__)); ?>" />
+		</td>
+	</tr>
+<?php
+}
+
+/**
+* Loops through each meta box's set of variables
+* Saves them to the database as custom fields
+*
+* @since 0.3
+*/
+function hybrid_save_meta_data($post_id) {
+	global $post;
+
+	if('page' == $_POST['post_type'])
+		$meta_boxes = array_merge(hybrid_page_meta_boxes());
+	else
+		$meta_boxes = array_merge(hybrid_post_meta_boxes());
+
+	foreach($meta_boxes as $meta_box) :
+
+		if(!wp_verify_nonce($_POST[$meta_box['name'] . '_noncename'], plugin_basename(__FILE__))) :
+			return $post_id;
+		endif;
+
+		if('page' == $_POST['post_type']) :
+			if(!current_user_can('edit_page', $post_id)) :
+				return $post_id;
+			endif;
+		else :
+			if(!current_user_can('edit_post', $post_id)) :
+				return $post_id;
+			endif;
+		endif;
+
+		$data = $_POST[$meta_box['name']];
+
+		if(get_post_meta($post_id, $meta_box['name']) == '')
+			add_post_meta($post_id, $meta_box['name'], $data, true);
+
+		elseif($data != get_post_meta($post_id, $meta_box['name'], true))
+			update_post_meta($post_id, $meta_box['name'], $data);
+
+		elseif($data == '')
+			delete_post_meta($post_id, $meta_box['name'], get_post_meta($post_id, $meta_box['name'], true));
+
+	endforeach;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/admin/theme-settings-admin.php b/wp-content/themes/vanilla/_hybrid/admin/theme-settings-admin.php
new file mode 100755
index 0000000000000000000000000000000000000000..eaeae71c84981b0382e9d362610e7d65a9fc3ce9
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/admin/theme-settings-admin.php
@@ -0,0 +1,117 @@
+<?php
+
+/**
+* hybrid_theme_page()
+* Handles the main theme settings
+*
+* @since 0.2
+*/
+function hybrid_theme_page() {
+
+// Some variables
+	$theme_name = __('Hybrid','hybrid');
+	$settings_page_title = __('Hybrid Theme Settings','hybrid');
+	$hidden_field_name = 'hybrid_submit_hidden';
+	$theme_data = get_theme_data(TEMPLATEPATH . '/style.css');
+
+// Add all options to a single array
+// This makes one entry in the database
+	$settings_arr = array(
+		'feed_url' => get_bloginfo('rss2_url'), // General settings
+		'print_style' => true,
+		'page_nav' => array(),
+
+		'common_js' => false, // JavaScript settings
+		'pullquotes_js' => false,
+		// 'comment_tabs' => false,
+
+		'primary_inserts_default' => true, // Widget settings
+		'secondary_inserts_default' => false,
+
+		'robots_home' => true, // Indexing
+		'robots_single' => true,
+		'robots_attachment' => true,
+		'robots_page' => true,
+		'robots_date' => true,
+		'robots_category' => true,
+		'robots_tag' => true,
+		'robots_author' => true,
+		'robots_search' => true,
+		'robots_404' => true,
+
+		'seo_cats' => true, // SEO
+		'seo_tags' => true,
+		'seo_single_excerpts' => true,
+		'seo_author' => true,
+		'seo_category' => true,
+		'seo_blog_title' => false,
+
+		'default_avatar' => false, // Avatars
+
+		'separate_comments' => 'false',
+		'comments_popup' => false, // Comments popup
+		// 'comments_popup_width' => false,
+		// 'comments_popup_height' => false,
+		// 'comments_pagination' => __('Previous/Next Links','hybrid'),
+
+		'footer_insert' => false, // Footer settings
+		'copyright' => true,
+		'wp_credit' => true,
+		'th_credit' => true,
+		'query_counter' => false,
+	);
+
+// Add theme settings to database
+	add_option('hybrid_theme_settings', $settings_arr);
+
+// Set form data IDs the same as settings keys
+// Loop through each
+	$settings_keys = array_keys($settings_arr);
+	foreach($settings_keys as $key) :
+		$data[$key] = $key;
+	endforeach;
+
+// Get existing options from database
+	$settings = get_option('hybrid_theme_settings');
+
+	foreach($settings_arr as $key => $value) :
+		$val[$key] = $settings[$key];
+	endforeach;
+
+
// See if information has been posted
+	if($_POST[$hidden_field_name] == 'Y') :
+
+	// Loop through values and set them if posted
+		foreach($settings_arr as $key => $value) :
+			$settings[$key] = $val[$key] = $_POST[$data[$key]];
+		endforeach;
+
+	// Update theme settings
+		update_option('hybrid_theme_settings', $settings);
+
+	?>
+
+		<div class="wrap">
+			<h2><?php echo $settings_page_title; ?></h2>
+
+		<div class="updated" style="margin: 15px 0;">
+			<p><strong><?php _e('Settings saved.', 'hybrid'); ?></strong></p>
+		</div>
+
+	<?php else : ?>
+
+		<div class="wrap">
+			<h2><?php echo $settings_page_title; ?></h2>
+	<?php
+	endif;
+
+	// Alister override this checking...
+	//if($theme_data['URI'] !== 'http://themehybrid.com/themes/hybrid') : hybrid_error();
+	//elseif($theme_data['Name'] !== 'Hybrid') : hybrid_error();
+	//else : include(HYBRID_ADMIN . '/theme-settings-xhtml.php');
+	//endif;
+	include(CFCT_PATH.'_hybrid/admin/theme-settings-xhtml.php');
+
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/admin/theme-settings-xhtml.php b/wp-content/themes/vanilla/_hybrid/admin/theme-settings-xhtml.php
new file mode 100755
index 0000000000000000000000000000000000000000..a368b9d1e9969df5a39793401f5290dc651d13ac
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/admin/theme-settings-xhtml.php
@@ -0,0 +1,30 @@
+<?php
+
+// Theme data
+	$theme_data = get_theme_data(TEMPLATEPATH . '/style.css');
+
+// Get all category slugs for use
+	$all_cat_slugs_arr = hybrid_all_cat_slugs();
+
+// Get all category names for use
+	$all_cats_arr = hybrid_all_cats();
+
+// Get all tags for use
+	$all_tags_arr = hybrid_all_tags();
+?>
+
+<div id="poststuff" class="dlm">
+
+	<form name="form0" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>" style="border:none;background:transparent;">
+
+	<?php
+		include(CFCT_PATH.'_hybrid/admin/about.php');
+		include(CFCT_PATH.'_hybrid/admin/general.php');
+		hybrid_child_settings(); // Hook for child settings
+	?>
+
+	</form>
+
+</div>
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/admin/theme-settings.php b/wp-content/themes/vanilla/_hybrid/admin/theme-settings.php
new file mode 100755
index 0000000000000000000000000000000000000000..9f2ba1cbd7373798a3e01939fc097065d35bb235
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/admin/theme-settings.php
@@ -0,0 +1,36 @@
+<?php
+
+// Include files
+	include(CFCT_PATH.'_hybrid/admin/theme-settings-admin.php');
+
+// Add actions
+	add_action('admin_menu', 'hybrid_add_pages');
+	add_action('admin_head', 'hybrid_admin_enqueue_style');
+
+/**
+* hybrid_add_pages()
+* Gets all theme admin menu pages
+*
+* @since 0.2
+*/
+function hybrid_add_pages() {
+	add_theme_page(__('Hybrid Theme Settings','hybrid'), __('Hybrid Settings','hybrid'), 10, 'theme-settings.php', 'hybrid_theme_page');
+}
+
+/**
+* hybrid_admin_css()
+* Adds admin CSS
+*
+* @since 0.2
+*/
+function hybrid_admin_enqueue_style() {
+
+	if(function_exists('wp_enqueue_style')) :
+		wp_enqueue_style('hybrid_admin_css',HYBRID_CSS . '/theme-settings.css', false, false, 'screen');
+		wp_print_styles(array('hybrid_admin_css'));
+	else :
+		echo '<link rel="stylesheet" href="' . HYBRID_CSS . '/theme-settings.css?ver=0.2" type="text/css" media="screen" />';
+		echo "\n";
+	endif;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/breadcrumbs.php b/wp-content/themes/vanilla/_hybrid/breadcrumbs.php
new file mode 100755
index 0000000000000000000000000000000000000000..6dbda0a0446d65ae048e63ffb08ca693a42a1baf
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/breadcrumbs.php
@@ -0,0 +1,195 @@
+<?php
+
+/**
+* Shows a breadcrumb for all types of pages
+* Child themes and plugins can filter this
+* Allow filtering of only the arguments ($args)
+*
+* Date-based archives need some work
+* Currently, months and days, don't trail back through the date archives
+*
+* Check for page templates in use: archives.php, authors.php, categories.php, tags.php
+* This is to set the breadcrumb for archives: date.php, author.php, category.php, tag.php
+* If in use, add the first page found using it as part of the breadcrumb for archives
+*
+* @since 0.1
+* @filter $args
+* @hook hybrid_before_content
+* @echo string
+*/
+function hybrid_breadcrumb($args = array()) {
+	global $post;
+
+// Set up the default arguments for the breadcrumb
+	$defaults = array(
+		'separator' => '/',
+		'before' => '<span class="breadcrumb-title">' . __('Browse:','hybrid') . '</span>',
+		'after' => false,
+		'front_page' => false,
+		'show_home' => __('Home','home'),
+		'echo' => true,
+	);
+
+// Apply filters to the arguments
+	$args = apply_filters('hybrid_breadcrumb', $args);
+
+// Parse the arguments and extract them for easy variable naming
+	$args = wp_parse_args($args, $defaults);
+	extract($args);
+
+// Put spaces around the separator
+	$separator = ' ' . $separator . ' ';
+
+// If it is the home page
+// Return no value
+	if((is_home() || is_front_page()) && (!$front_page))
+		return;
+
+// Begin the breadcrumb
+	$breadcrumb = '<div class="breadcrumb">';
+	$breadcrumb .= $before;
+	if($show_home)
+		$breadcrumb .= ' <a href="' . get_bloginfo('url') . '" title="' . get_bloginfo('name') . '" class="trail-home">' . $show_home . '</a>';
+	$breadcrumb .= $separator;
+
+// If home or front page
+	if((is_home() || is_front_page()) && ($front_page)) :
+		$breadcrumb = '<div class="breadcrumb">' . $before . ' ' . $show_home;
+// If attachment
+	elseif(is_attachment()) :
+	/*
+	* Don't like categories by default on attachment pages
+	*
+		$categories = get_the_category($post->post_parent);
+		foreach($categories as $cat) :
+			$cats[] = '<a href="' . get_category_link($cat->term_id) . '" title="' . $cat->name . '">' . $cat->name . '</a>';
+		endforeach;
+		$breadcrumb .= join(', ', $cats);
+		$breadcrumb .= $separator;
+	*/
+		$breadcrumb .= '<a href="' . get_permalink($post->post_parent) . '" title="' . get_the_title($post->post_parent) . '">' . get_the_title($post->post_parent) . '</a>';
+		$breadcrumb .= $separator;
+		$breadcrumb .= '<span class="trail-end">' . get_the_title() . '</span>';
+// Single posts
+	elseif(is_single()) :
+		$categories = get_the_category(', ');
+		foreach($categories as $cat) :
+			$cats[] = '<a href="' . get_category_link($cat->term_id) . '" title="' . $cat->name . '">' . $cat->name . '</a>';
+		endforeach;
+		$breadcrumb .= join(', ', $cats);
+		$breadcrumb .= $separator . '<span class="trail-end">' . single_post_title(false,false) . '</span>';
+
+// Pages
+	elseif(is_page()) :
+		$parents = array();
+		$parent_id = $post->post_parent;
+		while($parent_id) :
+			$page = get_page($parent_id);
+			if($params["link_none"])
+				$parents[]  = get_the_title($page->ID);
+			else
+				$parents[]  = '<a href="'.get_permalink($page->ID).'" title="'.get_the_title($page->ID).'">'.get_the_title($page->ID).'</a> ' . $separator;
+			$parent_id  = $page->post_parent;
+		endwhile;
+		$parents = array_reverse($parents);
+		$breadcrumb .= join(' ', $parents);
+		$breadcrumb .= '<span class="trail-end">' . get_the_title() . '</span>';
+
+// Categories
+	elseif(is_category()) :
+		$pages = get_pages(array(
+			'title_li' => '',
+			'meta_key' => '_wp_page_template',
+			'meta_value' => 'categories.php',
+			'echo' => 0
+		));
+		if($pages && $pages[0]->ID !== get_option('page_on_front')) $breadcrumb .= '<a href="' . get_page_link($pages[0]->ID) . '" title="' . $pages[0]->post_title . '">' . $pages[0]->post_title . '</a>' . $separator;
+	// Category parents
+		$cat = intval( get_query_var('cat') );
+		$parent = &get_category($cat);
+		if(is_wp_error($parent))
+			$parents = false;
+		if($parent->parent && ($parent->parent != $parent->term_id) )
+			$parents = get_category_parents($parent->parent, true, $separator, false);
+
+		if($parents) $breadcrumb .= $parents;
+		$breadcrumb .= '<span class="trail-end">' . single_cat_title(false,false) . '</span>';
+
+// Tags
+	elseif(is_tag()) :
+		$pages = get_pages(array(
+			'title_li' => '',
+			'meta_key' => '_wp_page_template',
+			'meta_value' => 'tags.php',
+			'echo' => 0
+		));
+		if($pages && $pages[0]->ID !== get_option('page_on_front')) $breadcrumb .= '<a href="' . get_page_link($pages[0]->ID) . '" title="' . $pages[0]->post_title . '">' . $pages[0]->post_title . '</a>' . $separator;
+		$breadcrumb .= '<span class="trail-end">' . single_tag_title(false,false) . '</span>';
+
+// Authors
+	elseif(is_author()) :
+		$pages = get_pages(array(
+			'title_li' => '',
+			'meta_key' => '_wp_page_template',
+			'meta_value' => 'authors.php',
+			'echo' => 0
+		));
+		if($pages && $pages[0]->ID !== get_option('page_on_front')) $breadcrumb .= '<a href="' . get_page_link($pages[0]->ID) . '" title="' . $pages[0]->post_title . '">' . $pages[0]->post_title . '</a>' . $separator;
+		$breadcrumb .= '<span class="trail-end">' . wp_title(false,false,false) . '</span>';
+
+// Search
+	elseif(is_search()) :
+		$breadcrumb .= '<span class="trail-end">' . __('Search results for','hybrid') . ' &quot;' . attribute_escape(get_search_query()) . '&quot;</span>';
+
+// Day
+	elseif(is_day()) :
+		$pages = get_pages(array(
+			'title_li' => '',
+			'meta_key' => '_wp_page_template',
+			'meta_value' => 'archives.php',
+			'echo' => 0
+		));
+		if($pages && $pages[0]->ID !== get_option('page_on_front')) $breadcrumb .= '<a href="' . get_page_link($pages[0]->ID) . '" title="' . $pages[0]->post_title . '">' . $pages[0]->post_title . '</a>' . $separator;
+		$breadcrumb .= '<a href="' . get_year_link(get_the_time('Y')) . '" title="' . get_the_time(__('Y','hybrid')) . '">' . get_the_time(__('Y','hybrid')) . '</a>' . $separator;
+		$breadcrumb .= '<a href="' . get_month_link(get_the_time('Y'), get_the_time('m')) . '" title="' . get_the_time(__('F','hybrid')) . '">' . get_the_time(__('F','hybrid')) . '</a>' . $separator;
+		$breadcrumb .= '<span class="trail-end">' . get_the_time(__('j','hybrid')) . '</span>';
+
+// Month
+	elseif(is_month()) :
+		$pages = get_pages(array(
+			'title_li' => '',
+			'meta_key' => '_wp_page_template',
+			'meta_value' => 'archives.php',
+			'echo' => 0
+		));
+		if($pages && $pages[0]->ID !== get_option('page_on_front')) $breadcrumb .= '<a href="' . get_page_link($pages[0]->ID) . '" title="' . $pages[0]->post_title . '">' . $pages[0]->post_title . '</a>' . $separator;
+		$breadcrumb .= '<a href="' . get_year_link(get_the_time('Y')) . '" title="' . get_the_time(__('Y','hybrid')) . '">' . get_the_time(__('Y','hybrid')) . '</a>' . $separator;
+		$breadcrumb .= '<span class="trail-end">' . get_the_time(__('F','hybrid')) . '</span>';
+
+// Year
+	elseif(is_year()) :
+		$pages = get_pages(array(
+			'title_li' => '',
+			'meta_key' => '_wp_page_template',
+			'meta_value' => 'archives.php',
+			'echo' => 0
+		));
+		if($pages && $pages[0]->ID !== get_option('page_on_front')) $breadcrumb .= '<a href="' . get_page_link($pages[0]->ID) . '" title="' . $pages[0]->post_title . '">' . $pages[0]->post_title . '</a>' . $separator;
+		$breadcrumb .= '<span class="trail-end">' . get_the_time(__('Y','hybrid')) . '</span>';
+
+// 404
+	elseif(is_404()) :
+		$breadcrumb .= '<span class="trail-end">' . __('404 Not Found','hybrid') . '</span>';
+
+	endif;
+
+// End the breadcrumb
+	$breadcrumb .= $after . '</div>';
+
+// Output the breadcrumb
+	if($echo)
+		echo $breadcrumb;
+	else
+		return $breadcrumb;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/comments.php b/wp-content/themes/vanilla/_hybrid/comments.php
new file mode 100755
index 0000000000000000000000000000000000000000..465df5942a6251a3c5251a4dcef803eaa717c932
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/comments.php
@@ -0,0 +1,225 @@
+<?php
+
+/**
+* Better display of avatars in comments
+* Should only be used in comment sections (may update in future)
+* Checks for false empty commenter URLs 'http://' w/registered users
+* Adds the class 'photo' to the image
+* Adds a call to HYBRID_IMAGES . '/trackback.jpg' for trackbacks
+* Adds a call to HYBRID_IMAGES . '/pingback.jpg' for pingbacks
+*
+* Filters should only return a string for an image URL for the avatar with class $avatar
+* They should not get the avatar as this is done after the filter
+*
+* @since 0.2
+* @filter
+*/
+function hybrid_avatar() {
+	global $comment, $hybrid_settings;
+
+	$url = get_comment_author_url();
+
+	$comment_type = get_comment_type();
+
+	if($comment_type == 'trackback')
+		$avatar = HYBRID_IMAGES . '/trackback.jpg';
+
+	elseif($comment_type == 'pingback')
+		$avatar = HYBRID_IMAGES . '/pingback.jpg';
+
+	elseif($hybrid_settings['default_avatar'])
+		$avatar = $hybrid_settings['default_avatar'];
+
+	$avatar = apply_filters('hybrid_avatar', $avatar);
+
+	if($url == true && $url != 'http://')
+		echo '<a href="' . $url . '" rel="external nofollow" title="' . get_comment_author() . '">';
+
+	echo str_replace("class='avatar", "class='photo avatar", get_avatar(get_comment_author_email(), '80', $avatar));
+
+	if($url == true && $url != 'http://')
+		echo '</a>';
+}
+
+/**
+* Displays individual comments
+* Uses the callback parameter for wp_list_comments
+* Overwrites the default display of comments
+*
+* @since 0.2.3
+*
+* @param $comment The comment variable
+* @param $args Array of arguments passed from wp_list_comments
+* @param $depth What level the particular comment is
+*/
+function hybrid_comments_callback($comment, $args, $depth) {
+	$GLOBALS['comment'] = $comment;
+	$GLOBALS['comment_depth'] = $depth;
+?>
+
+	<li id="comment-<?php comment_ID(); ?>" class="<?php hybrid_comment_class(); ?>">
+
+		<?php hybrid_avatar(); // Avatar filter ?><div class="comment-meta-data">
+
+			<div class="comment-author vcard">
+				<?php hybrid_comment_author(); ?>
+			</div>
+
+			<abbr class="comment-time" title="<?php comment_date(__('F jS, Y, g:i a (P - e)','hybrid')); ?>">
+				<?php printf(__('%1$s at %2$s','hybrid'), get_comment_date(), get_comment_time()); ?>
+			</abbr> 
+
+			<span class="separator">|</span> 
+			<a class="permalink" href="#comment-<?php comment_ID(); ?>" title="<?php _e('Permalink to comment','hybrid'); ?>"><?php _e('Permalink','hybrid'); ?></a>
+
+			<?php
+				if((get_option('thread_comments')) && ($args['type'] == 'all' || get_comment_type() == 'comment')) :
+					$max_depth = get_option('thread_comments_depth');
+					echo comment_reply_link(array(
+						'reply_text' => __('Reply','hybrid'), 
+						'login_text' => __('Log in to reply.','hybrid'),
+						'depth' => $depth,
+						'max_depth' => $max_depth, 
+						'before' => '<span class="separator">|</span> <span class="comment-reply-link">', 
+						'after' => '</span>'
+					));
+				endif;
+			?>
+
+			<?php edit_comment_link('<span class="edit">'.__('Edit','hybrid').'</span>',' <span class="separator">|</span> ',''); ?> 
+
+			<?php if($comment->comment_approved == '0') : ?>
+				<em><?php _e('Your comment is awaiting moderation.','hybrid'); ?></em>
+			<?php endif; ?>
+
+		</div>
+
+		<div class="comment-text">
+			<?php comment_text(); ?>
+		</div>
+<?php
+}
+
+/**
+* Ends the display of individual comments
+* Uses the callback parameter for wp_list_comments
+* Needs to be used in conjunction with hybrid_comments_callback
+* Not needed but used just in case something is changed
+*
+* @since 0.2.3
+*/
+function hybrid_comments_end_callback() {
+	echo '</li>';
+}
+
+/**
+* Sets a class for each comment
+* Sets alt, odd/even, and author/user classes
+* Adds author, user, and reader classes
+*
+* @since 0.2
+*/
+function hybrid_comment_class() {
+	global $comment;
+	static $comment_alt;
+	$classes = array();
+
+	if(function_exists('get_comment_class'))
+		$classes = get_comment_class();
+
+	$classes[] = get_comment_type();;
+
+	/*
+	* User classes
+	*/
+	if($comment->user_id > 0 && $user = get_userdata($comment->user_id)) :
+
+		$classes[] = 'user user-' . $user->user_nicename;
+
+		if($post = get_post($post_id)) :
+			if($comment->user_id === $post->post_author)
+				$classes[] = 'author author-' . $user->user_nicename;
+		endif;
+	else :
+		$classes[] = 'reader';
+	endif;
+
+	/*
+	* Alt classes
+	*/
+	if($comment_alt++ % 2) :
+		$classes[] = 'even';
+		$classes[] = 'alt';
+	else :
+		$classes[] = 'odd';
+	endif;
+
+	/*
+	* http://microid.org
+	*/
+	$email = get_comment_author_email();
+	$url = get_comment_author_url();
+	if(!empty($email) && !empty($url)) {
+		$microid = 'microid-mailto+http:sha1:' . sha1(sha1('mailto:'.$email).sha1($url));
+		$classes[] = $microid;
+	}
+
+
+	$classes = join(' ', $classes);
+
+	echo $classes;
+}
+
+/**
+* Properly displays comment author name/link
+* bbPress and other external systems sometimes don't set a display name for registrations
+* WP has problems if no display name is set
+* WP gives registered users URL of 'http://' if none is set
+*
+* @since 0.2.2
+*/
+function hybrid_comment_author() {
+	global $comment;
+
+	$author = get_comment_author();
+	$url = get_comment_author_url();
+
+	/*
+	* Registered members w/o URL defaults to 'http://'
+	*/
+	if($url == 'http://')
+		$url = false;
+
+	/*
+	* Registered through bbPress sometimes leaves no display name
+	* Bug with bbPress 0.9 series and WP 2.5 (no later testing)
+	*/
+	if(!$author && $comment->user_id > 0) :
+		$user = get_userdata($comment->user_id);
+		if($user->display_name !== '')
+			$author = $user->display_name;
+		elseif($user->user_nickname !== '')
+			$author = $user->nickname;
+		elseif($user->user_nicename !== '')
+			$author = $user->user_nicename;
+		else
+			$author = $user->user_login;
+	endif;
+
+	/*
+	* Display link and cite if URL is set
+	* Also properly cites trackbacks/pingbacks
+	*/
+	if($url) :
+		$output = '<cite title="' . $url . '">';
+		$output .= '<a href="' . $url . '" title="' . $author . '" class="external nofollow">' . $author . '</a>';
+		$output .= '</cite>';
+	else :
+		$output = '<cite>';
+		$output .= $author;
+		$output .= '</cite>';
+	endif;
+
+	echo $output;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/deprecated.php b/wp-content/themes/vanilla/_hybrid/deprecated.php
new file mode 100755
index 0000000000000000000000000000000000000000..a7b435b08566a7554b3f331d0397e5e68dce844f
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/deprecated.php
@@ -0,0 +1,94 @@
+<?php
+
+/**
+* get_the_image_link()
+* Catchall function for getting images with a link
+*
+* @since 0.1
+* @deprecated 0.2.3
+* @replaced get_the_image() now handles an echo argument
+*/
+function get_the_image_link($args = array(), $deprecated =false, $deprecated_2 = false) {
+	get_the_image($args, $deprecated, $deprecated_2);
+}
+
+/**
+* Returns an array of the available tags (slugs)
+*
+* @since 0.2
+* @deprecated 0.2.3
+* @return array
+* @replaced with hybrid_all_tag_slugs() for proper naming conventions
+*/
+function hybrid_all_tags() {
+	$tags = hybrid_all_tag_slugs();
+	return $tags;
+}
+
+/**
+* hybrid_page_id()
+* Dynamic page ID
+*
+* @since 1.0
+* @deprecated 0.2
+*/
+function hybrid_page_id() {
+
+	if(is_front_page() || is_home() && !is_paged()) :
+		$page_id = 'home';
+	else :
+		$page_id = 'content';
+	endif;
+
+	return $page_id;
+}
+
+/**
+* hybrid_page_class()
+* Dynamic page class
+*
+* @since 0.1
+* @deprecated 0.2
+*/
+function hybrid_page_class() {
+
+	if(is_front_page() || is_home()) : $class = 'home front-page';
+	elseif(is_attachment()) : $class = 'attachment';
+	elseif(is_single()) : $class = 'single';
+	elseif(is_page()) : $class = 'page';
+	elseif (is_category()) : $class = 'category';
+	elseif(is_tag()) : $class = 'tag';
+	elseif(is_search()) : $class = 'search';
+	elseif (is_404()) : $class = 'error-404';
+	elseif(is_year()) : $class = 'year';
+	elseif(is_month()) : $class = 'month';
+	elseif(is_day()) : $class = 'day';
+	elseif(is_time()) : $class = 'time';
+	elseif(is_author()) : $class = 'author';
+	endif;
+
+	if(is_date()) $class .= ' date';
+	if(is_archive()) $class .= ' archive';
+	if(is_paged()) $class .= ' paged';
+
+	echo $class;
+}
+
+
+/*
+	=== Removed Functions ===
+*/
+
+/**
+* hybrid_get_insert()
+* Function for getting insert
+* Replacement for get_sidebar()
+*
+* @since 0.1
+* @removed 0.2.2
+*/
+function hybrid_get_insert() {
+	_e('This function has been removed or replaced by another function.','hybrid');
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/filters.php b/wp-content/themes/vanilla/_hybrid/filters.php
new file mode 100755
index 0000000000000000000000000000000000000000..4b6888b5e3a9b00b342753b1be025a9159dcef5a
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/filters.php
@@ -0,0 +1,325 @@
+<?php
+
+/* Functions that can be filtered or that filter other functions. */
+
+// Filters to be added
+	add_filter('comments_template', 'hybrid_legacy_comments');
+
+/**
+* Filters the comments_template() function
+* Grabs the file legacy.comments.php if older than WP 2.7
+*
+* @since 0.3
+* @return return $file legacy.comments.php
+*/
+function hybrid_legacy_comments($file) {
+	if(!function_exists('wp_list_comments')) :
+		$file = HYBRID_LEGACY . '/legacy.comments.php';
+	endif;
+	return $file;
+}
+
+/**
+* Shows the allowed tags on the comment form
+*
+* @since 0.2.2
+* @filter
+* @hook comment_form()
+*/
+function hybrid_allowed_tags() {
+
+	$tags = array();
+
+	$tags[] = '&lt;a href=&quot;&quot; title=&quot;&quot;&gt;';
+	$tags[] = '&lt;abbr title=&quot;&quot;&gt;';
+	$tags[] = '&lt;acronym title=&quot;&quot;&gt;';
+	$tags[] = '&lt;blockquote cite=&quot;&quot;&gt;';
+	$tags[] = '&lt;cite&gt;';
+	$tags[] = '&lt;code&gt;';
+	$tags[] = '&lt;del datetime=&quot;&quot;&gt;';
+	$tags[] = '&lt;em&gt;';
+	$tags[] = '&lt;q cite=&quot;&quot;&gt;';
+	$tags[] = '&lt;strong&gt;';
+
+	$tags = join(' ', $tags);
+
+	echo '<p class="allowed-tags">';
+	echo '<strong>' . __('You can use these <acronym title="Extensible Hypertext Markup Language">XHTML</acronym> tags&#58;','hybrid') . '</strong> ';
+	echo apply_filters('hybrid_allowed_tags', $tags);
+	echo '</p>';
+}
+
+/**
+* Dynamic site title element
+* Wrap in an <h1> element if on the home page
+* All other pages, wrap in <div>
+*
+* @since 0.1
+* @filter
+*/
+function hybrid_site_title() {
+	if(is_home() || is_front_page()) $tag = 'h1';
+	else $tag = 'div';
+
+	$name = '<' . $tag . ' id="site-title">';
+	$name .= '<a href="' . get_bloginfo('url') . '" title="' . get_bloginfo('name') . '"><span>' . get_bloginfo('name') . '</span></a>';
+	$name .= '</' . $tag . '>';
+
+	echo apply_filters('hybrid_site_title', $name);
+}
+
+/**
+* Dynamic site description element
+* Add <h2> around the description if on the home page
+* Add <div> for all other pages
+*
+* @since 0.1
+* @filter
+*/
+function hybrid_site_description() {
+	if(is_home() || is_front_page()) $tag = 'h2';
+	else $tag = 'div';
+
+	$desc = '<' . $tag . ' id="site-description">';
+	$desc .= '<span>' . get_bloginfo('description') . '</span>';
+	$desc .= '</' . $tag . '>';
+
+	echo apply_filters('hybrid_site_description', $desc);
+}
+
+/**
+* Filterable page navigation
+* Users should filter wp_page_menu() or wp_page_menu_args() if only changing links
+* wp_page_menu() recreated in legacy.functions.php (pre-WP 2.7)
+*
+* @since 0.1
+* @hook hybrid_after_header
+* @filter
+*/
+function hybrid_page_nav() {
+	echo "<div id='navigation'>\n\t\t";
+
+	hybrid_before_page_nav(); // Before navigation hook
+
+		if(is_front_page() || is_home()) $home = 'current_page_item';
+		else $home = 'page_item';
+
+		$nav = wp_page_menu('show_home=Home&menu_class=page-nav&depth=1&echo=0');
+
+		echo apply_filters('hybrid_page_nav', $nav);
+
+	hybrid_after_page_nav(); // After navigation hook
+
+	echo "\t</div>\n";
+}
+
+
+/**
+* Filterable category navigation block
+* Users should filter hybrid_category_menu() if only wanting to filter links
+* This should only be filtered if directly adding something outside of the nav list
+* Also, added hooks for before and after
+* This will allow for custom content to be added in the same div
+*
+* @since 0.1
+* @filter
+*/
+function hybrid_cat_nav() {
+	echo "\n\t<div id='cat-navigation'>\n\t\t";
+
+	hybrid_before_cat_nav(); // Before category navigation
+
+	$nav = hybrid_category_menu('menu_class=cat-nav&echo=0');
+	echo apply_filters('hybrid_cat_nav',$nav);
+
+	hybrid_after_cat_nav(); // After category navigation hook
+
+	echo "\n\t</div>\n";
+}
+
+/**
+* Menu listing for categories
+* Much like WP 2.7's wp_page_menu() functionality
+* Ability to easily filter or call hybrid template tag to show cat list
+* Add all the default arguments of wp_list_categories()
+* Always set the title_li paramater to false b/c this is a menu list
+*
+* Allow users to filter the function in child themes
+* Filter should return an array of arguments for $cats
+*
+* @since 0.2.3
+* @param array Optional $args
+* Ability to add a home link with show_home=Home
+* @filter hybrid_category_menu_args to filter arguments
+* @filter hybrid_category_menu to filter entire menu
+*/
+function hybrid_category_menu($args = array()) {
+
+	$defaults = array(
+		'show_home' => false,
+		'menu_class' => 'cat-nav',
+		'show_option_all' => '',
+		'orderby' => 'name',
+		'order' => 'ASC',
+		'show_last_update' => 0,
+		'style' => 'list',
+		'show_count' => 0,
+		'hide_empty' => 1,
+		'use_desc_for_title' => 0,
+		'child_of' => 0,
+		'feed' => '',
+		'feed_image' => '',
+		'exclude' => '',
+		'depth' => 1,
+		'orderby' => 'name',
+		'hierarchical' => true,
+		'echo' => 1
+	);
+
+	// Allow filter of arguments
+	$args = apply_filters('hybrid_category_menu_args', $args);
+
+	$args = wp_parse_args($args, $defaults);
+	extract($args);
+
+	if($echo) :
+		$echo = false;
+		$echo_menu = true;
+	endif;
+
+	$args = array(
+		'title_li' => false,
+		'show_option_all' => $show_option_all,
+		'orderby' => $orderby,
+		'order' => $order,
+		'show_last_update' => $show_last_update,
+		'style' => $style,
+		'show_count' => $show_count,
+		'hide_empty' => 1,
+		'use_desc_for_title' => $use_descr_for_title,
+		'child_of' => $child_of,
+		'feed' => $feed,
+		'feed_image' => $feed_image,
+		'exclude' => $exclude,
+		'depth' => $depth,
+		'hierarchical' => $hierarchical,
+		'echo' => false
+	);
+
+	if($show_home) :
+		$cats[0] = '<li class="' . $home . '"><a href="' . get_bloginfo('url') . '" title="' . $show_home . '">' . $show_home . '</a></li>';
+	endif;
+
+	$cats[1] = str_replace(array("\t","\n","\r"), '', wp_list_categories($args));
+
+	$cats = join('', $cats);
+
+	$menu = '<div id="' . $menu_class . '"><ul>' . $cats . '</ul></div>';
+
+	$menu = apply_filters('hybrid_category_menu', $menu);
+
+	if($echo_menu) :
+		echo $menu;
+	else :
+		return $menu;
+	endif;
+}
+
+/**
+* Displays a search form
+* Iterates for each search form called so no repeat IDs
+*
+* @since 0.1
+* @filter
+*/
+
+function hybrid_search_form() {
+
+	global $search_form_num;
+	if(!$search_form_num)
+		$search_num = false;
+	else
+		$search_num = '-' . $search_form_num;
+
+	if(is_search()) $search_text = attribute_escape(get_search_query());  
+	else $search_text = __('Search this site...','hybrid');
+
+	$search = "\n\t\t<div id='search" . $search_num . "'>\n\t\t\t";
+		$search .= '<form method="get" class="search-form" id="search-form' . $search_num . '" action="' . get_bloginfo("home") . '">';
+		$search .= '<div>';
+		$search .= '<input class="search-text" type="text" name="s" id="search-text' . $search_num . '" tabindex="7" value="' . $search_text . '" onfocus="if(this.value==this.defaultValue)this.value=\'\';" onblur="if(this.value==\'\')this.value=this.defaultValue;" />';
+		$search .= '<input class="search-submit button" name="submit" type="submit" id="search-submit' . $search_num . '" tabindex="8" value="' . __('Search','hybrid') . '" />';
+		$search .= '</div>';
+		$search .= '</form>';
+	$search .= "\n\t\t</div>\n";
+
+	echo apply_filters('hybrid_search_form',$search);
+	$search_form_num++;
+}
+
+/**
+* Ability to design custom sidebars with/without widgets
+* Changed from action to filter in 0.2.2
+* Only useful if adding completely custom sidebars/widget areas
+* One could simply create a custom function and hook it w/o using this function
+*
+* @since 0.2
+* @filter
+*/
+function hybrid_insert() {
+	$insert = false;
+	echo apply_filters('hybrid_insert', $insert);
+}
+
+/**
+* Displays site copyright info with link back to site
+* Can be removed/added through theme settings
+*
+* @since 0.1
+* @filter
+*/
+function hybrid_copyright() {
+
+	global $hybrid_settings;
+
+	if($hybrid_settings['copyright']) :
+
+		$copyright = '<p class="copyright">';
+		$copyright .= '<span class="text">' . __('Copyright','hybrid') . ' &#169; ' . date(__('Y','hybrid')) . '</span> <a href="' . get_bloginfo('url') . '" title="' . get_bloginfo('name') . '" rel="bookmark"><span>' . get_bloginfo('name') . '</span></a>. ';
+		$copyright .= '</p>';
+
+	endif;
+
+	echo apply_filters('hybrid_copyright', $copyright);
+}
+
+/**
+* Displays Hybrid and/or WordPress credit links
+* Can be added/removed through theme settings
+*
+* @since 0.1
+* @filter
+*/
+function hybrid_credit() {
+
+	global $hybrid_settings;
+
+	if($hybrid_settings['wp_credit'] || $hybrid_settings['th_credit']) :
+
+		$data = get_theme_data(TEMPLATEPATH . '/style.css');
+
+		$credit = '<p class="credit">';
+		$credit .= '<span class="text">' . __('Powered by','hybrid') . '</span>';
+		if($hybrid_settings['wp_credit'])
+			$credit .= ' <a href="http://wordpress.org" class="wp-link" title="' . __('Powered by WordPress, state-of-the-art semantic personal publishing platform','hybrid') . '"><span>' . __('Wordpress','hybrid') . '</span></a>';
+		if($hybrid_settings['wp_credit'] && $hybrid_settings['th_credit'])
+			$credit .= ' <span class="text">' . __('and','hybrid') . '</span> ';
+		if($hybrid_settings['th_credit'])
+			$credit .= ' <a class="hybrid-link" href="' . $data['URI'] . '" title="' . __('Hybrid Theme Framework','hybrid') . '">' . __('Hybrid','hybrid') . '</a>';
+		$credit .= '.</p>';
+
+	endif;
+
+	echo apply_filters('hybrid_credit', $credit);
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/functions.php b/wp-content/themes/vanilla/_hybrid/functions.php
new file mode 100755
index 0000000000000000000000000000000000000000..0029f03cd24887f74780c7e5db402b5ef6f0ba24
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/functions.php
@@ -0,0 +1,473 @@
+<?php
+
+/**
+* Gets legacy functions if needed
+* For versions pre-2.7
+*
+* @since 0.3
+*/
+function hybrid_legacy_functions() {
+	if(!function_exists('wp_list_comments'))
+		require_once(HYBRID_LEGACY . '/legacy.functions.php');
+}
+
+/**
+* Checks if the template exists and returns appropriate link
+* Useful for log in, publish, and registration templates and functions
+*
+* @since 0.3
+* @return link
+*/
+function hybrid_template_in_use($template = false) {
+	$link = false;
+	if($template) :
+		$pages = get_pages(array(
+			'title_li' => '',
+			'meta_key' => '_wp_page_template',
+			'meta_value' => $template,
+			'echo' => 0
+		));
+		if($pages[0]->ID) :
+			$link = get_permalink($pages[0]->ID);
+		else :
+			if($template == 'log-in.php') :
+				$link = get_option('siteurl') . '/wp-login.php?redirect_to=' . urlencode(get_permalink());
+			elseif($template == 'register.php') :
+				$link = get_option('siteurl') . '/wp-register.php';
+			endif;
+		endif;
+	endif;
+	return $link;
+}
+
+/**
+* Checks for capabilities assigned to current user
+* Capability is pulled by use of the custom field key Capability or capability
+* Multiple capabilities can be set as values with a single custom field key
+* Users can also directly input a single capability into the function
+* If no custom field is set or capability added, defaults to is_user_logged_in()
+*
+* @since 0.2.3
+*
+* @param array Optional
+* Input an array of custom field keys (on posts/pages) to check for values (capabilities)
+* Input an array of capabilities to check
+* Can set $logged_in to false if checking for capabilities only (default: true)
+* Else, the script simply checks for logged in users failing any input capabilities
+*
+* @return true/false
+* @reference http://codex.wordpress.org/Roles_and_Capabilities
+*/
+function hybrid_capability_check($args = array()) {
+
+	/*
+	* Set up defaults and mix with $args
+	*/
+	$defaults = array(
+		'custom_key' => array('Capability','capability'),
+		'capability' => array(),
+		'logged_in' => true,
+	);
+
+	$args = wp_parse_args($args, $defaults);
+	extract($args);
+
+	/*
+	* If is post/page, check for custom fields
+	*/
+	if(is_single() || is_page()) :
+		global $post;
+		foreach($custom_key as $key) :
+			$caps = get_post_meta($post->ID, $key, false);
+			if(!empty($caps))
+				break;
+		endforeach;
+	endif;
+
+	/*
+	* Check if there are any arguments set for capabilities
+	*/
+	if(!empty($capability)) :
+		foreach($capability as $cap) :
+			$caps[] = $cap;
+		endforeach;
+	endif;
+
+	/*
+	* Loop through each capability
+	* Check if the currently logged in user has permission
+	* If there are no capabilities set, check if the user is logged in
+	*/
+	if(!empty($caps)) :
+		foreach($caps as $cap) :
+			if(current_user_can($cap)) :
+				$capable = true;
+				break;
+			else :
+				$capable = false;
+			endif;
+		endforeach;
+		return $capable;
+	else :
+		/*
+		* If $logged_in is set to true, check
+		*/
+		if($logged_in) :
+			if(is_user_logged_in())
+				return true;
+			else
+				return false;
+		else :
+			return false;
+		endif;
+	endif;
+}
+
+/**
+* Error output message
+* Shouldn't be used much, but just in case, it's here
+*
+* @since 0.2
+* @echo string
+*/
+function hybrid_error() {
+	_e('You have encountered an error. This is usually because you\'ve changed something in the core Hybrid theme files. Try undoing your last edit to correct this issue. If this doesn\'t resolve it, head over to the support forums for help.','hybrid');
+}
+
+/**
+* Display footnotes at the bottom of posts or pages
+* Collects data from custom field key Footnote
+* Only show footnotes on single posts and pages
+*
+* @since 0.3
+* return Footnotes in an ordered list appended to bottom of post
+*/
+function hybrid_footnote() {
+	if(is_single() || is_page()) :
+		global $post;
+		$footnotes = get_post_meta($post->ID, 'Footnote', false);
+		if(!empty($footnotes)) :
+			$content = '<ol class="footnotes">';
+			$i = 1;
+			foreach($footnotes as $note) :
+				$content .= '<li id="footnote-' . $i . '" class="footnote-' . $i . '">' . $note . ' <a href="#f' . $i . '" class="return">&#8617;</a></li>';
+				$i++;
+			endforeach;
+			$content .= '</ol>';
+		endif;
+	endif;
+	//return $content;
+	echo $content;
+}
+
+/**
+* Function to load SimplePie correctly
+* Checks for the existence of the '/cache/' folder
+* Creates the folder if none exists
+* Chmods the '/cache/' folder
+*
+* Not loaded by default (only added for use with plugins/child themes)
+*
+* @since 0.2.3
+* @reference http://simplepie.org
+*/
+function hybrid_load_SimplePie() {
+	if(!class_exists('SimplePie')) :
+		include_once(HYBRID_EXTENSIONS . '/simplepie.inc');
+		if(!file_exists(HYBRID_EXTENSIONS . '/cache/')) :
+			mkdir(HYBRID_EXTENSIONS . '/cache/', 0777);	
+			chmod(HYBRID_EXTENSIONS . '/cache/', 0777);
+		endif;
+	endif;
+}
+
+/**
+* Uses SimplePie to display feeds
+* Must load SimplePie before using
+* Load SimplePie with hybrid_load_SimplePie()
+*
+* @since 0.2.3
+*
+* @param array $args
+* Not Optional: $feed can be a single feed or an array of feeds
+* All other arguments are optional
+* $class = CSS class for each item, which is also iterated
+* $limit = How many items to display
+* $format = XHTML element to wrap around each item
+* $date = How to format the date
+* $cache = Cache feeds for (mins)
+* $echo = echo the feeds (true) or return for use in an array (false)
+*
+* @reference http://simplepie.org
+*/
+function hybrid_lifestream($args = array()) {
+
+	if(!$args['feed'])
+		return;
+
+	$defaults = array(
+		'feed' => false, // Can be multiple feeds input by array
+		'class' => 'lifestream',
+		'limit' => 10,
+		'format' => 'li',
+		'date' => __('F jS, Y','hybrid'),
+		'cache' => 60,
+		'echo' => true
+	);
+
+	$r = wp_parse_args($args, $defaults);
+
+	extract($r);
+
+// Throw the feeds into SimplePie
+	$feeds = new SimplePie($feed, HYBRID_EXTENSIONS . '/cache', 60 * $cache);
+ 
+// Iterator
+	$count = 1;
+
+// Loop through each feed item
+	foreach($feeds->get_items(0,$limit) as $item) :
+
+	// Date
+		$item_date = $item->get_date($date);
+		if($stored_date != $item_date)
+			$stored_date = $item_date;
+
+	// Put together the feed item
+		$output = '<' . $format . ' class="' . $class . ' '. $class . '-' . $count . '">';
+		$output .= '<abbr class="published time date" title="' . $stored_date . '>' . $stored_date . '</span>: <a href="' . $item->get_permalink() . '" title="' . $item->get_title() . '">';
+		$output .= $item->get_title();
+		$output .= '</a></' . $format . '>';
+
+	// Echo
+		if($echo)
+			echo $output;
+		else
+			$output_arr[] = $output;
+
+	// Iterate
+		$count++;
+	endforeach;
+
+	if(!$echo)
+		return $output_arr;
+}
+
+/**
+* Displays query count and load time
+* Appended to the footer if set
+* Option to add this from the theme settings page
+*
+* @since 0.2.1
+* @hook wp_footer()
+*/
+function hybrid_query_counter() {
+	global $hybrid_settings;
+	if($hybrid_settings['query_counter']) :
+		echo '<p class="query-count">';
+		printf(__('This page loaded in %1$s seconds with %2$s database queries.', 'hybrid'), timer_stop(0,3), get_num_queries());
+		echo '</p>';
+	endif;
+}
+
+/**
+* Returns an array of available categories
+* Returns categories by name
+* Most calls should use hybrid_all_cat_slugs() if possible when using query_posts()
+* Addition of 'none' category for use on the theme settings page
+*
+* @since 0.2
+* @return array
+*/
+function hybrid_all_cats() {
+	$all_cats = get_all_category_ids();
+	foreach($all_cats as $key => $value) :
+		$all_cats[$key] = get_cat_name($all_cats[$key]);
+		$all_cats[$key] = str_replace("&#038;", "&", $all_cats[$key]);
+		$all_cats[$key] = str_replace("&amp;","&", $all_cats[$key]);
+	endforeach;
+	$all_cats['none'] = false;
+	return $all_cats;
+}
+
+/**
+* Returns an array of available category slugs
+* Better for use when eventually using query_posts() by category_name
+* query_posts() doesn't like non-matching names/slugs
+* Addition of 'none' category for use on the theme settings page
+*
+* @since 0.2
+* @return array
+*/
+function hybrid_all_cat_slugs() {
+	$cats = get_categories("hierarchical=0");
+	foreach($cats as $key) :
+		$all_cats[] = $key->category_nicename;
+	endforeach;
+	$all_cats['none'] = false;
+	return $all_cats;
+}
+
+/**
+* Returns an array of the available tags (slugs)
+* Addition of 'none' tag for use on the theme settings page
+*
+* @since 0.2
+* @renamed 0.2.3
+* @return array
+*/
+function hybrid_all_tag_slugs() {
+	$all_tags = wp_tag_cloud('number=0&format=array');
+	if($all_tags) :
+		foreach($all_tags as $key => $value) :
+			$value = strip_tags(stripslashes($value));
+			$value = strtolower($value);
+			$value = str_replace(array("&nbsp;", " "), "-", $value);
+			$all_tags[$key] = $value;
+		endforeach;
+	endif;
+	$all_tags['none'] = false;
+	return $all_tags;
+}
+
+/**
+* Function for handling what the browser/search engine title should be
+* Tries to handle every situation to make for the best SEO
+* Check for All-in-One SEO and HeadSpace2 for compatibility
+*
+* @since 0.1
+* @plugin Optional http://wordpress.org/extend/plugins/all-in-one-seo-pack
+* @plugin Optional http://wordpress.org/extend/plugins/headspace2
+* @echo string
+*/
+function hybrid_document_title() {
+	global $post, $wp_query, $hybrid_settings;
+	
+	/*
+	* Make compatible with plugins
+	* All-in-One SEO Pack
+	* HeadSpace2
+	*/
+	if(class_exists('All_in_One_SEO_Pack') || class_exists('HeadSpace2_Admin')) :
+		if(is_front_page() || is_home()) :
+			echo get_bloginfo('name') . ': ' . get_bloginfo('description');
+		else :
+			wp_title('');
+		endif;
+	else :
+
+	/*
+	* Custom field Title replaces title on posts, pages
+	* Custom field Subtitle appended to title on posts, pages
+	*/
+		if(is_single() || is_page()) :
+			$title = get_post_meta($post->ID, 'Title', $single = true);
+			if($title) :
+				echo str_replace('"', '&quot;', stripslashes($title));
+			else :
+				single_post_title();
+				$subtitle = get_post_meta($post->ID, 'Subtitle', $single = true);
+				if($subtitle) echo ': '. str_replace('"', '&quot;', stripslashes($subtitle));
+			endif;
+
+		elseif(is_front_page() || is_home()) :
+			echo bloginfo('name'); echo ": "; echo bloginfo('description');
+		elseif(is_attachment()) :
+			single_post_title();
+		elseif(is_single()) :
+			single_post_title();
+		elseif(is_page()) :
+			single_post_title();
+		elseif(is_category()) :
+			single_cat_title();
+		elseif(is_tag()) :
+			single_tag_title();
+		elseif(is_search()) :
+			echo __('Search results for','hybrid') . ' &quot;' . attribute_escape(get_search_query()) . '&quot;';
+		elseif(is_day()) :
+			printf(__('Archive for %1$s','hybrid'), get_the_time(__('F jS, Y','hybrid')));
+		elseif(is_month()) :
+			printf(__('Archive for %1$s','hybrid'), single_month_title(' ', false));
+		elseif(is_year()) :
+			printf(__('Archive for %1$s','hybrid'), get_the_time(__('Y','hybrid')));
+		elseif(is_comments_popup()) :
+			printf(__('Comment on &quot;%1$s&quot;','hybrid'), single_post_title(false,false));
+		elseif(is_404()) :
+			_e('404 Not Found','hybrid');
+		else :
+			echo wp_title('');
+
+		endif;
+
+	// Append blog title if set in theme settings
+		if(($hybrid_settings['seo_blog_title']) && (!is_home() || !is_front_page())) :
+			echo ': ' . get_bloginfo('name');
+		endif;
+
+	endif;
+}
+
+/**
+* Easily create dynamic tables w/PHP
+* Put strings into function for th/td
+* Current functionality only allows for <th> and <td> within <tr> elements
+* Needs to be updated to accomodate more uses
+* Should use an array of arguments, then be parsed with wp_parse_args()
+*
+* @since 0.1
+* @echo XHTML
+*/
+function tabular_data($tabular_data_header = false, $tabular_data = false) {
+
+	echo '<table>';
+		if($tabular_data_header) echo '<tr>';
+
+			foreach($tabular_data_header as $header) :
+				echo '<th>' . $header . '</th>';
+			endforeach;
+
+		if($tabular_data_header) echo '</tr>';
+
+			$tr_class = 'odd';
+
+			foreach($tabular_data as $data) :
+
+				echo '<tr class="' . $tr_class . '">';
+					foreach($data as $value) :
+						echo '<td>' . $value . '</td>';
+					endforeach;
+				echo '</tr>';
+
+				if($tr_class == 'odd') $tr_class = 'even alt';
+				else $tr_class = 'odd';
+
+			endforeach;
+	echo '</table>';
+}
+
+/**
+* Returns all authors with posts
+* Needed for use with the Authors page template
+*
+* @since 0.2.2
+*
+* @param array $args Mixed arguments (currently can only change order_by)
+* @return array Authors with posts
+*/
+function hybrid_get_authors($args = array()) {
+	global $wpdb;
+
+	/*
+	* Set up defaults and mix with $args
+	*/
+	$defaults = array(
+		'order_by' => 'display_name',
+	);
+
+	$args = wp_parse_args($args, $defaults);
+	extract($args);
+
+	$user_ids = $wpdb->get_results("SELECT COUNT(b.ID) AS postsperuser, a.ID as post_id, display_name, user_nicename, b.ID as ID FROM wp_posts AS a LEFT join wp_users AS b ON a.post_author = b.ID GROUP BY b.ID ORDER BY $order_by");
+	return $user_ids;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/get-the-image.php b/wp-content/themes/vanilla/_hybrid/get-the-image.php
new file mode 100755
index 0000000000000000000000000000000000000000..79e6dc7c67aa9bbcd852476438dce987a82f68ab
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/get-the-image.php
@@ -0,0 +1,249 @@
+<?php
+
+/**
+* This is a highly intuitive script file that gets images
+* It first calls for custom field keys
+* If no custom field key is set, check for images "attached" to post
+* Check for image order if looking for attached images
+* Scan the post for images if $image_scan = true
+* Check for default image if there is one set
+*
+* Entirely rewrote the system in 0.2.3
+*
+* @package Hybrid
+* @subpackage Media
+*
+* @since 0.1
+*/
+function get_the_image($args = array()) {
+
+	$defaults = array(
+		'custom_key' => array('Thumbnail','thumbnail'),
+		'post_id' => false, // Build functionality in later
+		'default_size' => 'thumbnail',
+		'default_image' => false,
+		'order_of_image' => 0,
+		'link_to_post' => true,
+		'image_class' => false,
+		'image_scan' => false,
+		'show_caption' => false,
+		'width' => false,
+		'height' => false,
+		'echo' => true
+	);
+
+	$args = wp_parse_args($args, $defaults);
+	extract($args);
+
+	if(!is_array($custom_key)) :
+		$custom_key = str_replace(' ', '', $custom_key);
+		$custom_key = str_replace(array('+'), ',', $custom_key);
+		$custom_key = explode(',', $custom_key);
+		$args['custom_key'] = $custom_key;
+	endif;
+
+	$image = image_by_custom_field($args);
+
+	if(!$image) $image = image_by_attachment($args);
+
+	if(!$image && $image_scan) $image = image_by_scan($args);
+
+	if(!$image && $default_image) $image = image_by_default($args);
+
+	if($image)
+		$image = display_the_image($args, $image);
+
+	else
+		$image = '<!-- No images were added to this post. -->';
+
+	if($echo)
+		echo $image;
+	else
+		return $image;
+}
+
+/**
+* Calls images by custom field key
+* Allow looping through multiple custom fields
+*
+* @since 0.2.3
+* @param $args Not Optional
+* @return array $image, $classes, $alt
+*/
+function image_by_custom_field($args = array()) {
+
+	extract($args);
+
+	if(!$post_id)
+		global $post;
+
+	if(isset($custom_key)) :
+		foreach($custom_key as $custom) :
+			$image = get_post_custom_values($key = $custom);
+			if($image[0]) :
+				$image = $image[0];
+				$classes[] = str_replace(' ', '-', strtolower($custom));
+				break;
+			endif;
+		endforeach;
+		if(!$image)
+			return false;
+	endif;
+
+	$classes[] = $default_size;
+	$alt = $post->post_title;
+
+	return array('image' => $image, 'classes' => $classes, 'alt' => $alt);
+}
+
+/**
+* Check for attachment images
+* Uses get_children() to check if the post has images attached
+*
+* @since 0.2.3
+* @param $args Not Optional
+* @return array $image, $classes, $alt, $caption
+*/
+function image_by_attachment($args = array()) {
+
+	extract($args);
+
+	global $post;
+
+	$classes[] = str_replace(' ', '-', strtolower($custom_key[0]));
+	$classes[] = $default_size;
+	$alt = $post->post_title;
+	if($default_size == 'thumbnail') $show_caption = false;
+
+	/*
+	* Use a WP 2.6 function to check
+	*/
+	if(function_exists('wp_enqueue_style')) :
+		$attachments = get_children(array('post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID'));
+
+	/*
+	* WP 2.5 compatibility
+	*/
+	else :
+		$attachments = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&orderby=\"menu_order ASC, ID ASC\"");
+
+	endif;
+
+	if(!empty($attachments)) :
+		foreach($attachments as $id => $attachment) :
+			if($i == $order_of_image) :
+				$image = wp_get_attachment_image_src($id, $default_size);
+				$image = $image[0];
+				if($show_caption) :
+					$caption = $attachment->post_excerpt;
+					if(!$caption) $caption = $attachment->post_title;
+				endif;
+				break;
+			endif;
+			$i++;
+		endforeach;
+		return array('image' => $image, 'classes' => $classes, 'alt' => $alt, 'caption' => $caption);
+	else :
+		return false;
+	endif;
+}
+
+/**
+* Scans the post for images within the content
+* Not called by default with get_the_image()
+* Shouldn't use if using large images within posts, better to use the other options
+*
+* @since 0.2.3
+* @param $args Not Optional
+* @return $image, $classes, $alt
+*/
+function image_by_scan($args = array()) {
+
+	global $post;
+
+	preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', $post->post_content, $matches);
+
+	if(isset($matches)) $image = $matches[1][0];
+
+	$classes[] = $default_size;
+
+	if($matches)
+		return array('image' => $image, 'classes' => $classes, 'alt' => $post->post_title);
+	else
+		return false;
+}
+
+/**
+* Used for setting a default image
+* Not used with get_the_image() by default
+* Function needed for getting the class and alt text
+*
+* @since 0.2.3
+* @param $args Not Optional
+* @return array $image, $classes, $alt
+function image_by_default($args = array()) {
+
+	extract($args);
+	global $post;
+
+	$image = $default_image;
+	$classes[] = $default_size;
+
+	foreach($custom_key as $key) :
+		$classes[] = $key;
+	endforeach;
+
+	$alt = $post->post_title;
+
+	return array('image' => $image, 'classes' => $classes, 'alt' => $alt);
+}
+
+/**
+* Formats an image with appropriate alt text and class
+* Adds a link to the post if argument is set
+* Should only be called if there is an image to display, but will handle it if not
+*
+* @since 0.1
+* @param $args Not Optional
+* @param $arr Array of image info ($image, $classes, $alt, $caption)
+* @return string Formatted image (w/link to post if the option is set)
+*/
+function display_the_image($args = array(), $arr = false) {
+	global $post;
+
+	extract($arr);
+
+	if($image) :
+		extract($args);
+
+		if($width) $width = ' width="' . $width . '"';
+		if($height) $height = ' height="' . $height . '"';
+
+		$img = $image;
+		$classes[] = $css_class;
+		$class = join(' ', $classes);
+
+		if($caption) :
+			$image = '<div class="wp-caption ' . $class . '">';
+
+			if($link_to_post) $image .= '<a href="' . get_permalink($post->ID) . '" title="' . the_title_attribute('echo=0') . '">';
+			$image .= '<img src="' . $img . '" alt="' . the_title_attribute('echo=0') . '"' . $width . $height . ' />';
+			if($link_to_post) $image .= '</a>';
+			$image .= '<p class="wp-caption-text">' . $caption . '</p></div>';
+
+		else :
+			$image = '';
+			if($link_to_post) $image .= '<a href="' . get_permalink($post->ID) . '" title="' . the_title_attribute('echo=0') . '">';
+			$image .= '<img src="' . $img . '" alt="' . the_title_attribute('echo=0') . '" class="' . $class . '"' . $width . $height . ' />';
+			if($link_to_post) $image .= '</a>';
+
+		endif;
+
+		return $image;
+
+	else :
+		return false;
+
+	endif;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/get-the-video.php b/wp-content/themes/vanilla/_hybrid/get-the-video.php
new file mode 100755
index 0000000000000000000000000000000000000000..42d8886710d3cd28e225c8bb418366682ace76d1
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/get-the-video.php
@@ -0,0 +1,84 @@
+<?php
+/**
+* Set of functions to gather video by custom field
+* Output in XHTML-compliant <object> element
+*
+* @package Hybrid
+* @subpackage Media
+* @since 0.2
+*/
+
+/**
+* get_the_video()
+* Catchall function for getting videos
+*
+* @since 0.2
+*/
+function get_the_video($arr = false, $default = false) {
+	global $post;
+	$cf_array = load_the_video($arr, $post, $default);
+	$video = display_the_video($cf_array);
+	return $video;
+}
+
+/**
+* load_the_video()
+* Function for loading a video
+*
+* @since 0.2
+*/
+function load_the_video($custom_fields = false, $post = false, $default = false) {
+
+// If custom fields and default video are set to false
+if($custom_fields == false && $default == false) :
+	$video = false;
+
+// If custom fields are set
+elseif($custom_fields == true) :
+// Checks only if there are custom fields to check for
+	if(isset($custom_fields)) :
+	// Loop through the custom fields, checking for a video
+		$i = 0;
+		while(strcmp($video[0],'') == 0 && $i <= sizeof($custom_fields)) :
+			$video = get_post_custom_values($key = $custom_fields[$i]);
+		$i++;
+		endwhile;
+	endif;
+
+// If a default is set or no custom field videos are found
+elseif($default == true) :
+	$video[] = $default;
+endif;
+
+// Return array with video (make array in case we need to add values later)
+	return array($video);
+}
+
+/**
+* display_the_video()
+* Function for displaying a video
+*
+* @since 0.2
+*/
+function display_the_video($cf_array) {
+
+// Set video nicename
+	$video = $cf_array[0];
+
+// If there's an imported video associated with this post
+	if(isset($video[0]) && strcmp($video[0],'') != 0) :
+		$output = "
+		<object type='application/x-shockwave-flash' data='$video[0]' width='298' height='250'>
+			<param name='movie' value='$video[0]' />
+			<param name='allowfullscreen' value='true' />
+			<param name='wmode' value='transparent' />
+		</object>";
+// If there's no video
+	else :
+		$output = false;
+	endif;
+
+// Return the video
+	return $output;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/hooks.php b/wp-content/themes/vanilla/_hybrid/hooks.php
new file mode 100755
index 0000000000000000000000000000000000000000..04aa4f14cdec8d044cf77b11180533c457702a06
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/hooks.php
@@ -0,0 +1,271 @@
+<?php
+/**
+* Define theme hooks and add actions to them
+*
+* Actions can be added to these hooks throughout the theme
+* This can be done through child themes and/or plugins
+*
+* Hooks should be defined and named by the order called (generated) relative to a theme element
+*/
+
+// Head actions
+	add_action('hybrid_head', 'hybrid_enqueue_script');
+	add_action('wp_head', 'hybrid_enqueue_style');
+	add_action('wp_head', 'hybrid_theme_meta');
+	remove_action('wp_head', 'pagenavi_css');
+
+// Header actions
+	add_action('hybrid_header', 'hybrid_site_title');
+	add_action('hybrid_header', 'hybrid_site_description');
+	add_action('hybrid_after_header', 'hybrid_page_nav');
+
+// Container actions
+	add_action('hybrid_after_container', 'hybrid_get_primary');
+	add_action('hybrid_after_container', 'hybrid_get_secondary');
+	add_action('hybrid_after_container', 'hybrid_insert');
+
+// Content actions
+	add_action('hybrid_before_content', 'hybrid_breadcrumb');
+	add_action('hybrid_after_content', 'hybrid_navigation_links');
+	add_action('hybrid_after_page', 'hybrid_footnote');
+	add_action('hybrid_after_single', 'hybrid_footnote');
+
+// Secondary actions
+	add_action('hybrid_after_secondary', 'wp_meta');
+
+// Footer actions
+	add_action('hybrid_footer', 'hybrid_footer_insert');
+	add_action('hybrid_footer', 'hybrid_copyright');
+	add_action('hybrid_footer', 'hybrid_credit');
+	add_action('hybrid_footer', 'hybrid_query_counter');
+
+/**
+* hybrid_head()
+* 
+* @since 0.1
+* @file header.php
+*/
+function hybrid_head() {
+	do_action('hybrid_head');
+}
+
+/**
+* hybrid_before_header()
+*
+* @since 0.1
+* @file header.php
+*/
+function hybrid_before_header() {
+	do_action('hybrid_before_header');
+}
+
+/**
+* hybrid_header()
+*
+* @since 0.1
+* @file header.php
+*/
+function hybrid_header() {
+	do_action('hybrid_header');
+}
+
+/**
+* hybrid_after_header()
+*
+* @since 0.1
+* @file header.php
+*/
+function hybrid_after_header() {
+	do_action('hybrid_after_header');
+}
+
+/**
+* hybrid_before_page_nav()
+*
+* @since 0.2
+* @file filters.php
+*/
+function hybrid_before_page_nav() {
+	do_action('hybrid_before_page_nav');
+}
+
+/**
+* hybrid_after_page_nav()
+*
+* @since 0.2
+* @file filters.php
+*/
+function hybrid_after_page_nav() {
+	do_action('hybrid_after_page_nav');
+}
+
+/**
+* hybrid_before_cat_nav()
+*
+* @since 0.2
+* @file filters.php
+*/
+function hybrid_before_cat_nav() {
+	do_action('hybrid_before_cat_nav');
+}
+
+/**
+* hybrid_after_cat_nav()
+*
+* @since 0.2
+* @file filters.php
+*/
+function hybrid_after_cat_nav() {
+	do_action('hybrid_after_cat_nav');
+}
+
+/**
+* hybrid_before_container()
+*
+* @since 0.1
+* @file header.php
+*/
+function hybrid_before_container() {
+	do_action('hybrid_before_container');
+}
+
+/**
+* hybrid_before_content()
+*
+* @since 0.1
+* @file header.php
+*/
+function hybrid_before_content() {
+	do_action('hybrid_before_content');
+}
+
+/**
+* hybrid_after_content()
+*
+* @since 0.1
+* @file header.php
+*/
+function hybrid_after_content() {
+	do_action('hybrid_after_content');
+}
+
+/**
+* hybrid_after_single()
+*
+* @since 0.2
+* @file single.php
+*/
+function hybrid_after_single() {
+	do_action('hybrid_after_single');
+}
+
+/**
+* hybrid_after_page()
+*
+* @since 0.2
+* @file page.php
+*/
+function hybrid_after_page() {
+	do_action('hybrid_after_page');
+}
+
+/**
+* hybrid_before_comments()
+*
+* @since 0.3
+* @file page.php
+*/
+function hybrid_before_comments() {
+	do_action('hybrid_before_comments');
+}
+
+/**
+* hybrid_before_primary()
+*
+* @since 0.1
+* @file insert.php
+*/
+function hybrid_before_primary() {
+	do_action('hybrid_before_primary');
+}
+
+/**
+* hybrid_after_primary()
+*
+* @since 0.1
+* @file insert.php
+*/
+function hybrid_after_primary() {
+	do_action('hybrid_after_primary');
+}
+
+/**
+* hybrid_before_secondary()
+*
+* @since 0.2
+* @file insert.php
+*/
+function hybrid_before_secondary() {
+	do_action('hybrid_before_secondary');
+}
+
+/**
+* hybrid_after_secondary()
+*
+* @since 0.2
+* @file insert.php
+*/
+function hybrid_after_secondary() {
+	do_action('hybrid_after_secondary');
+}
+
+/**
+* hybrid_after_container()
+*
+* @since 0.1
+* @file insert.php
+*/
+function hybrid_after_container() {
+	do_action('hybrid_after_container');
+}
+
+/**
+* hybrid_before_footer()
+*
+* @since 0.1
+* @file footer.php
+*/
+function hybrid_before_footer() {
+	do_action('hybrid_before_footer');
+}
+
+/**
+* hybrid_footer()
+*
+* @since 0.1
+* @file footer.php
+*/
+function hybrid_footer() {
+	do_action('hybrid_footer');
+}
+
+/**
+* hybrid_after_footer()
+*
+* @since 0.1
+* @file footer.php
+*/
+function hybrid_after_footer() {
+	do_action('hybrid_after_footer');
+}
+
+/**
+* hybrid_child_settings()
+* 
+* @since 0.2.1
+* @file child-settings.php
+*/
+function hybrid_child_settings() {
+	do_action('hybrid_child_settings');
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/media.php b/wp-content/themes/vanilla/_hybrid/media.php
new file mode 100755
index 0000000000000000000000000000000000000000..0e4a08627d0bc6e1c7779f3bdff8dec927493611
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/media.php
@@ -0,0 +1,324 @@
+<?php
+
+/**
+* Media API
+*
+* Loads media styles and scripts for the theme
+* Handles attachment files
+* See (get-the-image.php, get-the-video.php) for other media
+*
+* @package Hybrid
+* @subpackage Media
+* @since 0.1
+*/
+
+/**
+* Filter to load CSS appropriately
+*
+* @since 0.1
+* @filter
+* @hook wp_head()
+*/
+function hybrid_enqueue_style() {
+	global $hybrid_settings;
+
+	$css = false;
+
+	if($hybrid_settings['print_style']) :
+
+	// WP 2.6+
+		if(function_exists('wp_enqueue_style')) :
+			wp_enqueue_style('hybrid_print', HYBRID_CSS . '/print.css', false, '0.2', 'print');
+			wp_print_styles(array('hybrid_print'));
+		else :
+			$css = '<link rel="stylesheet" href="' . HYBRID_CSS . '/print.css" type="text/css" media="print" />';
+		endif;
+
+	endif;
+
+	echo apply_filters('hybrid_enqueue_style', $css);
+}
+
+/**
+* Filter to load JavaScript at appropriate time
+*
+* @since 0.1
+* @filter
+* @hook hybrid_head()
+*/
+function hybrid_enqueue_script() {
+
+	global $hybrid_settings;
+
+	/*
+	* Common JS files
+	* jQuery pullquotes
+	*/
+	if($hybrid_settings['common_js']) :
+		wp_enqueue_script('hybrid_common', HYBRID_JS . '/common.js', array('jquery'), 0.3);
+	else :
+		if($hybrid_settings['pullquotes_js'])
+			wp_enqueue_script('hybrid_pullquotes', HYBRID_JS . '/pullquotes.js', array('jquery'), 0.3);
+	endif;
+
+	/*
+	* Comment reply (WP 2.7)
+	*/
+	if(function_exists('is_singular')) :
+		if(is_singular()) :
+			if(get_option('thread_comments')) wp_enqueue_script('comment-reply');
+		endif;
+	endif;
+
+	/*
+	* Comments popup script if selected
+	*/
+	if($hybrid_settings['comments_popup'] && is_page_template('blog.php')) :
+		comments_popup_script(620, 400);
+
+	elseif(($hybrid_settings['comments_popup']) && (is_archive() || is_search() || is_home() || is_front_page())) :
+		comments_popup_script(620, 400);
+	endif;
+
+	/*
+	* Flash video embed
+	*/
+	if(is_attachment() && get_post_mime_type() == 'application/octet-stream') :
+		if(preg_match('/\.flv$/', wp_get_attachment_url()))
+			wp_enqueue_script('flash_embed', HYBRID_JS . '/flash-embed.js', false, 0.1);
+	endif;
+
+	$script = false;
+	echo apply_filters('hybrid_enqueue_script', $script);
+}
+
+/**
+* Checks the mime type and attachment extension
+* Calls a function, if needed, to handle the output
+*
+* @since 0.2.2
+*/
+function hybrid_handle_attachment($mime = false, $file = false) {
+
+	if(!$mime || !$file) :
+		return;
+
+	elseif($mime == 'video/asf' || $mime == 'video/quicktime') :
+		hybrid_video_attachment($mime, $file);
+
+	elseif($mime == 'application/octet-stream' && preg_match('/\.flv$/', $file)) :
+		hybrid_video_attachment($mime, $file);
+
+	elseif($mime == 'audio/mpeg' || $mime == 'audio/wma') :
+		hybrid_audio_attachment($mime, $file);
+
+	elseif($mime == 'text/plain' || $mime == 'text/css' || $mime == 'text/html') :
+		hybrid_text_attachment($mime, $file);
+
+	elseif($mime == 'application/pdf' || $mime == 'application/javascript' || $mime == 'application/rtf' || $mime == 'application/msword') :
+		hybrid_application_attachment($mime, $file);
+
+	endif;
+}
+
+/**
+* Handles application attachments on their attachment pages
+* Uses the <object> tag to embed media on those pages
+*
+* @since 0.3
+*/
+function hybrid_application_attachment($mime = false, $file = false) {
+
+	echo '<object class="text" type="' . $mime . '" data="' . $file . '" width="400">';
+	echo '<param name="src" value="' . $file . '" />';
+	echo '</object>';
+}
+
+/**
+* Handles text attachments on their attachment pages
+* Uses the <object> element to show embed media in the pages
+*
+* @since 0.3
+*/
+function hybrid_text_attachment($mime = false, $file = false) {
+
+	echo '<object class="text" type="' . $mime . '" data="' . $file . '" width="400">';
+	echo '<param name="src" value="' . $file . '" />';
+	echo '</object>';
+}
+
+/**
+* Handles audio attachments on their attachment pages
+* Puts audio/mpeg and audio/wma files into an <object> element
+*
+* @since 0.2.2
+*/
+function hybrid_audio_attachment($mime = false, $file = false) {
+
+	if($mime == false || $file == false) :
+		return;
+
+	elseif($mime == 'audio/mpeg' || $mime == 'audio/wma') :
+
+		echo '<object type="' . $mime . '" class="audio" data="' . $file . '" width="400" height="50">';
+			echo '<param name="src" value="' . $file . '" />';
+			echo '<param name="autostart" value="false" />';
+			echo '<param name="controller" value="true" />';
+		echo '</object>';
+
+	endif;
+
+}
+
+/**
+* Handles video attachments on attachment pages
+* Also handles application/octet-stream attachments if video (flv)
+* FLV files are loaded with Flowplayer (see hybrid_enqueue_script() for JS)
+* Add other video types to the <object> element
+*
+* @since 0.2.2
+*/
+function hybrid_video_attachment($mime = false, $file = false) {
+
+	if($mime == false || $file == false) :
+		return;
+
+	elseif($mime == 'video/asf') :
+
+		echo '<object type="video/x-ms-wmv" class="video" data="' . $file . '" width="400" height="320">';
+			echo '<param name="src" value="' . $file . '" />';
+			echo '<param name="autostart" value="false" />';
+			echo '<param name="allowfullscreen" value="true" />';
+			echo '<param name="controller" value="true" />';
+		echo '</object>';
+
+	elseif($mime == 'video/quicktime') :
+
+		echo '<object type="video/quicktime" class="video" data="' . $file . '">';
+			echo '<param name="autoplay" value="false" />';
+			echo '<param name="allowfullscreen" value="true" />';
+			echo '<param name="controller" value="true" />';
+		echo '</object>';
+
+	elseif($mime == 'application/octet-stream') :
+
+		if(preg_match('/\.flv$/', $file)) :
+
+		echo '<div id="flash-video" class="video"></div>';
+		?>
+		<script type="text/javascript">
+			flashembed("flash-video", "<?php echo HYBRID_SWF; ?>/FlowPlayerDark.swf", {
+				config: { 
+  					videoFile: '<?php echo $file; ?>', 
+					initialScale: 'scale',
+					autoPlay: false,
+					loop: false,
+					showVolumeSlider: false,
+					controlsOverVideo: 'ease',
+					controlBarBackgroundColor: -1,
+					controlBarGloss: 'low'
+				}
+			});
+		</script>
+
+<?php
+		endif;
+
+	else :
+		return;
+
+	endif;
+
+}
+
+/**
+* Pulls an image for the particular mime type
+* Currently, just passes variables to hybrid_attachment_icon
+* Need to update and work with wp_mime_type_icon()
+*
+* @since 0.2.3
+* @param $mime, $file
+*/
+function hybrid_mime_type_icon($mime = false, $file = false) {
+
+	if($mime && $file)
+		hybrid_attachment_icon($mime, $file);
+
+	// global $post;
+	// echo '<img src="' . wp_mime_type_icon($post->ID) . '" class="mime-type-icon" alt="' . __('Mime-type icon','hybrid') . '" />';
+}
+
+/**
+* Displays icons for attachments
+*
+* @since 0.2.2
+*/
+function hybrid_attachment_icon($mime = false, $file = false) {
+
+	$img = false;
+
+	if(!$mime || !$file) :
+		return;
+
+// Video
+	elseif($mime == 'video/asf') :
+		$img = HYBRID_IMAGES . '/video.png';
+
+	elseif($mime == 'video/quicktime') :
+		$img = HYBRID_IMAGES . '/video.png';
+
+// Audio
+	elseif($mime == 'audio/mpeg' || $mime == 'audio/wma') :
+		$img = HYBRID_IMAGES . '/audio.png';
+
+// Application
+	elseif($mime == 'application/octet-stream' && preg_match('/\.flv$/', $file)) :
+		$img = HYBRID_IMAGES . '/video.png';
+
+	elseif($mime == 'application/javascript') :
+		$img = HYBRID_IMAGES . '/js.png';
+
+	elseif($mime == 'application/octet-stream') :
+		$img = HYBRID_IMAGES . '/default.png';
+
+	elseif($mime == 'application/zip') :
+		$img = HYBRID_IMAGES . '/zip.png';
+
+	elseif($mime == 'application/x-tar') :
+		$img = HYBRID_IMAGES . '/tar.png';
+
+	elseif($mime == 'application/pdf') :
+		$img = HYBRID_IMAGES . '/pdf.png';
+
+	elseif($mime == 'application/msword') :
+		$img = HYBRID_IMAGES . '/doc.png';
+
+	elseif($mime == 'application/rtf') :
+		$img = HYBRID_IMAGES . '/doc.png';
+
+	elseif($mime == 'application/x-msdownload') :
+		$img = HYBRID_IMAGES . '/exe.png';
+
+	elseif($mime == 'application/x-shockwave-flash') :
+		$img = HYBRID_IMAGES . '/swf.png';
+
+// Text
+	elseif($mime == 'text/plain') :
+		$img = HYBRID_IMAGES . '/text.png';
+
+	elseif($mime == 'text/html') :
+		$img = HYBRID_IMAGES . '/html.png';
+
+	elseif($mime == 'text/css') :
+		$img = HYBRID_IMAGES . '/css.png';
+
+	else :
+		$img = HYBRID_IMAGES . '/default.png';
+
+	endif;
+
+	if($img)
+		echo '<img class="attachment-icon" src="' . $img . '" alt="' . $mime . '" title="' . $mime . '" />';
+
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/primary.php b/wp-content/themes/vanilla/_hybrid/primary.php
new file mode 100755
index 0000000000000000000000000000000000000000..d0e11168a1e5151c16cab4258fd5b3670865b5ce
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/primary.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+* Runs through a list of primary inserts according to page
+* Let users filter through the child theme if necessary
+*
+* @since 0.1
+* @filter
+*/
+function hybrid_primary_var() {
+
+	if(is_front_page() || is_home())
+		$hybrid_insert_id = __('Primary Home','hybrid');
+	elseif(is_author())
+		$hybrid_insert_id = __('Primary Author','hybrid');
+	elseif(is_category())
+		$hybrid_insert_id = __('Primary Category','hybrid');
+	elseif(is_date())
+		$hybrid_insert_id = __('Primary Date','hybrid');
+	elseif(is_page_template('no-widgets.php'))
+		$hybrid_insert_id = false;
+	elseif(is_page())
+		$hybrid_insert_id = __('Primary Page','hybrid');
+	elseif(is_search())
+		$hybrid_insert_id = __('Primary Search','hybrid');
+	elseif(is_single())
+		$hybrid_insert_id = __('Primary Single','hybrid');
+	elseif(is_tag())
+		$hybrid_insert_id = __('Primary Tag','hybrid');
+	elseif(is_404())
+		$hybrid_insert_id = __('Primary 404','hybrid');
+	else
+		$hybrid_insert_id = __('Primary Home','hybrid');
+
+	return apply_filters('hybrid_primary_var', $hybrid_insert_id);
+}
+
+/**
+* Displays the primary widget area
+* Check if the widget area is active or if the default is set to home
+* If neither is true, don't display the XHTML
+*
+* @since 0.2.2
+*/
+function hybrid_get_primary() {
+
+	global $hybrid_settings;
+
+	if(
+		($hybrid_settings['primary_inserts_default'] && is_sidebar_active(__('Primary Home','hybrid')) && !is_page_template('no-widgets.php')) || 
+		(is_sidebar_active(hybrid_primary_var()) && !is_page_template('no-widgets.php'))
+	) : ?>
+
+		<div id="primary">
+		<?php
+			hybrid_before_primary(); // Before primary hook
+
+			if(dynamic_sidebar(hybrid_primary_var())) :
+			else :
+				if($hybrid_settings['primary_inserts_default']) :
+					if(dynamic_sidebar(__('Primary Home','hybrid'))) :
+					endif;
+				endif;
+			endif;
+
+			hybrid_after_primary(); // After primary hook
+		?>
+		</div>
+
+	<?php endif;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/secondary.php b/wp-content/themes/vanilla/_hybrid/secondary.php
new file mode 100755
index 0000000000000000000000000000000000000000..c3d15701fcdda20430b9003dccb21daf02e0ca6a
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/secondary.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+* Runs through a list of secondary inserts according to page
+* Let users filter through the child theme if necessary
+*
+* @since 0.1
+* @filter
+*/
+function hybrid_secondary_var() {
+
+	if(is_front_page() || is_home())
+		$hybrid_insert_id = __('Secondary Home','hybrid');
+	elseif(is_author())
+		$hybrid_insert_id = __('Secondary Author','hybrid');
+	elseif(is_category())
+		$hybrid_insert_id = __('Secondary Category','hybrid');
+	elseif(is_date())
+		$hybrid_insert_id = __('Secondary Date','hybrid');
+	elseif(is_page_template('no-widgets.php'))
+		$hybrid_insert_id = false;
+	elseif(is_page())
+		$hybrid_insert_id = __('Secondary Page','hybrid');
+	elseif(is_search())
+		$hybrid_insert_id = __('Secondary Search','hybrid');
+	elseif(is_single())
+		$hybrid_insert_id = __('Secondary Single','hybrid');
+	elseif(is_tag())
+		$hybrid_insert_id = __('Secondary Tag','hybrid');
+	elseif(is_404())
+		$hybrid_insert_id = __('Secondary 404','hybrid');
+	else
+		$hybrid_insert_id = __('Secondary Home','hybrid');
+
+	return apply_filters('hybrid_secondary_var', $hybrid_insert_id);
+}
+
+/**
+* Displays the secondary widget area
+* Check if the widget area is active or if the default is set to home
+* If neither is true, don't display the XHTML
+*
+* @since 0.2.2
+*/
+function hybrid_get_secondary() {
+
+	global $hybrid_settings;
+
+	if(
+		($hybrid_settings['secondary_inserts_default'] && is_sidebar_active(__('Secondary Home','hybrid')) && !is_page_template('no-widgets.php')) || 
+		(is_sidebar_active(hybrid_secondary_var()) && !is_page_template('no-widgets.php'))
+	) : ?>
+
+		<div id="secondary">
+		<?php
+			hybrid_before_secondary(); // Before secondary hook
+
+			if(dynamic_sidebar(hybrid_secondary_var())) :
+			else :
+				if($hybrid_settings['secondary_inserts_default']) :
+					if(dynamic_sidebar(__('Secondary Home','hybrid'))) :
+					endif;
+				endif;
+			endif;
+
+			hybrid_after_secondary(); // After secondary hook
+		?>
+		</div>
+
+	<?php endif;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/template-functions.php b/wp-content/themes/vanilla/_hybrid/template-functions.php
new file mode 100755
index 0000000000000000000000000000000000000000..8693ee27e7ea883449d199f1baf955729c3e579c
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/template-functions.php
@@ -0,0 +1,437 @@
+<?php
+
+/**
+* Calls up several theme functions to get meta info
+* hybrid_meta_keywords()
+* hybrid_meta_description()
+* hybrid_meta_robots()
+* hybrid_meta_other()
+* Once all functions are loaded output data into header
+* Check for All in One SEO and HeadSpace2
+* If in use, only load hybrid_meta_other()
+*
+* @since 0.1
+* @hook wp_head()
+*/
+function hybrid_theme_meta() {
+	if(!class_exists('All_in_One_SEO_Pack') && !class_exists('HeadSpace2_Admin')) :
+		hybrid_meta_robots();
+		hybrid_meta_description();
+		hybrid_meta_keywords();
+	endif;
+	hybrid_meta_other();
+}
+
+/**
+* Allows/disallows indexing by search engines
+* Calls theme settings to check for data
+* Check options 'blog_public' for privacy mode
+* If private, don't send meta info to header
+*
+* @since 0.2.3
+*/
+function hybrid_meta_robots() {
+	global $post, $hybrid_settings, $wp_query;
+
+	if(!get_option('blog_public'))
+		return;
+
+	/*
+	* Indexing/Robots
+	*/
+	if((is_home() || is_front_page()) && ($hybrid_settings['robots_home'])) :
+		$follow = true;
+	elseif(is_attachment() && $hybrid_settings['robots_attachment']) :
+		$follow = true;
+	elseif(is_single() && !is_attachment() && $hybrid_settings['robots_single']) :
+		$follow = true;
+	elseif(is_page() && !is_attachment() && $hybrid_settings['robots_page']) :
+		$follow = true;
+	elseif(is_date() && $hybrid_settings['robots_date']) :
+		$follow = true;
+	elseif(is_category() && $hybrid_settings['robots_category']) :
+		$follow = true;
+	elseif(is_tag() && $hybrid_settings['robots_tag']) :
+		$follow = true;
+	elseif(is_search() && $hybrid_settings['robots_search']) :
+		$follow = true;
+	elseif(is_author() && $hybrid_settings['robots_author']) :
+		$follow = true;
+	elseif(is_404() && $hybrid_settings['robots_404']) :
+		$follow = true;
+	else :
+		$follow = false;
+	endif;
+
+	if($follow) :
+		echo '<meta name="robots" content="index,follow" />' . "\n";
+	else :
+		echo '<meta name="robots" content="noindex,follow" />' . "\n";
+	endif;
+}
+
+/**
+* Generates the meta description
+* Checks theme settings for indexing, title, and meta settings
+*
+* @since 0.2.3
+*/
+function hybrid_meta_description() {
+	global $post, $hybrid_settings, $wp_query;
+
+	/*
+	* Get meta description
+	* Check for custom fields on posts/pages
+	*/
+	// If on home page
+	if(is_home() || is_front_page()) :
+		$meta_desc = get_bloginfo('description');
+	elseif(is_single() || is_page()) :
+		$meta_desc = get_post_meta($post->ID, 'Description', $single = true);
+		if(!$meta_desc && $hybrid_settings['seo_single_excerpts']) :
+			$meta_desc = get_the_excerpt();
+		endif;
+	elseif(is_category()) :
+		$meta_desc = stripslashes(strip_tags(category_description()));
+	elseif(is_author()) :
+		$meta_auth = get_userdata(get_query_var('author'));
+		$meta_desc = str_replace(array('"'), '&quot;', $meta_auth->description);
+	endif;
+
+	/*
+	* Meta description
+	*/
+	if($meta_desc && strlen($meta_desc) > 1) :
+		$meta_desc = str_replace(array('"'), '&quot;', $meta_desc);
+		$meta_desc = strip_tags(stripslashes($meta_desc));
+		echo '<meta name="description" content="' . $meta_desc . '" />' . "\n";
+	endif;
+}
+
+/**
+* Generates meta keywords/tags for the site
+* Checks theme settings
+* Checks indexing settings
+*
+* @since 0.2.3
+*
+*/
+function hybrid_meta_keywords() {
+	global $post, $hybrid_settings, $wp_query;
+
+	$keywords = array();
+
+	// If on a single post
+	// Check for custom fields
+	// Check for SEO settings
+	if(is_single()) :
+		$post_keywords = get_post_meta($post->ID, 'Keywords', true);
+		if($post_keywords) $keywords[] = $post_keywords;
+
+		 if($hybrid_settings['seo_cats'] && !$post_keywords) :
+			$cats = get_the_category();
+			foreach($cats as $cat) :
+				$keywords[] = $cat->name;
+			endforeach;
+		endif;
+		if($hybrid_settings['seo_tags'] && !$post_keywords) :
+			$wp_query->in_the_loop = true;
+			$tags = get_the_tags();
+			if($tags) :
+				foreach($tags as $tag) :
+					$keywords[] = $tag->slug;
+				endforeach;
+			endif;
+			$wp_query->in_the_loop = false;
+		endif;
+
+	// If on a page
+	// Check for custom fields
+	elseif(is_page()) :
+		$post_keywords = get_post_meta($post->ID, 'Keywords', true);
+		if($post_keywords) :
+			$keywords[] = $post_keywords;
+		endif;
+	endif;
+
+	if(!empty($keywords)) :
+		$keywords = join(', ', $keywords);
+		echo "<meta name='keywords' content='" . stripslashes($keywords) . "' />\n";
+	endif;
+}
+
+/**
+* Generates other relevant meta info
+*
+* @since 0.2.3
+*/
+function hybrid_meta_other() {
+	global $hybrid_settings;
+
+	/*
+	* Theme name/version
+	*/
+	$data = get_theme_data(TEMPLATEPATH . '/style.css');
+	echo "\n<meta name='wordpress_theme' content='" . $data['Title'] . " " . $data['Version'] . "' />\n";
+
+	/*
+	* Feed and pingback display
+	*/
+	if($hybrid_settings['feed_url']) $feed = $hybrid_settings['feed_url'];
+	else $feed = get_bloginfo('rss2_url');
+
+	echo "\n<link rel='alternate' type='application/rss+xml' title='" . __('RSS 2.0','hybrid') . "' href='" . $feed . "' />\n";
+	echo "<link rel='alternate' type='text/xml' title='" . __('RSS .92','hybrid') . "' href='" . get_bloginfo('rss_url') . "' />\n";
+	echo "<link rel='alternate' type='application/atom+xml' title='" . __('Atom 0.3','hybrid') . "' href='" . get_bloginfo('atom_url') . "' />\n";
+	echo "<link rel='pingback' href='" . get_bloginfo('pingback_url') . "' />\n\n";
+}
+
+/**
+* Dynamic body class based on page
+*
+* @since 0.1
+*/
+function hybrid_body_class() {
+	global $wp_query, $hybrid_settings;
+
+	$class = array();
+
+	if(is_front_page() || is_home()) :
+		$class[] = 'home';
+		$class[] = 'front-page';
+	elseif(is_attachment()) :
+		global $post;
+		$class[] = 'attachment';
+		if(wp_attachment_is_image($post->ID)) :
+			$class[] = 'attachment-image';
+		endif;
+		$mime = get_post_mime_type($post->ID);
+		$class[] = 'attachment-' . str_replace('/', '-', $mime);
+	elseif(is_single()) :
+		$class[] = 'single';
+		$class[] = 'single-' . $wp_query->post->ID;
+		if(function_exists('is_sticky')) :
+			if(is_sticky($wp_query->post->ID))
+				$class[] = 'single-sticky';
+		endif;
+	elseif(is_page()) :
+		$class[] = 'page page-' . $wp_query->post->ID;
+		if(is_page_template()) :
+			$class[] = 'page-template';
+			$class[] = 'page-template-' . str_replace('.php', '', get_post_meta($wp_query->post->ID, '_wp_page_template', true));
+		endif;
+	elseif (is_category()) :
+		$cat = $wp_query->get_queried_object();
+		$class[] = 'category';
+		$class[] = 'category-' . $cat->slug;
+	elseif(is_tag()) :
+		$tags = $wp_query->get_queried_object();
+		$class[] = 'tag';
+		$class[] = 'tag-' . $tags->slug;
+	elseif(is_search()) :
+		$class[] = 'search';
+	elseif (is_404()) :
+		$class[] = 'error-404';
+	elseif(is_year()) :
+		$class[] = 'year';
+	elseif(is_month()) :
+		$class[] = 'month';
+	elseif(is_day()) :
+		$class[] = 'day';
+	elseif(is_time()) :
+		$class[] = 'time';
+	elseif(is_author()) :
+		$author = $wp_query->get_queried_object();
+		$class[] = 'author';
+		$class[] = ' author-' . $author->user_nicename;
+	endif;
+
+	if(is_user_logged_in())
+		$class[] = 'logged-in';
+	else
+		$class[] = 'not-logged-in';
+	if(is_date())
+		$class[] = 'date';
+	if(is_archive())
+		$class[] = 'archive';
+	if(is_paged())
+		$class[] = 'paged';
+	if((($page = $wp_query->get('paged')) || ($page = $wp_query->get('page'))) && $page > 1) :
+
+		$class[] = 'paged';
+		$class[] = 'paged-' . $page;
+
+		if(is_home() || is_front_page())
+			$class[] = 'home-paged-' . $page;
+		elseif(is_attachment())
+			$class[] = 'attachment-paged-' . $page;
+		elseif(is_single())
+			$class[] = 'single-paged-' . $page;
+		elseif(is_page())
+			$class[] = 'page-paged-' . $page;
+		elseif(is_category())
+			$class[] = 'category-paged-' . $page;
+		elseif(is_tag())
+			$class[] = 'tag-paged-' . $page;
+		elseif(is_date())
+			$class[] = 'date-paged-' . $page;
+		elseif(is_author())
+			$class[] = 'author-paged-' . $page;
+		elseif(is_search())
+			$class[] = 'search-paged-' . $page;
+	endif;
+	if(is_comments_popup())
+		$class[] = 'comments-popup';
+
+	if($hybrid_settings['primary_inserts_default']) :
+		if(!is_sidebar_active(__('Primary Home','hybrid')) && !is_sidebar_active(hybrid_primary_var())) :
+			$class[] = 'no-primary-widgets';
+			$no_primary_widgets = true;
+		endif;
+	else :
+		if(!is_sidebar_active(hybrid_primary_var())) :
+			$class[] = 'no-primary-widgets';
+			$no_primary_widgets = true;
+		endif;
+	endif;
+
+	if($hybrid_settings['secondary_inserts_default']) :
+		if(!is_sidebar_active(__('Secondary Home','hybrid')) && !is_sidebar_active(hybrid_secondary_var())) :
+			$class[] = 'no-secondary-widgets';
+			$no_secondary_widgets = true;
+		endif;
+	else :
+		if(!is_sidebar_active(hybrid_secondary_var())) :
+			$class[] = 'no-secondary-widgets';
+			$no_secondary_widgets = true;
+		endif;
+	endif;
+
+	 if(is_page_template('no-widgets.php')) :
+		$class[] = 'no-widgets';
+		$no_widgets = true;
+	endif;
+
+	if(($no_widgets) || ($no_primary_widgets && $no_secondary_widgets))
+		$class[] = 'no-default-widgets';
+	else
+		$class[] = 'has-widgets';
+
+	$class = join(' ', $class);
+	echo $class;
+}
+
+/**
+* Sets alternating classes for posts
+* Gives class of odd/even and post-#
+*
+* @since 0.2
+*/
+function hybrid_post_class() {
+	global $post, $hybrid_post_alt, $hybrid_post_num;
+
+// Add class 'post' if attachment
+	if(is_attachment() || is_search() || is_404() || is_page())
+		$class[] = 'post';
+
+// Iterated class
+	$hybrid_post_num++;
+	$class[] = 'post-' . $hybrid_post_num;
+// Alt class
+	if($hybrid_post_alt++ % 2) :
+		$class[] = 'even';
+		$class[] = 'alt';
+	else :
+		$class[] = 'odd';
+	endif;
+
+	/*
+	* WP 2.7 get_post_class()
+	* Only call if available
+	*/
+	if(function_exists('get_post_class')) :
+		$class = join( ' ', get_post_class( $class, $post_id ) );
+	else :
+		$class[] = 'post';
+		$class = join(' ', $class);
+	endif;
+
+// Echo class
+	echo $class;
+}
+
+/**
+* Archived navigation links
+* Always use except on pages and posts
+* Check for WP PageNavi plugin first
+*
+* @since 0.2
+* @hook hybrid_after_content
+* @plugin http://wordpress.org/extend/plugins/wp-pagenavi
+*/
+function hybrid_navigation_links() {
+
+	if(is_home() || is_front_page() || is_archive() || is_search() || is_page_template('blog.php')) :
+
+		if(function_exists('wp_pagenavi')) :
+			wp_pagenavi();
+		else : ?>
+			<div class="navigation-links section">
+				<?php posts_nav_link('',
+					'<span class="previous">&laquo; '.__('Previous Page','options').'</span>',
+					'<span class="next">'.__('Next Page','options').' &raquo;</span>'
+				); ?>
+			</div>
+
+		<?php endif;
+	endif;
+}
+
+/**
+* Shows related posts by plugin
+* Only show if plugin is active
+*
+* @since 0.2.2
+*
+* @plugin - http://wasabi.pbwiki.com/Related%20Entries
+* @plugin - http://rmarsh.com/plugins/similar-posts
+* @plugin - http://wordpress.org/extend/plugins/wordpress-23-related-posts-plugin
+***********************************************************/
+function hybrid_related_posts() {
+	if(
+		function_exists('related_posts') || 
+		function_exists('similar_posts') || 
+		function_exists('wp_related_posts')
+	) :
+		echo '<div class="related-posts">';
+		echo '<h3>' . __('Related Posts','options') . '</h3>';
+
+		if(function_exists('related_posts')) :
+			echo '<ul class="related">'; related_posts(); echo '</ul>';
+
+		elseif(function_exists('similar_posts')) :
+			similar_posts();
+
+		elseif(function_exists('wp_related_posts')) :
+			wp_related_posts();
+
+		endif;
+
+		echo '</div>';
+
+	endif;
+}
+
+/**
+* Footer insert from the theme settings page
+* Uses stripslashes() for proper output of code
+*
+* @since 0.2.1
+*/
+function hybrid_footer_insert() {
+	global $hybrid_settings;
+	if($hybrid_settings['footer_insert']) :
+		echo stripslashes($hybrid_settings['footer_insert']);
+	endif;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_hybrid/widgets.php b/wp-content/themes/vanilla/_hybrid/widgets.php
new file mode 100755
index 0000000000000000000000000000000000000000..ca654c6c208498e3583264be33e9dcfe5297d0d0
--- /dev/null
+++ b/wp-content/themes/vanilla/_hybrid/widgets.php
@@ -0,0 +1,174 @@
+<?php
+
+/**
+* Call the widget init function
+* Run each set of inserts through the function
+*/
+
+hybrid_widget_init(hybrid_primary_inserts());
+hybrid_widget_init(hybrid_secondary_inserts());
+hybrid_widget_init(hybrid_subsidiary_inserts());
+
+/**
+* Add widget inserts to array
+* Filterable to add/remove inserts in child themes
+*
+* @since 0.1
+* @filter
+*/
+function hybrid_primary_inserts() {
+	$inserts = array(
+		__('Primary Home','hybrid'),
+		__('Primary Author','hybrid'),
+		__('Primary Category','hybrid'),
+		__('Primary Date','hybrid'),
+		__('Primary Page','hybrid'),
+		__('Primary Tag','hybrid'),
+		__('Primary Search','hybrid'),
+		__('Primary Single','hybrid'),
+		__('Primary 404','hybrid'),
+	);
+
+	return apply_filters('hybrid_primary_inserts', $inserts);
+}
+
+/**
+* Add widget inserts to array
+* Filterable to add/remove inserts in child themes
+*
+* @since 0.2
+* @filter
+*/
+function hybrid_secondary_inserts() {
+	$inserts = array(
+		__('Secondary Home','hybrid'),
+		__('Secondary Author','hybrid'),
+		__('Secondary Category','hybrid'),
+		__('Secondary Date','hybrid'),
+		__('Secondary Page','hybrid'),
+		__('Secondary Single','hybrid'),
+		__('Secondary Tag','hybrid'),
+		__('Secondary Search','hybrid'),
+		__('Secondary 404','hybrid'),
+	);
+
+	return apply_filters('hybrid_secondary_inserts', $inserts);
+}
+
+/**
+* Function for additional widget inserts
+* These inserts should not fall under the Primary/Secondary domain
+*
+* @since 0.3
+* @filter
+*/
+function hybrid_subsidiary_inserts() {
+	$inserts = array(
+		__('Widget Template','hybrid')
+	);
+
+	return apply_filters('hybrid_subsidiary_inserts', $inserts);
+}
+
+/**
+* Loop through inserts array
+* Creates individual widget displays
+*
+* @since 0.2.1
+*/
+function hybrid_widget_init($insert_id = false) {
+
+	return; // alister shutting this down for now!
+
+	if($insert_id) :
+		foreach($insert_id as $insert) :
+
+		// Register the widget section
+			register_sidebar(array(
+				'name' => $insert,
+				'before_widget' => '<div id="%1$s" class="' . hybrid_widget_class() . '"><div class="widget-inside">',
+				'after_widget' => '</div></div>',
+				'before_title' => '<h3 class="widget-title widget-header">',
+				'after_title' => '</h3>',
+				)
+			);
+		endforeach;
+	endif;
+}
+
+/**
+* Check for widgets in widget-ready sections
+* Allows user to completely collapse widget-ready sections
+* Even if there are no widgets added
+*
+* Checks widget areas by name instead of ID
+* Using WP functionality from /wp-includes/widgets.php
+* From function dynamic_sidebar()
+*
+* Idea from:
+* http://wordpress.org/support/topic/190184?replies=7#post-808787
+* http://themeshaper.com/collapsing-wordpress-widget-ready-areas-sidebars
+* Thanks to Chaos Kaizer http://blog.kaizeku.com
+* Ian Stewart http://themeshaper.com
+*
+* @since 0.2
+* @return true/false
+*/
+function is_sidebar_active($index = 1) {
+	global $wp_registered_sidebars, $wp_registered_widgets;
+
+	if(is_int($index)) :
+		$index = "sidebar-$index";
+	else :
+		$index = sanitize_title($index);
+		foreach((array) $wp_registered_sidebars as $key => $value) :
+			if(sanitize_title($value['name']) == $index) :
+				$index = $key;
+				break;
+			endif;
+		endforeach;
+	endif;
+
+	$sidebars_widgets = wp_get_sidebars_widgets();
+
+	if(empty($wp_registered_sidebars[$index]) || !array_key_exists($index, $sidebars_widgets) || !is_array($sidebars_widgets[$index]) || empty($sidebars_widgets[$index]))
+		return false;
+	else return true;
+}
+
+/**
+* Defines the classes for widgets
+* Currently trying to add alt classes, but can't get it to work
+*
+* @since 0.2.2
+*/
+function hybrid_widget_class() {
+
+	global $widget_num;
+
+// Widget class
+	$class = array();
+	$class[] = 'widget';
+	$class[] = '%2$s';
+	$class[] = 'widget-%2$s';
+
+// Iterated class
+//	$widget_num++;
+//	$class[] = 'widget-' . $widget_num;
+
+// Alt class
+//	if($widget_num % 2) :
+//		$class[] = 'widget-even';
+//		$class[] = 'widget-alt';
+//	else :
+//		$class[] = 'widget-odd';
+//	endif;
+
+// Join the classes in an array
+	$class = join(' ', $class);
+
+// Return the widget class
+	return $class;
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/api/constants_helper.php b/wp-content/themes/vanilla/_tarski/api/constants_helper.php
new file mode 100644
index 0000000000000000000000000000000000000000..1b8b4bdee1eec128e593a670012c8825ac05fd72
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/api/constants_helper.php
@@ -0,0 +1,236 @@
+<?php
+
+/**
+ * tarski_output_constant() - Checks if constant exists and outputs it if it does.
+ * 
+ * This function must always either be wrapped by another
+ * constants output function, as in the other functions in
+ * this file, or have constants.php @included and the variable
+ * the $constant parameter is set to declared global.
+ * @since 1.5
+ * @param string $constant
+ * @param boolean|string $pre
+ * @param boolean|string $post
+ * @return string
+ */
+function tarski_output_constant($constant, $pre = false, $post = false) {
+	if($constant) {
+		echo $pre . $constant . $post;
+	}
+}
+
+/**
+ * tarski_output_headinclude() - Outputs $headerInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $headerInclude
+ * @return string $headerInclude
+ */
+function tarski_output_headinclude() {
+	global $headerInclude;
+	tarski_output_constant($headerInclude);
+}
+
+/**
+ * tarski_output_navbarinclude() - Adds $navbarInclude variable from constants.php to navbar.
+ * 
+ * @since 1.5
+ * @param array $input
+ * @global string $navbarInclude
+ * @return array $navbarInclude
+ */
+function tarski_output_navbarinclude($navbar) {
+	global $navbarInclude;
+	
+	if ( !check_input($navbar, 'array') )
+		$navbar = array();
+	
+	if ( $navbarInclude )
+		$navbar['navbarinclude'] = $navbarInclude;
+	
+	return $navbar;
+}
+
+/**
+ * tarski_output_frontpageinclude() - Outputs $frontPageInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $frontPageInclude
+ * @global string $completedBlurb
+ * @return string $frontPageInclude
+ */
+function tarski_output_frontpageinclude() {
+	global $frontPageInclude;
+	global $completedBlurb;
+	if(is_home() && !$completedBlurb) {
+		$completedBlurb = true;
+		tarski_output_constant($frontPageInclude);
+	}
+}
+
+/**
+ * tarski_output_postendinclude() - Outputs $postEndInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $postEndInclude
+ * @return string $postEndInclude
+ */
+function tarski_output_postendinclude() {
+	global $postEndInclude;
+	if(is_single()) {
+		tarski_output_constant($postEndInclude);
+	}
+}
+
+/**
+ * tarski_output_pageendinclude() - Outputs $pageEndInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $pageEndInclude
+ * @return string $pageEndInclude
+ */
+function tarski_output_pageendinclude() {
+	global $pageEndInclude;
+	if(is_page()) {
+		tarski_output_constant($pageEndInclude);
+	}
+}
+
+/**
+ * tarski_output_commentsforminclude() - Outputs $commentsFormInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $commentsFormInclude
+ * @return string $commentsFormInclude
+ */
+function tarski_output_commentsforminclude() {
+	global $commentsFormInclude;
+	tarski_output_constant($commentsFormInclude);
+}
+
+/**
+ * tarski_output_sidebartopinclude() - Outputs $sidebarTopInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $sidebarTopInclude
+ * @return string $sidebarTopInclude
+ */
+function tarski_output_sidebartopinclude() {
+	global $sidebarTopInclude;
+	if(get_tarski_option('sidebar_onlyhome')) { // Sidebar only on index pages
+		if(!(is_page() || is_single())) {
+			tarski_output_constant($sidebarTopInclude);
+		}
+	} else { // Sidebar everywhere
+		if(!(is_page() || is_single())) {
+			tarski_output_constant($sidebarTopInclude);
+		}
+	}
+}
+
+/**
+ * tarski_output_sidebarbottominclude() - Outputs $sidebarBottomInclude variable from constants.php.
+ * 
+ * @since 2.0
+ * @global string $sidebarBottomInclude
+ * @return string $sidebarBottomInclude
+ */
+function tarski_output_sidebarbottominclude() {
+	global $sidebarBottomInclude;
+	if(get_tarski_option('sidebar_onlyhome')) { // Sidebar only on index pages
+		if(!(is_page() || is_single())) {
+			tarski_output_constant($sidebarBottomInclude);
+		}
+	} else { // Sidebar everywhere
+		if(!(is_page() || is_single())) {
+			tarski_output_constant($sidebarBottomInclude);
+		}
+	}
+}
+
+/**
+ * tarski_output_nosidebarinclude() - Outputs $noSidebarInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $noSidebarInclude
+ * @return string $noSidebarInclude
+ */
+function tarski_output_nosidebarinclude() {
+	global $noSidebarInclude;
+	if((get_tarski_option('sidebar_pp_type') == 'none') && (is_single() || is_page())) {
+		if(!is_page_template('archives.php')) {
+			tarski_output_constant($noSidebarInclude);
+		}
+	}
+}
+
+/**
+ * tarski_output_archivesinclude() - Outputs $archivesPageInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $archivesPageInclude
+ * @return string $archivesPageInclude
+ */
+function tarski_output_archivesinclude() {
+	global $archivesPageInclude;
+	if(is_page_template('archives.php')) {
+		tarski_output_constant($archivesPageInclude);
+	}
+}
+
+/**
+ * tarski_output_searchtopinclude() - Outputs $searchTopInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $searchTopInclude
+ * @return string $searchTopInclude
+ */
+function tarski_output_searchtopinclude() {
+	global $searchTopInclude;
+	tarski_output_constant($searchTopInclude);
+}
+
+/**
+ * tarski_output_searchbottominclude() - Outputs $searchBottomInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $searchBottomInclude
+ * @return string $searchBottomInclude
+ */
+function tarski_output_searchbottominclude() {
+	global $searchBottomInclude;
+	tarski_output_constant($searchBottomInclude);
+}
+
+/**
+ * tarski_output_footerinclude() - Outputs $footerInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @global string $footerInclude
+ * @return string $footerInclude
+ */
+function tarski_output_footerinclude() {
+	global $footerInclude;
+	tarski_output_constant($footerInclude, '<div id="footer-include">', '</div>');
+}
+
+
+/**
+ * tarski_output_errorinclude() - Outputs $errorPageInclude variable from constants.php.
+ * 
+ * @since 1.5
+ * @param string $input
+ * @global string $errorPageInclude
+ * @return string $output equal to $errorPageInclude or $input
+ */
+function tarski_output_errorinclude($input) {
+	global $errorPageInclude;
+	if($errorPageInclude) {
+		$output = $errorPageInclude;
+	} else {
+		$output = $input;
+	}
+	return $output;
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/api/deprecated.php b/wp-content/themes/vanilla/_tarski/api/deprecated.php
new file mode 100644
index 0000000000000000000000000000000000000000..a84e48bbf032feb54e7213cf1f40fbd430e9decd
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/api/deprecated.php
@@ -0,0 +1,342 @@
+<?php
+
+/**
+ * The scrapyard: deprecated functions that haven't yet been removed.
+ * 
+ * Don't write plugins that rely on these functions, as they are liable
+ * to be removed between versions. There will usually be a better way
+ * to do what you want; post on the forum if you need help.
+ * @link http://tarskitheme.com/forum/
+ */
+
+/**
+ * version_to_integer() - Turns Tarski version numbers into integers.
+ * 
+ * @since 2.0.3
+ * @deprecated 2.3
+ * @param string $version
+ * @return integer
+ */
+function version_to_integer($version) {
+	_deprecated_function(__FUNCTION__, '2.3');
+	
+	// Remove all non-numeric characters
+	$version = preg_replace('/\D/', '', $version);
+
+	if($version && strlen($version) >= 1) {
+		// Make the string exactly three characters (numerals) long
+		if(strlen($version) < 2) {
+			$version_int = $version . '00';
+		} elseif(strlen($version) < 3) {
+			$version_int = $version . '0';
+		} elseif(strlen($version) == 3) {
+			$version_int = $version;
+		} elseif(strlen($version) > 3) {
+			$version_int = substr($version, 0, 3);
+		}
+
+		// Return an integer
+		return (int) $version_int;
+	}
+}
+
+/**
+ * version_newer_than() - Returns true if current version is greater than given version.
+ *
+ * @since 2.0.3
+ * @deprecated 2.3
+ * @param mixed $version
+ * @return boolean
+ */
+function version_newer_than($version) {
+	_deprecated_function(__FUNCTION__, '2.3');
+	
+	$version = version_to_integer($version);
+	$current = version_to_integer(theme_version('current'));
+
+	if($version && $current) {
+		return (bool) ($current > $version);
+	}
+}
+
+/**
+ * tarski_excerpt() - Excerpts a la Tarski.
+ * 
+ * Code shamelessly borrowed from Kaf Oseo's 'the_excerpt Reloaded' plugin.
+ * @link http://guff.szub.net/2005/02/26/the-excerpt-reloaded/
+ * @since 1.2.1
+ * @deprecated 2.2
+ * @param $return boolean
+ * @param string $excerpt_length
+ * @return string
+ */
+function tarski_excerpt($return = false, $excerpt_length = 35) {
+	_deprecated_function(__FUNCTION__, '2.2', the_excerpt());
+	
+	global $post;
+
+	if(!empty($post->post_password)) { // if there's a password
+		if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match cookie
+			$output = get_the_password_form();
+		}
+		if($return) {
+			return $output;
+		} else {
+			echo $output;
+			return;
+		}
+	}
+
+	if(!($text = $post->post_excerpt))
+		$text = $post->post_content;
+
+	if($excerpt_length < 0) {
+		$output = $text;
+	} else {
+		str_replace('<!--more-->', '', $text);
+		$text = explode(' ', $text);
+		if(count($text) > $excerpt_length) {
+			$l = $excerpt_length;
+			$ellipsis = '&hellip;';
+		} else {
+			$l = count($text);
+			$ellipsis = false;
+		}
+		for ($i = 0; $i < $l; $i++)
+			$output .= $text[$i] . ' ';
+	}
+
+	$output = rtrim($output, " \n\t\r\0\x0B");
+	$output = strip_tags($output);
+	$output .= $ellipsis;
+	$output = apply_filters('get_the_excerpt', $output);
+	$output = apply_filters('the_excerpt', $output);
+	$output = apply_filters('tarski_excerpt', $output);
+
+	if($return)
+		return $output;
+	else
+		echo $output;
+}
+
+/**
+ * tarski_date() - Tweaked WordPress date function that shows up on every post.
+ * 
+ * The WP function the_date only shows up on the first post
+ * of that day. This one displays on every post, regardless
+ * of how many posts are made that day.
+ * @since 1.2.2
+ * @deprecated 2.2
+ * @see the_time()
+ * @global object $post
+ * @return string
+ * @hook filter tarski_date
+ * Filter for the date formatting that Tarski uses to ensure that dates are
+ * displayed everywhere using the user's date preferences.
+ */
+function tarski_date() {
+	_deprecated_function(__FUNCTION__, '2.2', get_the_time(get_option('date_format')));
+	
+	global $post;
+	$date = mysql2date(get_option('date_format'), $post->post_date);
+	return apply_filters('tarski_date', $date);
+}
+
+/**
+ * add_robots_meta() - Adds robots meta element if blog is public.
+ * 
+ * WordPress adds a meta element denying robots access if the site is set
+ * to private, but it doesn't add one allowing them if it's set to public.
+ * @since 2.0
+ * @deprecated 2.1
+ * @see Asset::meta()
+ * @return string
+ */
+function add_robots_meta() {
+	_deprecated_function(__FUNCTION__, '2.1', Asset::meta());
+	
+	if(get_option('blog_public') != '0')
+		echo '<meta name="robots" content="all" />' . "\n";
+}
+
+/**
+ * tarski_stylesheets() - Adds Tarski's stylesheets to the document head.
+ * 
+ * @deprecated 2.1
+ * @since 2.0.1
+ * @return string
+ */
+function tarski_stylesheets() {
+	_deprecated_function(__FUNCTION__, '2.1', Asset::stylesheets());
+	
+	$assets = new Asset;
+	$assets->stylesheets();
+	$assets->output();
+}
+
+/**
+ * tarski_feeds() - Outputs feed links for the page.
+ * 
+ * Can be set to return Atom, RSS or RSS2. Will always return the
+ * main site feed, but will additionally return an archive, search
+ * or comments feed depending on the page type.
+ * @deprecated 2.1
+ * @since 2.0
+ * @see Asset::feeds()
+ * @return string
+ */
+function tarski_feeds() {
+	_deprecated_function(__FUNCTION__, '2.1', Asset::feeds());
+	
+	$assets = new Asset;
+	$assets->feeds();
+	$assets->output();
+}
+
+/**
+ * tarski_javascript() - Adds Tarski JavaScript to the document head.
+ * 
+ * @deprecated 2.1
+ * @since 2.0.1
+ * @return string
+ */
+function tarski_javascript() {
+	_deprecated_function(__FUNCTION__, '2.1', Asset::javascript());
+	
+	$assets = new Asset;
+	$assets->javascript();
+	$assets->output();
+}
+
+/**
+ * hide_sidebar_for_archives() - Hides the sidebar on pages using the Archives template.
+ * 
+ * @deprecated 2.1
+ * @since 2.0
+ * @return string|boolean $sidebar_file
+ */
+function hide_sidebar_for_archives($sidebar_file) {
+	_deprecated_function(__FUNCTION__, '2.1');
+	
+	if(is_archives_template())
+		$sidebar_file = false;
+	return $sidebar_file;
+}
+
+/**
+ * is_active_sidebar() - Checks to see whether a particular sidebar has widgets.
+ * 
+ * Stolen from ticket #4594 on Trac, hence the conditional definition. No longer
+ * needed in 2.1 since all sidebars are widgets and only widgets, so default
+ * states are not needed.
+ * @link http://trac.wordpress.org/ticket/4594
+ * @deprecated 2.1
+ * @since 2.0
+ * @return boolean
+ */
+if(!function_exists('is_active_sidebar')) {
+	function is_active_sidebar( $index ) {
+		_deprecated_function(__FUNCTION__, '2.1');
+		
+		$index = ( is_int($index) ) ? "sidebar-$index" : sanitize_title($index);
+		$sidebars_widgets = (array) get_option('sidebars_widgets');	
+		return (bool) ( isset( $sidebars_widgets[$index] ) );
+	}
+}
+
+/**
+ * tarski_sidebar_custom() - Returns custom sidebar content, appropriately formatted.
+ *
+ * Gets the database value; strips slashes; prettifies the quotes
+ * and other typographical nuances; converts ampersands and other
+ * characters in need of encoding as HTML entities; applies
+ * automatic paragaphing; and finally applies filters and returns
+ * the output.
+ * @deprecated 2.1
+ * @since 2.0
+ * @return string
+ */
+function tarski_sidebar_custom($return = false) {
+	_deprecated_function(__FUNCTION__, '2.1');
+	
+	$content = get_tarski_option('sidebar_custom');
+	$output = apply_filters('tarski_sidebar_custom', $content);
+	if($return) {
+		return $output;
+	} else {
+		echo $output;
+	}
+}
+
+/**
+ * tarski_footer_blurb() - Outputs custom footer content, appropriately formatted.
+ *
+ * Gets the database value; strips slashes; prettifies the quotes
+ * and other typographical nuances; converts ampersands and other
+ * characters in need of encoding as HTML entities; applies
+ * automatic paragaphing; and finally applies filters and returns
+ * the output.
+ * @deprecated 2.1
+ * @since 2.0
+ * @param boolean $return
+ * @return string
+ */
+function tarski_footer_blurb($return = false) {
+	_deprecated_function(__FUNCTION__, '2.1');
+	
+	$content = get_tarski_option('blurb');	
+	$output = apply_filters('tarski_footer_blurb', $content);
+	
+	if($return) {
+		return $output;
+	} else {
+		echo $output;
+	}
+}
+
+/**
+ * tarski_blurb_wrapper() - Wraps footer blurb in div element.
+ *
+ * @deprecated 2.1
+ * @since 2.0
+ * @see tarski_footer_blurb()
+ * @param string $blurb
+ * @return string
+ */
+function tarski_blurb_wrapper($blurb) {
+	_deprecated_function(__FUNCTION__, '2.1');
+	
+	if(is_user_logged_in()) {
+		$edit_link = sprintf(
+			'<p class="edit-link">(<a title="%1$s" id="edit-footer-blurb" href="%2$s">%3$s</a>)</p>' . "\n",
+			__('Edit the footer content area'),
+			admin_url('themes.php?page=tarski-options#footer_blurb'),
+			__('edit','tarski')
+		);
+	}
+	
+	if(get_tarski_option('blurb')) {
+		$blurb = "<div class=\"content\">\n$blurb</div>\n$edit_link";
+		$blurb = "<div id=\"blurb\">\n$blurb</div> <!-- /blurb -->\n";
+	}
+	
+	return $blurb;
+}
+
+/**
+ * is_archives_template() - Returns true if the current page uses the Archives template
+ * 
+ * This function exists for backwards-compatibility with WordPress 2.3,
+ * which does not include the is_page_template() function.
+ * @deprecated 2.1
+ * @since 2.0
+ * @global object $post
+ * @return boolean
+ */
+function is_archives_template() {
+	_deprecated_function(__FUNCTION__, '2.1', is_page_template('archives.php'));
+	
+	return is_page_template('archives.php');
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/api/hooks.php b/wp-content/themes/vanilla/_tarski/api/hooks.php
new file mode 100644
index 0000000000000000000000000000000000000000..8d45cee52cf40caa7714e467f9e90eaf4580e9e7
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/api/hooks.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * th_header() - Tarski header hook
+ *
+ * Template function appearing in header.php, allows actions
+ * to be executed at that point in the template. By default
+ * used to add header images and the title and tagline.
+ * @example add_action('th_header', 'my_function');
+ * @since 1.5
+ * @hook action th_header
+ * One can use this hook to print additional header content. Tarski uses it
+ * internally to add the header image, site title, tagline and navbar.
+ */
+function th_header() {
+	do_action('th_header');
+}
+
+/**
+ * th_navbar() - Tarski navbar hook
+ *
+ * Template function appearing in header.php, allows actions
+ * to be executed at that point in the template. By default
+ * used to add the navbar and site feed link.
+ * @example add_action('th_navbar', 'my_function');
+ * @since 1.5
+ * @hook action th_navbar
+ * Executed by a wrapper function added to the th_header hook,
+ * this hook is used to add content to the navbar.
+ */
+function th_navbar() {
+	do_action('th_navbar');
+}
+
+/**
+ * th_postend() - Tarski post end hook
+ *
+ * Template function appearing at the end of each post,
+ * to be executed at that point in the template. By default
+ * used to add tags, page navigation and the $postEndInclude
+ * and $pageEndInclude constants.
+ * @example add_action('th_postend', 'my_function');
+ * @since 1.5
+ * @hook action th_postend
+ * This hook is used to add content to the end of posts. Tarski uses it
+ * internally to add tags to posts and navigation for multi-page posts.
+ */
+function th_postend() {
+	do_action('th_postend');
+}
+
+/**
+ * th_posts_nav - Tarski posts navigation hook
+ * 
+ * Template function appearing at the end of the loop,
+ * to be executed at that point in the template. By default
+ * used to add next and previous posts navigation on index pages.
+ * @since 2.1
+ * @hook action th_posts_nav
+ * Tarski uses this hook to add the next and previous posts navigation on index
+ * pages. It could be used to replace this navigation with some other kind.
+ */
+function th_posts_nav() {
+	do_action('th_posts_nav');
+}
+
+/**
+ * th_sidebar() - Tarski sidebar hook
+ *
+ * Template function appearing in sidebar.php, allows actions
+ * to be executed at that point in the template. By default
+ * used to output the $sidebarTopInclude and $noSidebarInclude
+ * constants.
+ * @example add_action('th_sidebar', 'my_function');
+ * @since 1.5
+ * @hook action th_sidebar
+ * The sidebar hook is used by Tarski to add different sidebars, depending on
+ * the options chosen by the user. It can be used to override the default
+ * sidebar code.
+ */
+function th_sidebar() {
+	do_action('th_sidebar');
+}
+
+/**
+ * th_fsidebar() - Tarski footer sidebar hook
+ *
+ * Template function appearing in footer.php, allows actions
+ * to be executed at that point in the template. By default
+ * used to add a search form.
+ * @example add_action('th_fsidebar', 'my_function');
+ * @since 1.5
+ * @hook action th_fsidebar
+ * Like th_sidebar, but for the footer, this hook is used to add widgets
+ * to the secondary footer area.
+ */
+function th_fsidebar() {
+	do_action('th_fsidebar');
+}
+
+/**
+ * th_fmain() - Tarski footer main section hook
+ *
+ * Template function appearing in footer.php, allows actions
+ * to be executed at that point in the template. By default
+ * used to add the footer blurb and recent entries
+ * @example add_action('th_fmain', 'my_function');
+ * @since 2.0.5
+ * @hook action th_fmain
+ * Similar to th_fsidebar and th_sidebar, this hook is used to add widgets to
+ * the primary footer area.
+ */
+function th_fmain() {
+	do_action('th_fmain');
+}
+
+/**
+ * th_footer() - Tarski footer hook
+ *
+ * Template function appearing in footer.php, allows actions
+ * to be executed at that point in the template. By default
+ * used to add the theme credit and site feed link.
+ * @example add_action('th_footer', 'my_function');
+ * @since 1.5
+ * @hook action th_footer
+ * Used by default to add the theme credit and site feed link.
+ */
+function th_footer() {
+	do_action('th_footer');
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/classes/asset.php b/wp-content/themes/vanilla/_tarski/classes/asset.php
new file mode 100644
index 0000000000000000000000000000000000000000..997b3fba0bd8959e5d3363332fca6623ebc5cf52
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/classes/asset.php
@@ -0,0 +1,205 @@
+<?php
+/**
+ * class Asset
+ * 
+ * @package Tarski
+ * @since 2.1
+ */
+class Asset {
+	
+	/**
+	 * Initialisation method which calls all other methods in turn.
+	 */
+	function init() {
+		$assets = new Asset;
+		
+		$assets->meta();
+		$assets->stylesheets();
+		$assets->javascript();
+		$assets->feeds();
+		
+		$assets->output();
+	}
+	
+	/**
+	 * Generate meta elements pertaining to Tarski and the site.
+	 * 
+	 * @hook filter tarski_asset_meta
+	 * Filters the metadata generated by the Asset wrapper.
+	 */
+	function meta() {
+		$themeversion = theme_version();
+		$meta = array("<meta name=\"wp_theme\" content=\"Tarski $themeversion\" />");
+		
+		global $wp_query;
+		$excerpt = trim(strip_tags(wp_specialchars($wp_query->post->post_excerpt)));
+
+		if ( (is_single() || is_page()) && strlen($excerpt) )
+			$description = $excerpt;
+		else
+			$description = get_bloginfo('description');
+
+		if ( strlen($description) )
+			$meta[] = "<meta name=\"description\" content=\"$description\" />";
+		
+		if(get_option('blog_public') != '0')
+			$meta[] = '<meta name="robots" content="all" />';
+			
+		$this->meta = apply_filters('tarski_asset_meta', $meta);
+	}
+	
+	/**
+	 * Generate links to the various Tarski stylesheets.
+	 * 
+	 * @hook filter tarski_style_array
+	 * Filter the array of stylesheet attributes from which the stylesheet
+	 * links are generated.
+	 * 
+	 * @hook filter tarski_stylesheets
+	 * Filter the raw stylesheet link elements before they're printed to
+	 * the document.
+	 */
+	function stylesheets() {
+		$style_array = array(
+			'main' => array(
+				'url' => get_bloginfo('stylesheet_url'),
+			),
+			'screen' => array(
+				'url' => get_bloginfo('template_directory') . '/library/css/screen.css',
+				'media' => 'screen,projection'
+			),
+			'print' => array(
+				'url' => get_bloginfo('template_directory') . '/library/css/print.css',
+				'media' => 'print'
+			)
+		);
+
+		if(get_tarski_option('style')) {
+			$style_array['alternate'] = array(
+				'url' => get_bloginfo('template_directory') . '/styles/' . get_tarski_option('style')
+			);
+		}
+
+		$style_array = apply_filters('tarski_style_array', $style_array);
+
+		if(is_array($style_array)) {
+			foreach($style_array as $type => $values) {
+				if(is_array($values) && $values['url']) {
+					if(empty($values['media'])) {
+						$values['media'] = 'all';
+					}
+					$stylesheets[$type] = sprintf(
+						'<link rel="stylesheet" href="%1$s" type="text/css" media="%2$s" />',
+						$values['url'],
+						$values['media']
+					);
+				}
+			}
+		}
+
+		$this->stylesheets = apply_filters('tarski_stylesheets', $stylesheets);
+	}
+	
+	/**
+	 * Generate script elements linking to Tarski's JavaScript.
+	 * 
+	 * @hook filter tarski_javascript
+	 * Filter script elements before they're printed to the document.
+	 */
+	function javascript() {
+		$scripts = array(
+			'tarski-js' => get_bloginfo('template_directory') . '/app/js/tarski.js'
+		);
+
+		foreach($scripts as $name => $url) {
+			$javascript[$name] = "<script type=\"text/javascript\" src=\"$url\"></script>";
+		}
+
+		$this->javascript = apply_filters('tarski_javascript', $javascript);
+	}
+	
+	/**
+	 * Generate RSS or Atom feed link elements appropriate to the context.
+	 * 
+	 * @hook filter tarski_feeds
+	 * Filter the RSS or Atam feed link elements before they're printed to the
+	 * document.
+	 */
+	function feeds() {
+		global $comments;
+		if(is_single() || (is_page() && ($comments || comments_open()))) {
+			global $post;
+			$title = sprintf(__('Commments feed for %s','tarski'), get_the_title());
+			$link = get_post_comments_feed_link($post->ID);
+			$source = 'post_comments';
+		} elseif(is_archive()) {
+			if(is_category()) {
+				$title = sprintf( __('Category feed for %s','tarski'), single_cat_title('','',false) );
+				$link = get_category_feed_link(get_query_var('cat'));
+				$source = 'category';
+			} elseif(is_tag()) {
+				$title = sprintf( __('Tag feed for %s','tarski'), single_tag_title('','',false));
+				$link = get_tag_feed_link(get_query_var('tag_id'));
+				$source = 'tag';
+			} elseif(is_author()) {
+				$title = sprintf( __('Articles feed for %s','tarski'), the_archive_author_displayname());
+				$link = get_author_feed_link(get_query_var('author'));
+				$source = 'author';
+			} elseif(is_date()) {
+				if(is_day()) {
+					$title = sprintf( __('Daily archive feed for %s','tarski'), get_the_time(get_option('date_format')));
+					$link = get_day_link(get_the_time('Y'), get_the_time('m'), get_the_time('d'));
+					$source = 'day';
+				} elseif(is_month()) {
+					$title = sprintf( __('Monthly archive feed for %s','tarski'), get_the_time('F Y'));
+					$link = get_month_link(get_the_time('Y'), get_the_time('m'));
+					$source = 'month';
+				} elseif(is_year()) {
+					$title = sprintf( __('Yearly archive feed for %s','tarski'), get_the_time('Y'));
+					$link = get_year_link(get_the_time('Y'));
+					$source = 'year';
+				}	
+				if(get_settings('permalink_structure')) {
+					$link .= 'feed/';
+				} else {
+					$link .= '&amp;feed=' . get_default_feed();
+				}
+			}
+		} elseif(is_search()) {
+			$search_query = attribute_escape(get_search_query());
+			$feeds['search'] = generate_feed_link( sprintf(__('Search feed for %s','tarski'), $search_query), get_search_feed_link('', $type), feed_link_type($type) );
+			$title = sprintf(__('Search comments feed for %s','tarski'), $search_query);
+			$link = get_search_comments_feed_link('', $type);
+			$source = 'search_comments';
+		} else {
+			$title = false;
+		}
+
+		if($title && $link)
+			$feeds[$source] = generate_feed_link($title, $link, feed_link_type(get_default_feed()));
+
+		$feeds['site'] = generate_feed_link( sprintf(__('%s feed','tarski'), get_bloginfo('name')), get_feed_link(), feed_link_type(get_default_feed()) );
+		
+		$this->feeds = apply_filters('tarski_feeds', $feeds);
+	}
+	
+	/**
+	 * Print generated HTML to the document.
+	 * 
+	 * @hook filter tarski_assets
+	 * A more generalised filter for all assets generated by this class and
+	 * printed by this method.
+	 */
+	function output() {
+		$assets_collapsed = array();
+		
+		foreach ( $this as $asset ) {
+			$assets_collapsed[] = implode("\n", $asset);
+		}
+		
+		$assets_filtered = apply_filters('tarski_assets', $assets_collapsed);
+		echo implode("\n\n", $assets_filtered);
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/classes/options.php b/wp-content/themes/vanilla/_tarski/classes/options.php
new file mode 100644
index 0000000000000000000000000000000000000000..e191b12801aa9c685292dc58f9cc533344532750
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/classes/options.php
@@ -0,0 +1,241 @@
+<?php
+
+/**
+ * class Options
+ * 
+ * The Options class handles the retrieval and setting of Tarski's options,
+ * although an external function, save_tarski_options(), saves updated
+ * options to the database (via WordPress's API functions). Options can be
+ * set on the Tarski Options page, which can be found in the WP admin panel:
+ * Presentation > Tarski Options, or /wp-admin/themes.php?page=tarski-options
+ * in your WordPress directory.
+ * @package Tarski
+ * @since 2.0
+ */
+class Options {
+	
+	var $installed;
+	var $deleted;
+	var $update_notification;
+	var $sidebar_pp_type;
+	var $header;
+	var $display_title;
+	var $display_tagline;
+	var $nav_pages;
+	var $collapsed_pages;
+	var $home_link_name;
+	var $nav_extlinkcat;
+	var $style;
+	var $asidescategory;
+	var $centred_theme;
+	var $swap_sides;
+	var $tags_everywhere;
+	var $show_categories;
+	var $show_authors;
+	var $use_pages;
+	
+	/**
+	 * tarski_options_defaults() - Sets Options object's properties to their default values.
+	 * 
+	 * @since 2.0
+	 */
+	function tarski_options_defaults() {
+		$this->installed = theme_version('current');
+		$this->update_notification = true;
+		$this->sidebar_pp_type = 'main';
+		$this->header = 'greytree.jpg';
+		$this->display_title = true;
+		$this->display_tagline = true;
+		$this->nav_pages = false;
+		$this->collapsed_pages = '';
+		$this->home_link_name = __('Home','tarski');
+		$this->nav_extlinkcat = 0;
+		$this->style = false;
+		$this->asidescategory = 0;
+		$this->centred_theme = true;
+		$this->swap_sides = false;
+		$this->swap_title_order = false;
+		$this->tags_everywhere = false;
+		$this->show_categories = true;
+		$this->show_authors = true;
+		$this->use_pages = true;
+	}
+	
+	/**
+	 * tarski_options_get() - Sets Options properties to the values retrieved from the database.
+	 * 
+	 * @since 2.0
+	 */
+	function tarski_options_get() {
+		$saved_options = maybe_unserialize(get_option('tarski_options'));
+		
+		if(!empty($saved_options) && is_object($saved_options)) {
+			foreach($saved_options as $name => $value) {
+				$this->$name = $value;
+			}
+		}
+	}
+	
+	/**
+	 * tarski_options_update() - Sets Options properties to the values set on the Options page.
+	 * 
+	 * Note that this function doesn't save anything to the database, that's the
+	 * preserve of save_tarski_options().
+	 * @since 2.0
+	 * @see save_tarski_options()
+	 */
+	function tarski_options_update() {
+		if(($_POST['delete_options'] == 1)) {
+			$this->deleted = time();
+		} elseif($_POST['restore_options'] == 1) {
+			unset($this->deleted);
+		} else {
+			if($_POST['update_notification'] == 'off')
+				$this->update_notification = false;
+			elseif($_POST['update_notification'] == 'on')
+				$this->update_notification = true;
+			
+			$header = $_POST['header_image'];
+			if(isset($header)) {
+				$header = str_replace('-thumb', '', $header);
+				$this->header = $header;
+			}
+			
+			$nav_pages = $_POST['nav_pages'];
+			if(isset($nav_pages)) {
+				$nav_pages = implode(',', $nav_pages);
+				$this->nav_pages = $nav_pages;
+			} else {
+				$this->nav_pages = false;
+			}
+			
+			$collapsed_pages = $_POST['collapsed_pages'];
+			if(isset($collapsed_pages)) {
+				$this->collapsed_pages = $collapsed_pages;
+			} else {
+				$this->collapsed_pages = '';
+			}
+			
+			$stylefile = $_POST['alternate_style'];
+			if(is_valid_tarski_style($stylefile))
+				$this->style = $stylefile;
+			elseif(!$stylefile)
+				$this->style = false;
+			
+			$this->display_title = (bool) $_POST['display_title'];
+			$this->display_tagline = (bool) $_POST['display_tagline'];
+			$this->show_categories = (bool) $_POST['show_categories'];
+			$this->tags_everywhere = (bool) $_POST['tags_everywhere'];
+			$this->use_pages = (bool) $_POST['use_pages'];
+			$this->centred_theme = (bool) $_POST['centred_theme'];
+			$this->swap_sides = (bool) $_POST['swap_sides'];
+			$this->swap_title_order = (bool) $_POST['swap_title_order'];
+			$this->asidescategory = $_POST['asides_category'];
+			$this->nav_extlinkcat = $_POST['nav_extlinkcat'];
+			$this->home_link_name = $_POST['home_link_name'];
+			$this->sidebar_pp_type = $_POST['sidebar_pp_type'];			
+			$this->show_authors = tarski_should_show_authors();
+			unset($this->deleted);
+		}
+	}
+
+}
+
+/**
+ * save_tarski_options() - Saves a new set of Tarski options.
+ * 
+ * If the Tarski Options page request includes a $_POST call
+ * and it's been generated by hitting the 'submit' button, this
+ * function will generate a new Options object, set its properties
+ * to the existing set of options, and then save the new options
+ * over the old ones. It then flushes the options so the Options
+ * page, which executes after this function, will display the new
+ * values rather than the old ones.
+ * @see tarskiupdate() which it replaces
+ * @since 2.0
+ */
+function save_tarski_options() {
+	$tarski_options = new Options;
+	$tarski_options->tarski_options_get();
+	
+	if(ready_to_delete_options($tarski_options->deleted)) {
+		delete_option('tarski_options');
+		flush_tarski_options();
+		return;
+	}
+	
+	tarski_upgrade_and_flush_options();
+	
+	if(isset($_POST['submit'])) {
+		$tarski_options->tarski_options_update();
+		update_option('tarski_options', $tarski_options);
+	}
+	
+	flush_tarski_options();
+}
+
+/**
+ * flush_tarski_options() - Flushes Tarski's options for use by the theme.
+ * 
+ * Creates a new Options object, and gets the current options. If
+ * no options have been set in the database, it will return the
+ * defaults. Additionally, if the 'deleted' property has been set
+ * then the function will check to see if it was set more than two
+ * hours ago--if it was, the tarski_options database row will be
+ * dropped. If the 'deleted' property has been set, then the defaults
+ * will be returned regardless of whether other options are set.
+ * @since 1.4
+ * @global object $tarski_options
+ * @return object $tarski_options
+ */
+function flush_tarski_options() {
+	global $tarski_options;
+	$tarski_options = new Options;
+	$tarski_options->tarski_options_get();
+	
+	if(!get_option('tarski_options') || isset($tarski_options->deleted))
+		$tarski_options->tarski_options_defaults();
+}
+
+/**
+ * update_tarski_option() - Updates the given Tarski option with a new value.
+ * 
+ * This function can be used either to update a particular option
+ * with a new value, or to delete that option altogether by setting
+ * $drop to true.
+ * @since 1.4
+ * @param string $option
+ * @param string $value
+ * @param boolean $drop
+ * @global object $tarski_options
+ */
+function update_tarski_option($option, $value) {
+	$tarski_options = new Options;
+	$tarski_options->tarski_options_get();
+		
+	if(empty($value))
+		unset($tarski_options->$option);
+	else
+		$tarski_options->$option = $value;
+		
+	update_option('tarski_options', $tarski_options);
+	flush_tarski_options();
+}
+
+/**
+ * get_tarski_option() - Returns the given Tarski option.
+ * 
+ * @since 1.4
+ * @param string $name
+ * @return mixed
+ */
+function get_tarski_option($name) {
+	global $tarski_options;
+	
+	if(!is_object($tarski_options))
+		flush_tarski_options();
+	
+	return $tarski_options->$name;
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/classes/page_select.php b/wp-content/themes/vanilla/_tarski/classes/page_select.php
new file mode 100644
index 0000000000000000000000000000000000000000..3dbf007650d1c23b52b48deddce5c207cf795d4b
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/classes/page_select.php
@@ -0,0 +1,101 @@
+<?php
+
+/**
+ * class WalkerPageSelect
+ * 
+ * Extends the Walker class for generating HTML for tree-like structures.
+ * Used to generate a tree of ordered lists of pages, with associated
+ * form elements to allow for the selection of particular pages.
+ * @package Tarski
+ * @since 2.2
+ */
+class WalkerPageSelect extends Walker {
+	
+	var $tree_type = 'page';
+	var $db_fields = array('parent' => 'post_parent', 'id' => 'ID');
+	var $selected = array();
+	var $collapsed = array();
+	
+	/**
+	 * WalkerPageSelect() - Constructor for the class.
+	 * 
+	 * Constructor to allow a list of selected pages to be passed in.
+	 * @since 2.2
+	 */
+	function WalkerPageSelect($selected, $collapsed) {
+		$this->selected = $selected;
+		$this->collapsed = $collapsed;
+	}
+	
+	/**
+	 * start_lvl() - Start a level.
+	 * 
+	 * Implements the abstract start_lvl() function from the Walker class,
+	 * starting a particular level of the tree by opening an ordered list.
+	 * @since 2.2
+	 */
+	function start_lvl(&$output, $depth) {
+		$indent = str_repeat("\t", $depth);
+		$output .= "\n$indent<ol>\n";
+	}
+
+	/**
+	 * end_lvl() - End a level.
+	 * 
+	 * Implements the abstract end_lvl() function from the Walker class,
+	 * ending a particular level of the tree by closing an ordered list.
+	 * @since 2.2
+	 */
+	function end_lvl(&$output, $depth) {
+		$indent = str_repeat("\t", $depth);
+		$output .= "$indent</ol>\n";
+	}
+	
+	/**
+	 * start_el() - Start an element, and add its content.
+	 * 
+	 * Implements the abstract start_el() function from the Walker class,
+	 * starting a particular element of the tree by opening a list item
+	 * and adding its content.
+	 * @since 2.2
+	 * @hook filter the_title
+	 * Native WordPress filter on post titles.
+	 */
+	function start_el(&$output, $page, $depth) {
+		if ( $depth )
+			$indent = str_repeat("\t", $depth);
+		else
+			$indent = '';
+		
+		if ( in_array($page->ID, $this->selected) )
+			$checked = ' checked="checked"';
+		else
+			$checked = '';
+		
+		if ( in_array($page->ID, $this->collapsed) )
+			$coll_class = ' class="collapsed"';
+		else
+			$coll_class = '';
+		
+		$output .= $indent. '<li id="page-list-'. $page->ID. '"'. $coll_class. '>';
+		$output .= '<p class="nav-page">'.
+			'<label for="opt-pages-'. $page->ID. '">'. apply_filters('the_title', $page->post_title). '</label> '.
+			'<a title="'. __('View this page','tarski'). '" href="'. get_page_link($page->ID). '">&#8594;</a> '.
+			'<input id="opt-pages-'. $page->ID. '" name="nav_pages[]" type="checkbox" value="'. $page->ID. '"'. $checked. ' />'.
+		'</p>';
+	}
+	
+	/**
+	 * end_el() - End an element.
+	 * 
+	 * Implements the abstract end_el() function from the Walker class,
+	 * ending a particular element of the tree by closing a list item.
+	 * @since 2.2
+	 */
+	function end_el(&$output, $page, $depth) {
+		$output .= "</li>\n";
+	}
+	
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/classes/version.php b/wp-content/themes/vanilla/_tarski/classes/version.php
new file mode 100644
index 0000000000000000000000000000000000000000..d3f0645cf588d93d4d21d82a93bfdfaab91c5a35
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/classes/version.php
@@ -0,0 +1,166 @@
+<?php
+
+/**
+ * class Version
+ * 
+ * The Version class is the foundation of Tarski's update notifier.
+ * A Version object can have several properties: the current theme
+ * version (i.e. the currently installed version), the latest theme
+ * version (i.e. the most recently released version, as specified by
+ * the Tarski version feed {@link http://tarskitheme.com/version.atom}),
+ * the link to the release post on the Tarski website of the latest
+ * version, and the version status, i.e. whether the currently
+ * installed version equal to the latest version, and hence whether
+ * the theme is in need of updating.
+ * @package Tarski
+ * @since 2.0
+ */
+class Version {
+	
+	/**
+	 * The version number of the currently installed theme.
+	 * @var string
+	 */
+	var $current;
+	
+	/**
+	 * The version number of the latest Tarski release.
+	 * @var string
+	 */
+	var $latest;
+	
+	/**
+	 * Link to the latest Tarski release post.
+	 * @var string
+	 */
+	var $latest_link;
+	
+	/**
+	 * The status of the currently installed version.
+	 * @var string
+	 */
+	var $status;
+	
+	/**
+	 * current_version_number() - Returns current version number.
+	 * 
+	 * @since 2.0
+	 */
+	function current_version_number() {
+		$themedata = get_theme_data(TEMPLATEPATH . '/style.css');
+		$installed_version = trim($themedata['Version']);
+		if(strlen($installed_version) < 1) {
+			$this->current = 'unknown';
+		} else {
+			$this->current = $installed_version;
+		}
+	}
+	
+	/**
+	 * version_feed_data() - Returns latest version feed data.
+	 * 
+	 * @link http://tarskitheme.com/version.atom
+	 * @since 2.0
+	 * @return string $atomdata
+	 */
+	function version_feed_data() {
+		ob_start();
+		
+		// Thanks to Simon Willison for the inspiration
+		$cachefile = TARSKICACHE . "/version.atom";
+		$cachetime = 60 * 60;
+
+		// Serve from the cache if it is younger than $cachetime
+		if(file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)) && file_get_contents($cachefile)) {
+			$atomdata = file_get_contents($cachefile);
+		} else {
+			if(function_exists('curl_init')) { // If libcurl is installed, use that
+				$ch = curl_init(TARSKIVERSIONFILE);
+                curl_setopt($ch, CURLOPT_FAILONERROR, 1);
+                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+                curl_setopt($ch, CURLOPT_HEADER, 0);
+                curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);
+                curl_setopt($ch, CURLOPT_TIMEOUT, 1);
+				$atomdata = curl_exec($ch);
+				curl_close($ch);
+			} elseif(ini_get('allow_url_fopen')) { // Otherwise try file_get_contents()
+				$ctx = stream_context_create(array('http' => array('timeout' => 1.0)));
+				$atomdata = @file_get_contents(TARSKIVERSIONFILE, false, $ctx);
+			}
+
+			if(!empty($atomdata) && cache_is_writable("version.atom")) {
+				$fp = fopen($cachefile, "w");
+				if($fp) {
+					fwrite($fp, $atomdata);
+					fclose($fp);
+				}
+			}
+		}
+		
+		return $atomdata;
+		$atomdata = ob_get_contents();
+		ob_end_clean();
+
+		return $atomdata;
+	}
+	
+	/**
+	 * latest_version_number() - Returns latest version number.
+	 * 
+	 * @since 2.0
+	 * @return string
+	 */
+	function latest_version_number() {
+		if(preg_match('/<entry>.*?<title>(.+?)<\/title>.*?<\/entry>/is', Version::version_feed_data(), $matches)) {
+			$this->latest = wp_specialchars($matches[1]);
+		}
+	}
+	
+	/**
+	 * latest_version_link() - Returns link to latest version release post.
+	 * 
+	 * The link should be the release post on the Tarski website
+	 * for the latest version of Tarski, which will include a link
+	 * to download the .zip file of that latest version.
+ 	 * @since 2.0
+	 * @return string
+	 */
+	function latest_version_link() {
+		if(preg_match('/<entry>.*?<id>(.+?)<\/id>.*?<\/entry>/is', Version::version_feed_data(), $matches)) {
+			$this->latest_link = wp_specialchars($matches[1]);
+		}
+	}
+
+	/**
+	 * version_status() - Returns the status of the current version.
+	 * 
+	 * This lets Tarski know whether there is a connection to the version
+	 * feed {@link http://tarskitheme.com/version.atom} and if so, whether
+	 * the current version is equal to the latest version.
+	 * @since 2.0
+	 * @return string
+	 */
+	function version_status() {
+		$this->current_version_number();
+		$this->latest_version_number();
+		
+		$status = version_compare($this->latest, $this->current);
+		
+		if ($this->latest) {
+			if ($status === 0) {
+				$this->status = 'current';
+			} elseif ($status === 1) {
+				$this->status = 'older';
+			} elseif ($status === -1) {
+				$this->status = 'newer';
+			} else {
+				$this->status = 'error';
+			}
+		} else {
+			$this->status = 'no_connection';
+		}
+	}
+	
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/core.php b/wp-content/themes/vanilla/_tarski/core.php
new file mode 100644
index 0000000000000000000000000000000000000000..c06bc50713e8f27dc83246cef2c7158400c69258
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/core.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * check_input() - Checks input is of correct type
+ * 
+ * Always returns true when WP_DEBUG is true, to allow for easier debugging
+ * in the development environment while handling erroneous input more
+ * robustly in the production environment.
+ * @see http://uk3.php.net/manual/en/function.gettype.php
+ * @since 2.1
+ * @param mixed $input
+ * @param string $type
+ * @param string $name
+ * @return boolean
+ *
+ */
+function check_input($input, $type, $name = '') {
+	if ( WP_DEBUG === true )
+		return true;
+
+	if ( $type == 'object' && strlen($name) > 0 )
+		return is_a($input, $name);
+	else
+		return call_user_func("is_$type", $input);
+}
+
+/**
+ * theme_version() - Returns the current theme version.
+ * 
+ * @since 2.0
+ * @return string
+ */
+function theme_version() {
+	$themedata = get_theme_data(TEMPLATEPATH . '/style.css');
+	$version = trim($themedata['Version']);
+	
+	if (strlen($version) > 0)
+		return $version;
+}
+
+/**
+ * detectWPMU() - Detects whether WordPress Multi-User is in use.
+ * 
+ * @since 1.4
+ * @return boolean
+ */
+function detectWPMU() {
+	return function_exists('is_site_admin');
+}
+
+/**
+ * is_valid_tarski_style() - Checks whether a given file name is a valid Tarski stylesheet name.
+ * 
+ * It must be a valid CSS identifier, followed by the .css file extension,
+ * and it cannot have a name that is already taken by Tarski's CSS namepsace.
+ * @since 2.0
+ * @param string $file
+ * @return boolean
+ */
+function is_valid_tarski_style($file) {
+	return (bool) (
+		!preg_match('/^\.+$/', $file)
+		&& preg_match('/^[A-Za-z][A-Za-z0-9\-]*.css$/', $file)
+		&& !preg_match('/^(janus|centre|rtl|js).css$/', $file)
+	);
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/css/admin.css b/wp-content/themes/vanilla/_tarski/css/admin.css
new file mode 100644
index 0000000000000000000000000000000000000000..fe722a0b17c7d36cca246f3a55d65e9a60d9a1e7
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/css/admin.css
@@ -0,0 +1,10 @@
+/**
+ * Tarski stylesheet for WordPress admin pages
+ * 
+ * Styles the few cross-admin-page elements Tarski has, like messages.
+ */
+
+/**
+ * Messages
+ */
+.tarski-message { max-width:958px; margin: 0 15px 1em 15px; border: 1px solid #c6d9e9; padding: 10px; background: #eaf3fa; }
diff --git a/wp-content/themes/vanilla/_tarski/css/options.css b/wp-content/themes/vanilla/_tarski/css/options.css
new file mode 100644
index 0000000000000000000000000000000000000000..e9bc68f5fedb1de47a4e034cb44394ed40ee5657
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/css/options.css
@@ -0,0 +1,92 @@
+/**
+ * Tarski options page
+ * 
+ * Tarski's options page lets users change the way Tarski looks and behaves.
+ * As a fairly involved form-based page with a non-standard layout, a certain
+ * amount of CSS is needed to keep things in order.
+ */
+
+/**
+ * Overall page styling
+ * 
+ * Broad-brush stuff, setting the stage for the form elements. Makes the page
+ * background grey, puts the page title in its place, and sorts out other
+ * header and footer elements.
+ */
+#tarski-options {}
+#tarski-options-header { clear: both; margin: 0.4em 0 0.8em 0; border-bottom: 1px solid #dadada; padding: 0.4em; }
+#tarski-options-header h2 { float: left; margin: 0 0.8em 0 0; border: none; padding: 0; }
+#tarski-save-options, #tarski-info { display: block; padding: 0; }
+#tarski-save-options { float: left; margin: 0; }
+#tarski-info { float: right; margin: 0.8em 0 0 0; }
+.rtl { text-align: right; direction: rtl; }
+
+/**
+ * Positioning
+ * 
+ * The 'span' class is for elements which span the entire page width, while
+ * the 'primary' and 'secondary' classes are for blocks which are floated to
+ * left and right respectively, clearing only those above them and thus
+ * allowing for fairly flexible layouts.
+ */
+.span { clear: both; }
+.clearer { display: block; clear: both; height: 0; visibility: hidden; }
+.primary, .secondary { width: 49.5%; }
+.primary, .rtl .secondary { float: left; clear: left; }
+.secondary, .rtl .primary { float: right; clear: right; }
+
+/**
+ * Form sections and elements
+ * 
+ * Form layouts are a dark art, and these rules let us specify a bit more
+ * precisely than the WordPress defaults do how things should appear.
+ */
+.section label, .section select, #opt-nav-homename { display: block; margin: 0.8em 0; }
+.section { margin: 0 0 0.8em 0; padding: 0.8em 0.8em 0.4em 0.8em; background: #eaf3fa; position: relative; *zoom: 1; }
+.section h3, .section p { margin: 0 0 0.8em 0; }
+.tip { margin: 0.8em 0; border: 1px solid #c6d9e9; border-left-width: 3px; padding: 0.4em; background: #f7fafd; }
+#tarski-options .highlight { background: none; color: #d54e21; }
+#tarski-options .tip p:last-child { margin-bottom: 0; }
+#tarski-headers label { display: inline; }
+#tarski-headers label img { background: #fff; margin: 5px; font-weight: bold; }
+
+/**
+ * Navbar selection node tree
+ * 
+ * The navbar selection tool is an ordered list of pages, whose list elements
+ * may also contain child lists of sub-pages.
+ */
+#navbar-select { clear: both; margin: 0 0 1em 0; padding: 0; }
+#navbar-select ol { margin: 0; padding: 0; }
+#navbar-select li { margin: 0; padding: 0; list-style-type: none; }
+#navbar-select li ol li { padding-left: 1.5em; }
+#navbar-select .nav-page { position: relative; margin: 0 0 0.5em 0; padding: 4px 20px 3px 5px; background-color: #cedeeb; background-repeat:no-repeat; background-position: 5px 6px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
+#navbar-select .nav-page a { text-decoration: none; }
+#navbar-select.js .nav-page { padding-left: 28px; background-image: url('../../images/page_select.png'); }
+#navbar-select .nav-page label { display: inline; margin: 0 0 0.7em 0; }
+#navbar-select .nav-page input { display: block; position: absolute; top: 4px; right: 5px; width: 1em; height: 1em; }
+#navbar-select .nav-page .toggle { display: block; position: absolute; top: 0; left: 0; width: 23px; height: 23px; background: url('../../images/page_select.png') no-repeat 5px -194px; text-indent: -9999em; cursor: pointer; }
+#navbar-select.js .collapsed .nav-page .collapsed-toggle { background-position: 5px -94px; }
+#navbar-select.js li.collapsed ol { display: none; }
+/* Some hacks to work around Internet Explorer bugs */
+#navbar-select, #navbar-select ol, #navbar-select li, #navbar-select .nav-page, #navbar-select .nav-page input { *zoom: 1; }
+#navbar-select .nav-page input { _top: 5px; }
+
+/**
+ * Checkboxes and radio buttons
+ * 
+ * The Tarski options page uses JavaScript to allow the styling of input
+ * elements. It's mainly used to create clickable header image thumbnails
+ * and consequently the styling rules here are fairly minimal, but all the
+ * important classes are listed for possible future reference.
+ */
+label.checkbox_checked {}
+label.checkbox_unchecked {}
+label.radio_checked {}
+label.radio_checked img { border: 2px solid #d54e21; padding: 3px; }
+label.radio_unchecked  {}
+label.radio_unchecked img { border: 1px solid #8ebfd5; padding: 4px; }
+label.radio_unchecked:hover {}
+label.radio_unchecked:hover img { border: 1px solid #d54e21; padding: 4px; }
+label.highlighted { border: 1px solid #333; }
+.crirHidden { position: absolute; left: -9999em; }
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/css/print.css b/wp-content/themes/vanilla/_tarski/css/print.css
new file mode 100644
index 0000000000000000000000000000000000000000..83fef4e84ceb620eee2b6a799a1fbefb73f21348
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/css/print.css
@@ -0,0 +1,38 @@
+/*
+Tarski print stylesheet
+*/
+
+#header-image, #navigation, #sidebar, #footer { display: none; }
+
+body { border: none; padding: 0; text-align: left; font-size: 10pt; line-height: normal; font-family: Verdana, sans-serif; color: #000; background: #fff; }
+	body.rtl { text-align: right; direction: rtl; }
+
+#blog-title { font-size: 18pt; font-weight: bold; margin: 1em 0 0.5em 0; }
+	#blog-title a:link, #blog-title a:visited, #blog-title a:hover, #blog-title a:active { color: #000; text-decoration: none; }
+
+
+	h1, h2, h4 { font-family: "Times New Roman", Times, serif; }
+	h1 { font-size: 24pt; font-weight: normal; margin: 1em 0; }
+	h2 { font-size: 18pt; font-weight: normal; margin: 0.5em 0; }
+	h3 { font-size: 10pt; font-weight: normal; text-transform: uppercase; margin: 0 0 1em 0; border-bottom: 1px dotted #000; padding: 0 0 0.2em 0; }
+	h4 { font-size: 12px; font-weight: normal; margin: 0 0 0.5em 0; }
+
+	body .entry { margin: 0 0 2em 0; }
+	body .entry .meta { margin: 0 0 1em 0; }
+		body .entry .meta .title { margin: 0 0 0.1em 0; }
+		body .entry .meta .metadata { margin: 0; font-size: 9pt; }
+
+	ul, ol { margin: 0 0 1em 0; }
+	ul { list-style: circle; }
+	
+	p { margin: 0 0 1em 0; }
+		blockquote { margin: 0 2em 1em 2em; }
+		strong { font-weight: bold; }
+		em { font-style: italic; }
+		cite { font-style: italic; }
+		code { font-family: Courier, "Courier New", monospace; }
+
+a img { border: none; }
+
+a:link, a:visited, a:hover, a:active { color: #000; text-decoration: underline; }
+	body .content a[href]:after { font-size: 9pt; content: " (" attr(href) ") "; }
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/css/screen.css b/wp-content/themes/vanilla/_tarski/css/screen.css
new file mode 100644
index 0000000000000000000000000000000000000000..1beac9dc30799799e634a5ad347ff2a1da1febc6
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/css/screen.css
@@ -0,0 +1,30 @@
+/*
+Tarski screen stylesheet
+*/
+
+/* Main structure
+----------------------------------------------- */
+body { min-width: 760px; }
+#wrapper { width: 760px; }
+
+/* Positioning
+----------------------------------------------- */
+body .primary { width: 500px; float: right; }
+	body.janus .primary { float: left; }
+body .primary-span { padding-left: 220px; clear: both; }
+	body.janus .primary-span { padding-left: 0; padding-right: 220px; }
+
+body .secondary { width: 200px; float: left; }
+	body.janus .secondary { float: right; }
+body .secondary-span { padding-left: 520px; clear: both; }
+	body.janus .secondary-span { padding-right: 520px; }
+
+body { text-align: left; }
+body.centre { text-align: center; }
+body #wrapper { margin: 0 auto 0 0; }
+body.centre #wrapper { margin: 0 auto; }
+
+/* Comment form
+--------------------------------------- */
+body #author, body #email, body #url { width: 194px; }
+body #comment-input textarea { width: 494px; }
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/display/credits.php b/wp-content/themes/vanilla/_tarski/display/credits.php
new file mode 100644
index 0000000000000000000000000000000000000000..4b664fe32c9597ea6159327ac42aee89bab84971
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/display/credits.php
@@ -0,0 +1,6 @@
+<div class="primary content">
+	<p><?php _e('Powered by <a href="http://wordpress.org/">WordPress</a> and <a href="http://tarskitheme.com/">Tarski</a>', 'tarski');
+	if(detectWPMU()) {
+		echo ' | '. sprintf( __('Hosted by %s','tarski'), '<a href="http://'. $current_site->domain. $current_site->path. '">'. $current_site->site_name. '</a>' );
+	} ?></p>
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/display/debug.php b/wp-content/themes/vanilla/_tarski/display/debug.php
new file mode 100644
index 0000000000000000000000000000000000000000..57f68a64845dea5c2de9446bf4f2a990a29c901e
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/display/debug.php
@@ -0,0 +1,12 @@
+<?php global $tarski_options; ?>
+<div class="tarski-debug">
+	<h4>$_POST</h4>
+	<pre>
+		<?php print_r($_POST); ?>
+	</pre>
+	
+	<h4>$tarski_options</h4>
+	<pre>
+		<?php print_r($tarski_options); ?>
+	</pre>
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/display/feed_link.php b/wp-content/themes/vanilla/_tarski/display/feed_link.php
new file mode 100644
index 0000000000000000000000000000000000000000..b686501c1747a6194dca30e2ca864e1813ccdc83
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/display/feed_link.php
@@ -0,0 +1,3 @@
+<div class="secondary">
+	<p><a class="feed" href="<?php bloginfo(get_default_feed() . '_url'); ?>"><?php _e('Subscribe to feed','tarski'); ?></a></p>
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/display/no_posts.php b/wp-content/themes/vanilla/_tarski/display/no_posts.php
new file mode 100644
index 0000000000000000000000000000000000000000..02fb6a45511f8af7fd95ceb256a3d743b8ebe01a
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/display/no_posts.php
@@ -0,0 +1,11 @@
+<div class="entry">
+	
+	<div class="meta">
+		<h1 class="title"><?php _e('Sorry','tarski'); ?></h1>
+	</div>
+	
+	<div class="content">
+		<p><?php _e('Looks like there&#8127;s nothing here, sorry. You might want to try the search function. Alternatively, return to the ','tarski'); ?><a href="<?php echo get_bloginfo('url'); ?>/"><?php _e('front page','tarski'); ?></a><?php _e('.','tarski'); ?></p>
+	</div>
+	
+</div> <!-- /entry -->
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/display/options_page.php b/wp-content/themes/vanilla/_tarski/display/options_page.php
new file mode 100644
index 0000000000000000000000000000000000000000..e8669f28df1bdfe6f3c53063e83c5b38531636f4
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/display/options_page.php
@@ -0,0 +1,292 @@
+<div id="tarski-options" class="wrap tarski-options<?php if(get_bloginfo("text_direction") == "rtl") { echo " rtl"; } ?>">
+	
+	<?php if(isset($_POST['submit']) && !get_tarski_option('deleted')) { ?>
+	<div id="updated" class="updated fade">
+		<?php if(isset($_POST['restore_options'])) { ?>
+		<p><?php echo __('Tarski options have been restored.','tarski') . ' <a href="' . get_bloginfo('url') . '/">' . __('View site &raquo;','tarski') . '</a>'; ?></p>
+		<?php } else { ?>
+		<p><?php echo __('Tarski options have been updated.','tarski') . ' <a href="' . get_bloginfo('url') . '/">' . __('View site &raquo;','tarski') . '</a>'; ?></p>
+		<?php } ?>
+	</div>
+	<?php } ?>
+	
+	<?php if(get_tarski_option('deleted')) { ?>
+	<div class="updated fade">
+		<form name="dofollow" action="<?php echo $tarski_options_link; ?>" method="post">
+			<?php wp_nonce_field('update-options'); ?>
+			<input type="hidden" name="restore_options" value="1" />
+			<p><?php _e('You have deleted your Tarski options.','tarski'); ?> <input class="button" type="submit" name="submit" value="<?php _e('Restore Tarski Options &raquo;','tarski'); ?>" /></p>
+		</form>
+	</div>
+	<?php } ?>
+	
+<form name="dofollow" action="<?php echo $tarski_options_link; ?>" method="post">
+	
+	<div id="tarski-options-header">
+		<h2><?php _e('Tarski Options', 'tarski'); ?></h2>
+		<p id="tarski-save-options">
+			<input type="submit" class="button-secondary" name="submit" value="<?php _e('Save Options','tarski'); ?>" />
+			<input type="hidden" name="page_options" value="'dofollow_timeout'" />
+		</p>
+		
+		<p id="tarski-info">
+			<a href="http://tarskitheme.com/help/"><?php _e('Tarski documentation','tarski'); ?></a>
+			| <a href="http://tarskitheme.com/credits/"><?php _e('Credits &amp; Thanks','tarski'); ?></a>
+			| <a href="http://tarskitheme.com/forum/"><?php _e('Forum','tarski'); ?></a>
+		</p>
+		
+		<div class="clearer"></div>
+	</div>
+		
+	<div id="tarski-update-notifier" class="secondary"><div class="section">
+	<?php if ( (!detectWPMU() || detectWPMUadmin()) ) { ?>
+	<?php if(can_get_remote()) { ?>
+		<h3><?php _e('Update Notification','tarski'); ?></h3>
+		<?php if(get_tarski_option('update_notification')) { ?>
+			<p><?php _e('Tarski is set to notify you when an update is available.','tarski'); ?></p>
+		<?php } else { ?>
+			<p><?php _e('Tarski can be set to notify you when updates are available.','tarski'); ?></p>
+		<?php } ?>
+		<label for="update-on"><input type="radio" id="update-on" name="update_notification" value ="on" <?php if(get_tarski_option('update_notification')) { echo 'checked="checked" '; } ?>/> <?php _e('Update notification on (recommended)','tarski'); ?></label>
+		<label for="update-off"><input type="radio" id="update-off" name="update_notification" value ="off" <?php if(!get_tarski_option('update_notification')) { echo 'checked="checked" '; } ?>/> <?php _e('Update notification off','tarski'); ?></label>
+		<?php if(!cache_is_writable('version.atom') && get_tarski_option('update_notification')) { ?>
+		<p class="tip"><?php printf( __('The version check could not be cached. To enable caching, follow the tutorial on the %s page.','tarski'), '<a href="http://tarskitheme.com/help/updates/notifier/">' . __('update notifier','tarski') . '</a>' ); ?></p>
+		<?php } ?>
+	<?php } else { ?>
+		<h3><?php _e('Update Notification','tarski'); ?></h3>
+		<p><?php printf(
+			__('Your server appears to have %1$s disabled and %2$s not installed. This means that the update notifier will not work.','tarski'),
+			'<a href="http://uk.php.net/manual/en/ref.filesystem.php"><code>allow_url_fopen</code></a>',
+			'<a href="http://uk.php.net/manual/en/ref.curl.php"><code>libcurl</code></a>'
+		); ?></p>
+		<p><?php printf(
+			__('You can read our %1$s on how to fix your server setup, but if you are unable to change it we recommend subscribing to either the %2$s or the %3$s in your feed reader, so that you can be alerted when new Tarski versions become available.','tarski'),
+			'<a href="http://tarskitheme.com/help/updates/notifier/">' . __('documentation','tarski') . '</a>',
+			'<a href="' . TARSKIVERSIONFILE . '">' . __('Tarski version feed','tarski') . '</a>',
+			'<a href="http://tarskitheme.com/feed/">' . __('Tarski website feed','tarski') . '</a>'
+		); ?></p>
+	<?php } } ?>
+	</div></div>
+	
+	<div class="primary"><div class="section">
+		<h3><?php _e('Navigation Display','tarski'); ?></h3>
+		<?php
+		
+		$pages = &get_pages('sort_column=post_parent,menu_order');
+		
+		if($pages) {
+			echo '<p>'. __('Pages selected here will display in your navbar.','tarski'). "</p>\n";
+			echo tarski_navbar_select($pages);
+			echo '<input type="hidden" id="opt-collapsed-pages" name="collapsed_pages" value="' . get_tarski_option('collapsed_pages') . '" />' . "\n\n";			
+			echo '<p class="tip">' . __('To change the order in which they appear, edit the &#8216;Page Order&#8217; value on each page.','tarski') . "</p>\n";
+			
+		} else {
+			echo '<p>' . __('There are no pages to select navbar items from.','tarski') . "</p>\n";
+		} ?>
+		
+		<h3><?php _e('Navigation Options','tarski'); ?></h3>
+		
+		<?php $categories = &get_categories('type=link&hide_empty=0'); ?>
+		<label for="opt-nav-extlinkcat"><?php _e('Add external links to the navbar.','tarski'); ?></label>
+		<select name="nav_extlinkcat" id="opt-nav-extlinkcat" size="1">
+			<option value="0"><?php _e('No external links','tarski'); ?></option>
+			<?php foreach($categories as $link_cat) { ?>
+				<?php if(get_tarski_option('nav_extlinkcat') == $link_cat->cat_ID) {
+					$status = ' selected="selected"';
+				} else {
+					$status = false;
+				}
+				printf(
+					'<option'. '%1$s'. ' value="%2$s">%3$s</option>',
+					$status,
+					$link_cat->cat_ID,
+					$link_cat->cat_name
+				); ?>
+			<?php } ?>
+		</select>
+		<p class="tip"><?php printf( __('You can add or edit links on the %s page. We recommend creating a link category specifically for the links you want displayed in your navbar, but you can use any category.','tarski'), '<a href="'. admin_url('link-manager.php') . '">'. __('Manage Links','tarski'). '</a>' ); ?></p>
+		
+		<label for="opt-nav-homename"><?php _e('Rename your &#8216;Home&#8217; link.','tarski'); ?></label>
+		<input type="hidden" name="home_link_name" value="Home" />
+		<input type="text" id="opt-nav-homename" name="home_link_name" value="<?php if(get_tarski_option('home_link_name')) { echo get_tarski_option('home_link_name'); } else { _e('Home','tarski'); } ?>" />
+		 <p class="tip"><?php _e('This link is not displayed when you have a static front page.','tarski'); ?></p>
+	</div></div>
+	
+	<div class="secondary">
+		<div class="section">
+			<h3><?php _e('Alternate Style','tarski'); ?></h3>
+		<?php
+		$style_dir = dir(TEMPLATEPATH . '/styles');
+		if($style_dir) {
+			while(($file = $style_dir->read()) !== false) {
+				if(is_valid_tarski_style($file)) {
+					$styles[] = $file;
+				}
+			}
+		}
+		if($style_dir && $styles) { ?>
+			<select name="alternate_style" id="alternate_style" size="1">
+				<option<?php if(!get_tarski_option('style')) { echo ' selected="selected"'; } ?> value=""><?php _e('Default style','tarski'); ?></option>
+				<?php foreach($styles as $style) {
+					if(get_tarski_option('style') == $style) {
+						$status = ' selected="selected"';
+					} else {
+						$status = false;
+					}
+					printf(
+						'<option%1$s value="%2$s">%3$s</option>'."\n",
+						$status,
+						$style,
+						$style
+					);
+				} ?>
+			</select>
+		<?php } ?>
+		
+		<?php if(detectWPMU()) { // WPMU users ?>
+			<p><?php _e('Tarski allows you to select an alternate style that modifies the default one. Choose from the list above.','tarski'); ?></p>
+		<?php } else { // non-WPMU users ?>
+			<p><?php printf( __('Tarski allows you to select an %1$s that modifies the default one. Choose from the list above, or upload your own to %2$s.','tarski'), '<a href="http://tarskitheme.com/help/styles/">'. __('alternate style','tarski'). '</a>', '<code>wp-content/themes/' . get_template() . '/styles/</code>' ); ?></p>
+		<?php } ?>
+		</div>
+		
+		<div class="section">
+			<h3><?php _e('Asides Category','tarski'); ?></h3>
+			<select name="asides_category" id="asides_category">
+				<option <?php if(!get_tarski_option('asidescategory')) { echo 'selected="selected" '; } ?>value="0"><?php _e('Disable asides','tarski'); ?></option>
+				<?php $asides_cats = &get_categories('hide_empty=0');
+				if($asides_cats) {
+					foreach ($asides_cats as $cat) {
+						if(($cat->cat_ID) == get_tarski_option('asidescategory')) {
+							$status = 'selected ="selected" ';
+						} else {
+							$status = false;
+						}
+						echo '<option '. $status. 'value="'. $cat->cat_ID. '">'. $cat->cat_name. '</option>';
+					}
+				} ?>
+			</select>
+			<p><?php echo __('This option will make Tarski display posts from the selected category in the ','tarski') . '<a href="http://photomatt.net/2004/05/19/asides/">' . __('Asides','tarski') . '</a>' . __(' format. Asides are short posts, usually only a single paragraph, and Tarski displays them in a condensed format without titles.','tarski'); ?></p>
+		</div>
+		
+		<div class="section">
+			<h3><?php _e('Sidebar','tarski'); ?></h3>
+			
+			<p><?php _e('The sidebar for posts and pages can be the same as that for index pages, or use its own set of widgets.','tarski'); ?></p>
+				
+			<label for="sidebar-pp-type">
+				<input type="hidden" name="sidebar_pp_type" value="0" />
+				<input type="checkbox" id="sidebar-pp-type" name="sidebar_pp_type" value="main" <?php if(get_tarski_option('sidebar_pp_type') == 'main') { echo 'checked="checked" '; } ?>/>
+				<?php _e('Same content as main sidebar?','tarski'); ?>
+			</label>
+		</div>
+	</div>
+	
+	<div class="span"><div class="section">
+		<h3><?php _e('Header Images', 'tarski'); ?></h3>
+		
+		<div id="tarski-headers">
+			<?php
+			$name = get_tarski_option('header');
+			if ( $header_dir = dir(TEMPLATEPATH . '/headers' ) ) {
+				while(($file = $header_dir->read()) !== false) {
+					if(!preg_match('|^\.+$|', $file) && preg_match('@\-thumb.(jpg|png|gif)$@', $file)) {
+						$header_images[] = $file;
+					}
+				}
+				if ($header_dir || $header_images) {
+					$count = 0;
+					foreach($header_images as $header_image) {
+						$count++;
+						$header_name = str_replace('-thumb', '', $header_image); ?>
+						<label for="header_<?php echo $header_name; ?>"><img class="header_image" alt="<?php echo $header_name; ?>" src="<?php echo get_bloginfo('template_directory') . '/headers/' . $header_image; ?>" /></label>
+						<input id="header_<?php echo $header_name; ?>" name="header_image" class="crirHiddenJS" value="<?php echo $header_name; ?>" type="radio"<?php if(get_tarski_option('header') == $header_name) { echo ' checked="checked"'; } ?> />
+					<?php }
+				}
+			} ?>
+			</div>
+			
+			<p><?php printf( __('Choose a header image by clicking on it. The current image is the %s one.','tarski'), '<span class="highlight">' . __('highlighted','tarski') . '</span>' ); ?></p>
+		<?php if(!detectWPMU()) { ?>
+		<div class="tip">
+			<p><?php printf( __('You can upload your own header images (.gif, .jpg or .png) to %s.','tarski'), '<code>wp-content/themes/' . get_template() . '/headers/</code>' ); ?></p>
+			<p><?php printf( __('Make sure that you upload a thumbnail file as well. If your image is named %1$s, the corresponding thumbnail file should be named %2$s.','tarski'), '<code>'. __('example','tarski'). '.jpg</code>', '<code>'. __('example','tarski'). '-thumb.jpg</code>'); ?></p>
+		</div>
+		<?php } ?>
+	</div></div>
+	
+	<div class="primary"><div id="tarski-miscellaneous-options" class="section">
+		<h3><?php _e('Miscellaneous Options','tarski'); ?></h3>
+		
+		<label for="opt-misc-title">
+			<input type="hidden" name="display_title" value="0" />
+			<input type="checkbox" id="opt-misc-title" name="display_title" value="1" <?php if(get_tarski_option('display_title')) { echo 'checked="checked" '; } ?>/>
+			<?php _e('Display site title','tarski'); ?>
+		</label>
+		
+		<label for="opt-misc-tagline">
+			<input type="hidden" name="display_tagline" value="0" />
+			<input type="checkbox" id="opt-misc-tagline" name="display_tagline" value="1" <?php if(get_tarski_option('display_tagline')) { echo 'checked="checked" '; } ?>/>
+			<?php _e('Display site tagline','tarski'); ?>
+		</label>
+		
+		<?php if(!get_bloginfo('description')) { ?>
+			<p class="tip"><?php echo __('Your tagline is currently ','tarski'). '<a href="'. admin_url('options-general.php') . '">'. __('blank','tarski'). '</a>'. __(' and won&#8217;t be displayed.')  ?></p>
+		<?php } ?>
+		
+		<label for="opt-misc-cats">					
+			<input type="hidden" name="show_categories" value="0" />
+			<input type="checkbox" id="opt-misc-cats" name="show_categories" value="1" <?php if(get_tarski_option('show_categories')) { echo 'checked="checked" '; } ?>/>
+			<?php _e('Show post categories','tarski'); ?>
+		</label>
+		
+		<label for="opt-misc-tags">					
+			<input type="hidden" name="tags_everywhere" value="0" />
+			<input type="checkbox" id="opt-misc-tags" name="tags_everywhere" value="1" <?php if(get_tarski_option('tags_everywhere')) { echo 'checked="checked" '; } ?>/>
+			<?php _e('Show tags everywhere','tarski'); ?>
+		</label>
+		
+		<label for="opt-misc-pagination">
+			<input type="hidden" name="use_pages" value="0" />
+			<input type="checkbox" id="opt-misc-pagination" name="use_pages" value="1" <?php if(get_tarski_option('use_pages')) { echo 'checked="checked" '; } ?>/>
+			<?php _e('Paginate index pages (such as the front page or monthly archives)','tarski'); ?>
+		</label>
+		
+		<label for="opt-misc-centre">						
+			<input type="hidden" name="centred_theme" value="0" />
+			<input type="checkbox" id="opt-misc-centre" name="centred_theme" value="1" <?php if(get_tarski_option('centred_theme')) { echo 'checked="checked" '; } ?>/>
+			<?php _e('Centre the theme','tarski'); ?>
+		</label>
+		
+		<label for="opt-misc-janus">	
+			<input type="hidden" name="swap_sides" value="0" />
+			<input type="checkbox" id="opt-misc-janus" name="swap_sides" value="1" <?php if(get_tarski_option('swap_sides')) { echo 'checked="checked" '; } ?>/>
+			<?php _e('Switch the column positions (left becomes right, and vice versa)','tarski'); ?>
+		</label>
+		
+		<label for="opt-misc-titleswap">	
+			<input type="hidden" name="swap_title_order" value="0" />
+			<input type="checkbox" id="opt-misc-titleswap" name="swap_title_order" value="1" <?php if(get_tarski_option('swap_title_order')) { echo 'checked="checked" '; } ?>/>
+			<?php _e('Reverse document title order (show site name last)','tarski'); ?>
+		</label>
+	</div></div>
+	
+</form>
+	
+	<?php if(get_option('tarski_options') && !get_tarski_option('deleted')) { ?>
+	<div class="secondary">
+		<div class="section">
+			<h3><?php _e('Reset Options', 'tarski'); ?></h3>
+			<form action="<?php echo $tarski_options_link; ?>" method="post">
+				<p><input class="button-secondary" type="submit" name="submit" value="<?php _e('Reset Tarski&#8217;s options to their default values','tarski'); ?>" /></p>
+				<?php wp_nonce_field('update-options'); ?>
+				<input type="hidden" name="delete_options" value="1" />
+			</form>
+			<p class="tip"><?php _e('If you change your mind, you&#8217;ll have three hours to restore your options before they&#8217;re removed for good.','tarski'); ?></p>
+		</div>
+	</div>
+	<?php } ?>
+	
+	
+	<div class="clearer"></div>
+</div>
diff --git a/wp-content/themes/vanilla/_tarski/functions.php b/wp-content/themes/vanilla/_tarski/functions.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7b35f6321c1e7d328267e138eb16e174fb15d0a
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/functions.php
@@ -0,0 +1,37 @@
+<?php
+
+// Path constants
+define('TARSKICLASSES', TEMPLATEPATH . '/library/classes');
+define('TARSKIHELPERS', TEMPLATEPATH . '/library/helpers');
+define('TARSKIDISPLAY', TEMPLATEPATH . '/app/display');
+define('TARSKICACHE', TEMPLATEPATH . '/app/cache');
+define('TARSKIVERSIONFILE', 'http://tarskitheme.com/version.atom');
+
+// Core library files
+require_once(TEMPLATEPATH . '/library/core.php');
+require_once(TARSKICLASSES . '/options.php');
+require_once(TARSKICLASSES . '/asset.php');
+
+// Admin library files
+if (is_admin()) {
+	require_once(TARSKICLASSES . '/version.php');
+	require_once(TARSKICLASSES . '/page_select.php');
+	require_once(TARSKIHELPERS . '/admin_helper.php');
+}
+
+// Various helper libraries
+require_once(TARSKIHELPERS . '/template_helper.php');
+require_once(TARSKIHELPERS . '/content_helper.php');
+require_once(TARSKIHELPERS . '/author_helper.php');
+require_once(TARSKIHELPERS . '/tag_helper.php');
+require_once(TARSKIHELPERS . '/widgets.php');
+
+// API files
+require_once(TEMPLATEPATH . '/app/api/hooks.php');
+require_once(TEMPLATEPATH . '/app/api/constants_helper.php');
+include_once(TEMPLATEPATH . '/app/api/deprecated.php');
+
+// Launch
+require_once(TEMPLATEPATH . '/app/launcher.php');
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/headers/blank-thumb.gif b/wp-content/themes/vanilla/_tarski/headers/blank-thumb.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a5a96bc9d5a69f85c01c39593064975a5105f0af
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/blank-thumb.gif differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/blank.gif b/wp-content/themes/vanilla/_tarski/headers/blank.gif
new file mode 100644
index 0000000000000000000000000000000000000000..86e79b017acfd9df836a950afe0e9bd0a47c27ee
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/blank.gif differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/coffeerings-thumb.jpg b/wp-content/themes/vanilla/_tarski/headers/coffeerings-thumb.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fecf9d3fc72b33c8d8bab713745df4153415c761
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/coffeerings-thumb.jpg differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/coffeerings.jpg b/wp-content/themes/vanilla/_tarski/headers/coffeerings.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b983851004794e005f294e2b73ae1edb698c44fd
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/coffeerings.jpg differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/greytree-thumb.jpg b/wp-content/themes/vanilla/_tarski/headers/greytree-thumb.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bcc5796387d0467f362281066b0bb9f5b6080759
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/greytree-thumb.jpg differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/greytree.jpg b/wp-content/themes/vanilla/_tarski/headers/greytree.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..564cdae67da51316c6b117084160d48da36b8a56
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/greytree.jpg differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/mountain-thumb.png b/wp-content/themes/vanilla/_tarski/headers/mountain-thumb.png
new file mode 100644
index 0000000000000000000000000000000000000000..09c7ee6e09074371ddd5720e48d486ad77ef7b3f
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/mountain-thumb.png differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/mountain.png b/wp-content/themes/vanilla/_tarski/headers/mountain.png
new file mode 100644
index 0000000000000000000000000000000000000000..f974acf51960507f488379b6e2d933264b798a9d
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/mountain.png differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/orbits-thumb.gif b/wp-content/themes/vanilla/_tarski/headers/orbits-thumb.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f0627ba46addaaedc234bdfa855567648b3d44ad
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/orbits-thumb.gif differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/orbits.gif b/wp-content/themes/vanilla/_tarski/headers/orbits.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d72423dd9a8e3309f5e480d9805bbe7ae7d3f67c
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/orbits.gif differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/splatter-thumb.png b/wp-content/themes/vanilla/_tarski/headers/splatter-thumb.png
new file mode 100644
index 0000000000000000000000000000000000000000..8aa70e51aff863d27c0917a40816137949f5e554
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/splatter-thumb.png differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/splatter.png b/wp-content/themes/vanilla/_tarski/headers/splatter.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa8b936be5655b36f266364fbf8797794e81b5d9
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/splatter.png differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/spots-thumb.gif b/wp-content/themes/vanilla/_tarski/headers/spots-thumb.gif
new file mode 100644
index 0000000000000000000000000000000000000000..aab9174473448c0e85e20e93e9bececaf4734cda
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/spots-thumb.gif differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/spots.gif b/wp-content/themes/vanilla/_tarski/headers/spots.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4e5963cd52b3766dcbefde2fb2e687f396a8dfdf
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/spots.gif differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/thoughtwind-thumb.jpg b/wp-content/themes/vanilla/_tarski/headers/thoughtwind-thumb.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bdb429b289f70adb85d1141492f9d63fe8200106
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/thoughtwind-thumb.jpg differ
diff --git a/wp-content/themes/vanilla/_tarski/headers/thoughtwind.jpg b/wp-content/themes/vanilla/_tarski/headers/thoughtwind.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3bc4b5a0546760faeeb587660d8ca0ba0b64ec69
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/headers/thoughtwind.jpg differ
diff --git a/wp-content/themes/vanilla/_tarski/helpers/admin_helper.php b/wp-content/themes/vanilla/_tarski/helpers/admin_helper.php
new file mode 100644
index 0000000000000000000000000000000000000000..d58ce74270770a82ff83a25a9c7e70a83dd6ddb7
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/helpers/admin_helper.php
@@ -0,0 +1,455 @@
+<?php
+
+/**
+ * detectWPMUadmin() - Detect whether the current user is a WPMU site administrator.
+ * 
+ * @since 2.0
+ * @return boolean
+ */
+function detectWPMUadmin() {
+	if(detectWPMU()) {
+		return is_site_admin();
+	}
+}
+
+/**
+ * can_get_remote() - Detects whether Tarski can download remote files.
+ * 
+ * Checks if either allow_url_fopen is set or libcurl is available.
+ * Mainly used by the update notifier to ensure Tarski only attempts to
+ * use available functionality.
+ * @since 2.0.3
+ * @return boolean
+ */
+function can_get_remote() {
+	return (bool) (function_exists('curl_init') || ini_get('allow_url_fopen'));
+}
+
+/**
+ * cache_is_writable() - Checks if WordPress can write to $file in Tarski's cache directory.
+ * 
+ * If $file isn't given, the function checks to see if new files can 
+ * be written to the cache directory.
+ * @since 1.7
+ * @param string $file
+ * @return boolean
+ */
+function cache_is_writable($file = false) {
+	if ( $file )
+		$cachefile = TARSKICACHE . '/' . $file;
+	
+	if ( file_exists($cachefile) )
+		return is_writable($cachefile);
+	else
+		return is_writable(TARSKICACHE);
+}
+
+/**
+ * ready_to_delete_options() - Returns true if Tarski is ready to delete its options.
+ * 
+ * When options are deleted, the time of deletion is saved in Tarski's
+ * options. This function checks that time against the current time:
+ * if the current time minus the saved time is greater than three hours
+ * (i.e. if more than two hours have elapsed since the options were
+ * deleted) then this function will return true.
+ * @since 2.0.5
+ * @return boolean
+ */
+function ready_to_delete_options($del_time) {
+	if(!empty($del_time)) {
+		$del_time = (int) $del_time;
+		return (bool) (time() - $del_time) > (3 * 3600);
+	}
+}
+
+/**
+ * tarski_upgrade_needed() - Returns true if Tarski needs upgrading.
+ * 
+ * 'Needs upgrading' is defined as having either no installed version,
+ * or having an installed version with a lower version number than the
+ * version number extracted from the main stylesheet.
+ * @since 2.1
+ * @return boolean
+ */
+function tarski_upgrade_needed() {
+	if ( get_option('tarski_options') ) {
+		$installed = get_tarski_option('installed');
+		return empty($installed) || version_compare($installed, theme_version('current')) === -1;
+	}
+}
+
+/**
+ * tarski_upgrade_and_flush_options() - Upgrades Tarski if needed and flushes options.
+ * 
+ * @since 2.1
+ * @see tarski_upgrade_needed()
+ * @see tarski_upgrade()
+ */
+function tarski_upgrade_and_flush_options() {
+	if ( tarski_upgrade_needed() ) {
+		tarski_upgrade();
+		$tarski_options = new Options;
+		$tarski_options->tarski_options_get();
+	}
+}
+
+/**
+ * tarski_upgrade_special() - Upgrades Tarski options special cases.
+ * 
+ * @since 2.3
+ * @see tarski_upgrade()
+ * @param object $options
+ * @param object $defaults
+ */
+function tarski_upgrade_special($options, $defaults) {
+	if ( tarski_should_show_authors() )
+		$options->show_authors = true;
+	
+	if ( empty($options->centred_theme) && isset($options->centered_theme) )
+		$options->centred_theme = true;
+	
+	if ( empty($options->show_categories) && isset($options->hide_categories) && ($options->hide_categories == 1) )
+		$options->show_categories = false;
+	
+}
+
+/**
+ * tarski_upgrade_widgets() - Upgrades old Tarski sidebar options to use widgets.
+ * 
+ * @since 2.3
+ * @see tarski_upgrade()
+ * @param object $options
+ * @param object $defaults
+ */
+function tarski_upgrade_widgets($options, $defaults) {
+	$widgets = wp_get_sidebars_widgets(false);
+	$widget_text = get_option('widget_text');
+	
+	// Change sidebar names and initialise new sidebars
+	if ( empty($widgets['sidebar-main']) && !empty($widgets['sidebar-1']) )
+		$widgets['sidebar-main'] = $widgets['sidebar-1'];
+	
+	if ( empty($widgets['footer-sidebar']) && !empty($widgets['sidebar-2']) )
+		$widgets['footer-sidebar'] = $widgets['sidebar-2'];
+	
+	// Main footer widgets
+	if ( empty($widgets['footer-main']) ) {
+		$widgets['footer-main'] = array();
+		
+		// Footer blurb
+		if ( strlen(trim($options->blurb)) ) {
+			$widget_text[] = array( 'title' => '', 'text' => $options->blurb );
+			$wt_num = (int) end(array_keys($widget_text));
+			$widgets['footer-main'][] = "text-$wt_num";
+		}
+		
+		// Recent articles
+		if ( $options->footer_recent )
+			$widgets['footer-main'][] = 'recent-articles';
+	}
+	
+	// Main sidebar
+	if ( empty($widgets['sidebar-main']) && $options->sidebar_type == 'tarski' ) {
+		$widgets['sidebar-main'] = array();
+	
+		// Custom text -> text widget
+		if( strlen(trim($options->sidebar_custom)) ) {
+			$widget_text[] = array( 'title' => '', 'text' => $options->sidebar_custom );
+			$wt_num = (int) end(array_keys($widget_text));
+			$widgets['sidebar-main'][] = "text-$wt_num";
+		}
+	
+		// Pages list -> pages widget
+		if($options->sidebar_pages)
+			$widgets['sidebar-main'][] = 'pages';
+	
+		// Links list -> links widget
+		if($options->sidebar_links)
+			$widgets['sidebar-main'][] = 'links';
+	}
+	
+	// Update options
+	update_option('widget_text', $widget_text);
+	wp_set_sidebars_widgets($widgets);	
+}
+
+/**
+ * function tarski_upgrade() - Upgrades Tarski's options where appropriate.
+ * 
+ * Tarski preferences sometimes change between versions, and need to
+ * be updated. This function does not determine whether an update is
+ * needed, it merely perfoms it. It's also self-contained, so it
+ * won't update the global $tarski_options object either.
+ * @since 2.1
+ */
+function tarski_upgrade() {
+	// Get existing options
+	$options = new Options;
+	$options->tarski_options_get();
+	
+	// Get our defaults, so we can merge them in
+	$defaults = new Options;
+	$defaults->tarski_options_defaults();
+
+	// Update the options version so we don't run this code more than once
+	$options->installed = theme_version('current');
+	
+	// Handle special cases first
+	tarski_upgrade_special($options, $defaults);
+		
+	// Upgrade old display options to use widgets instead
+	tarski_upgrade_widgets($options, $defaults);
+	
+	// Conform our options to the expected values, types, and defaults
+	foreach($options as $name => $value) {
+		if(!isset($defaults->$name)) {
+			// Get rid of options which no longer exist
+			unset($options->$name);
+		} elseif(!isset($options->$name)) {
+			// Use the default if we don't have this option
+			$options->$name = $defaults->$name;
+		} elseif(is_array($options->$name) && !is_array($defaults->$name)) {
+			// If our option is an array and the default is not, implode using " " as a separator
+			$options->$name = implode(" ", $options->$name);
+		} elseif(!is_array($options->$name) && is_array($defaults->$name)) {
+			// If our option is a scalar and the default is an array, wrap our option in an array
+			$options->$name = array($options->$name);
+		}
+	}
+	
+	// Save our upgraded options
+	update_option('tarski_options', $options);
+}
+
+/**
+ * tarski_messages() - Adds messages about Tarski to the WordPress admin panel.
+ * 
+ * @since 2.1
+ * @hook filter tarski_messages
+ * Filter the messages Tarski prints to the WordPress admin panel.
+ */
+function tarski_messages() {
+	$messages = apply_filters('tarski_messages', array());
+	
+	foreach ( $messages as $message ) {
+		echo "<p class=\"tarski-message\">$message</p>\n\n";
+	}
+}
+
+/**
+ * tarski_addmenu() - Adds the Tarski Options page to the WordPress admin panel.
+ * 
+ * @since 1.0
+ */
+function tarski_addmenu() {
+	add_theme_page(__('Tarski Options','tarski'), __('Tarski Options','tarski'), 'edit_themes', 'tarski-options', 'tarski_admin');
+}
+
+/**
+ * tarski_admin() - Saves Tarski's options, and displays the Options page.
+ * 
+ * @since 1.0
+ */
+function tarski_admin() {
+	if (current_user_can('edit_themes')) {
+		save_tarski_options();
+		tarski_update_notifier('options_page');
+		$widgets_link = admin_url('widgets.php');
+		$tarski_options_link = admin_url('themes.php?page=tarski-options');
+		include(TARSKIDISPLAY . '/options_page.php');
+	}
+}
+
+/**
+ * tarski_admin_header_style() - Styles the custom header image admin page for use with Tarski.
+ * 
+ * @since 1.4
+ */
+function tarski_admin_header_style() { ?>
+	<style type="text/css">
+	#headimg {
+		height: <?php echo HEADER_IMAGE_HEIGHT; ?>px;
+		width: <?php echo HEADER_IMAGE_WIDTH; ?>px;
+	}
+	#headimg h1, #headimg #desc {
+		display: none;
+	}
+	</style>
+<?php }
+
+/**
+ * tarski_admin_style() - Tarski CSS for the WordPress admin panel.
+ * 
+ * @since 2.1
+*/
+function tarski_admin_style() {
+	wp_enqueue_style(
+		'tarski_admin',
+		get_bloginfo('template_directory') . '/library/css/admin.css',
+		array(), false, 'screen'
+	);
+}
+
+/**
+ * tarski_inject_styles() - Adds CSS to the Tarski Options page.
+ * 
+ * @since 2.1
+*/
+function tarski_inject_styles() {
+	wp_enqueue_style(
+		'tarski_options',
+		get_bloginfo('template_directory') . '/library/css/options.css',
+		array(), false, 'screen'
+	);
+}
+
+/**
+ * tarski_inject_scripts() - Adds JavaScript to the Tarski Options page.
+ * 
+ * @since 1.4
+*/
+function tarski_inject_scripts() {
+	$js_dir = get_bloginfo('template_directory') . '/app/js';
+	wp_enqueue_script('page_select', "$js_dir/page_select.js");
+	wp_enqueue_script('crir', "$js_dir/crir.js");
+}
+
+/**
+ * tarski_count_authors() - Returns the number of authors who have published posts.
+ * 
+ * This function returns the number of author ids associated with published posts.
+ * @since 2.0.3
+ * @global object $wpdb
+ * @return integer
+ */
+function tarski_count_authors() {
+	global $wpdb;
+	return count($wpdb->get_col($wpdb->prepare(
+		"SELECT post_author, COUNT(DISTINCT post_author) FROM $wpdb->posts WHERE post_status = 'publish' GROUP BY post_author"
+	), 1));
+}
+
+/**
+ * tarski_should_show_authors() - Determines whether Tarski should show authors.
+ * 
+ * @since 2.0.3
+ * @see tarski_count_authors()
+ * @global object $wpdb
+ * @return boolean
+ * @hook filter tarski_show_authors
+ * Allows other components to decide whether or not Tarski should show authors.
+ */
+function tarski_should_show_authors() {
+	$show_authors = tarski_count_authors() > 1;
+	return (bool) apply_filters('tarski_show_authors', $show_authors);
+}
+
+/**
+ * tarski_resave_show_authors() - Re-saves Tarski's 'show_authors' option.
+ * 
+ * If more than one author is detected, it will turn the 'show_authors'
+ * option on; otherwise it will turn it off.
+ * @since 2.0.3
+ * @see tarski_should_show_authors()
+ */
+function tarski_resave_show_authors() {
+	if(get_option('tarski_options')) {
+		update_tarski_option('show_authors', tarski_should_show_authors());
+	}
+}
+
+/**
+ * tarski_navbar_select() - Generates a list of checkboxes for the site's pages.
+ * 
+ * Walks the tree of pages and generates nested ordered lists of pages, with
+ * corresponding checkboxes to allow the selection of pages for the navbar.
+ * @since 2.2
+ * @param array $pages
+ * @param array $selected
+ */
+function tarski_navbar_select($pages) {
+	$nav_pages = explode(',', get_tarski_option('nav_pages'));
+	$collapsed_pages = explode(',', get_tarski_option('collapsed_pages'));
+	$walker = new WalkerPageSelect($nav_pages, $collapsed_pages);
+	$return = '';
+	
+	if ( !empty($pages) ) {	
+		$return = "<ol id=\"navbar-select\">\n" . $walker->walk($pages, 0, 0, array()) . "\n</ol>\n\n";
+	}
+	
+	return $return;
+}
+
+/**
+ * tarski_update_notifier() - Performs version checks and outputs the update notifier.
+ * 
+ * Creates a new Version object, checks the latest and current
+ * versions, and lets the user know whether or not their version
+ * of Tarski needs updating. The way it displays varies slightly
+ * between the WordPress Dashboard and the Tarski Options page.
+ * @since 2.0
+ * @param string $location
+ * @return string
+ */
+function tarski_update_notifier($messages) {
+	global $plugin_page;
+	
+	if ( !is_array($messages) )
+		$messages = array();
+	
+	$version = new Version;
+	$version->current_version_number();
+	$svn_link = 'http://tarskitheme.com/help/updates/svn/';
+	
+	// Update checking only performed when remote files can be accessed
+	if ( can_get_remote() ) {
+		
+		// Only performs the update check when notification is enabled
+		if ( get_tarski_option('update_notification') ) {
+			$version->latest_version_number();
+			$version->latest_version_link();
+			$version->version_status();
+			
+			if ( $version->status == 'older' ) {
+				$messages[] = sprintf(
+					__('A new version of the Tarski theme, version %1$s %2$s. Your installed version is %3$s.','tarski'),
+					"<strong>$version->latest</strong>",
+					'<a href="' . $version->latest_link . '">' . __('is now available','tarski') . '</a>',
+					"<strong>$version->current</strong>"
+				);
+			} elseif ( $plugin_page == 'tarski-options' ) {
+				switch($version->status) {
+					case 'current':
+						$messages[] = sprintf(
+							__('Your version of Tarski (%s) is up to date.','tarski'),
+							"<strong>$version->current</strong>"
+						);
+					break;
+					case 'newer':
+						$messages[] = sprintf(
+							__('You appear to be running a development version of Tarski (%1$s). Please ensure you %2$s.','tarski'),
+							"<strong>$version->current</strong>",
+							"<a href=\"$svn_link\">" . __('stay updated','tarski') . '</a>'
+						);
+					break;
+					case 'no_connection':
+					case 'error':
+						$messages[] = sprintf(
+							__('No connection to update server. Your installed version is %s.','tarski'),
+							"<strong>$version->current</strong>"
+						);
+					break;
+				}
+			}
+		} elseif ( $plugin_page == 'tarski-options' ) {
+			$messages[] = sprintf(
+				__('Update notification for Tarski is disabled. Your installed version is %s.','tarski'),
+				"<strong>$version->current</strong>"
+			);
+		}
+	}
+	
+	return $messages;
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/helpers/author_helper.php b/wp-content/themes/vanilla/_tarski/helpers/author_helper.php
new file mode 100644
index 0000000000000000000000000000000000000000..5f38790410f3dc7f850411a3251f651b6274b776
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/helpers/author_helper.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * tarski_author_posts_link() - If site has more than one author, output a link to that author's archive page.
+ * 
+ * @global object $authordata
+ * @return string
+ */
+function tarski_author_posts_link() {
+	global $authordata;
+	if(get_tarski_option('show_authors')) {
+		printf(
+			__(' by ','tarski') . '<span class="vcard author"><a href="%1$s" title="%2$s" class="url fn">%3$s</a></span>', 
+			get_author_posts_url($authordata->ID, $authordata->user_nicename), 
+			sprintf(
+				__('Articles by %s','tarski'),
+				attribute_escape(get_the_author())
+			), 
+			get_the_author()
+		);
+	}
+}
+
+/**
+ * the_archive_author() - Returns the author object associated with an author archive page.
+ * 
+ * @global object $wp_query
+ * @return object $current_author
+ */
+function the_archive_author() {
+	global $wp_query;
+	$current_author = $wp_query->get_queried_object();
+	return $current_author;
+}
+
+/**
+ * the_archive_author_displayname() - Returns the display name of the author associated with a given archive page.
+ * 
+ * @return string
+ */
+function the_archive_author_displayname() {
+	$current_author = the_archive_author();
+	return $current_author->display_name;
+}
+
+/**
+ * the_archive_author_description() - Returns the author description of the author associated with a given archive page.
+ * 
+ * @return string
+ */
+function the_archive_author_description() {
+	$current_author = the_archive_author();
+	return $current_author->user_description;
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/helpers/content_helper.php b/wp-content/themes/vanilla/_tarski/helpers/content_helper.php
new file mode 100644
index 0000000000000000000000000000000000000000..eca84981694daffb587b43bdcaab02acbe8dfe05
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/helpers/content_helper.php
@@ -0,0 +1,322 @@
+<?php
+
+/**
+ * tarski_next_prev_posts() - Outputs links to the next and previous posts.
+ * 
+ * WordPress has this functionality, but the built-in formatting isn't
+ * to Tarski's tastes, so this function builds its own.
+ * @since 1.2
+ * @return string
+ */
+function tarski_next_prev_posts() {
+	if ( is_single() ) {
+		$prev_post = get_previous_post();
+		$next_post = get_next_post();
+		if($prev_post || $next_post) {
+			echo '<p class="primary-span articlenav">';
+
+			if($prev_post) {
+				echo '<span class="previous-entry">';
+				previous_post_link('%link','&lsaquo; %title');
+				echo '</span>';
+
+				if($next_post) {
+					echo ' <span class="separator">&nbsp;&bull;&nbsp;</span> ';
+				}
+			}
+
+			if($next_post) {
+				echo '<span class="next-entry">';
+				next_post_link('%link','%title &rsaquo;');
+				echo '</span>';
+			}
+
+			echo "</p>\n";
+		}
+	}
+}
+
+/**
+ * tarski_link_pages() - Tarski wrapper around wp_link_pages().
+ * 
+ * @since 2.0
+ * @return string
+ */
+function tarski_link_pages() {
+	$arguments = array(
+		'before' => '<p class="link-pages"><strong>' . __('Pages:','tarski') . '</strong>',
+		'after' => '</p>',
+		'next_or_number' => 'number',
+		'nextpagelink' => __('Next page','tarski'),
+		'previouspagelink' => __('Previous page','tarski'),
+		'pagelink' => '%',
+		'more_file' => '',
+		'echo' => 1
+	);
+	
+	if(!in_category(get_tarski_option('asidescategory'))) {
+		wp_link_pages($arguments);
+	}
+}
+
+/**
+ * tarski_posts_nav_link() - Outputs next / previous index page links.
+ * 
+ * @since 1.2
+ * @global object $wp_query
+ * @return string
+ */
+function tarski_posts_nav_link() {
+	if(get_tarski_option('use_pages')) {
+		global $wp_query;
+				
+		if(!is_singular()) {
+			$max_num_pages = $wp_query->max_num_pages;
+			$paged = get_query_var('paged');
+			$sep = ' &sect; ';
+			
+			// Only have sep if there's both prev and next results
+			if ($paged < 2 || $paged >= $max_num_pages) {
+				$sep = '';
+			}
+		
+			if($max_num_pages > 1) {
+				echo '<p class="pagination">';
+				if(is_search()) {
+					previous_posts_link('&laquo; ' . __('Previous results','tarski'));
+					echo $sep;
+					next_posts_link(__('More results','tarski') . ' &raquo;');
+				} else {
+					next_posts_link('&laquo; ' . __('Older entries','tarski'));
+					echo $sep;
+					previous_posts_link(__('Newer entries','tarski') . ' &raquo;');
+				}
+				echo "</p>\n";				
+			}
+		}
+	}
+}
+
+/**
+ * tarski_post_categories_link() - Outputs post categories
+ * 
+ * Categories list is nicely wrapped for potential DOM interactions
+ * via JavaScript, CSS etc.
+ * @since 2.0
+ * @return string
+ */
+function tarski_post_categories_link() {
+	if(get_tarski_option('show_categories')) {
+		printf(
+			__(' in %s','tarski'),
+			'<span class="categories">' . get_the_category_list(', ') . '</span>'
+		);
+	}
+}
+
+/**
+ * tarski_comments_link() - Outputs comments links.
+ *
+ * @since 2.1
+ * @global object $post
+ * @return string
+ */
+function tarski_comments_link() {
+	global $post;
+	if($post->comment_status == 'open' || $post->comment_count > 0) {
+		if(is_single() || is_page()) {
+			echo ' | <a class="comments-link" href="#comments">'; comments_number(__('No comments', 'tarski'), __('1 comment', 'tarski'), '%' . __(' comments', 'tarski')); echo '</a>';
+		} else {
+			echo ' | ';
+			comments_popup_link(__('No comments', 'tarski'), __('1 comment', 'tarski'), '%' . __(' comments', 'tarski'), 'comments-link', __('Comments closed', 'tarski'));
+		}
+	}
+}
+
+/**
+ * tarski_asides_permalink_text() - Outputs permalink text for asides.
+ *
+ * @since 2.1
+ * @global object $post
+ * @return string
+ */
+function tarski_asides_permalink_text() {
+	global $post;
+	if($post->comment_status == 'open' || $post->comment_count > 0) {
+		comments_number(__('No comments','tarski'), __('1 comment','tarski'), __('% comments','tarski'));
+	} else {
+		_e('Permalink', 'tarski');
+	}
+}
+
+/**
+ * tarski_comment_datetime() - Ties the date and time together.
+ * 
+ * Makes the comment date and time output more translateable.
+ * @since 2.0
+ * @return string
+ * @hook filter tarski_comment_datetime
+ * Filters the date and time printed with a comment.
+ */
+function tarski_comment_datetime() {
+	$datetime = sprintf(
+		__('%1$s at %2$s','tarski'),
+		get_comment_date(),
+		get_comment_time()
+	);
+	$datetime = apply_filters('tarski_comment_datetime', $datetime);
+	echo $datetime;
+}
+
+/**
+ * tidy_openid_names() - Strips the http:// prefix from OpenID names.
+ * 
+ * @since 2.0
+ * @global object $comment_author
+ * @return string $comment_author
+ */
+function tidy_openid_names($comment_author) {
+	global $comment;
+	$comment_author =  str_replace('http://', '', $comment_author);
+	$comment_author = rtrim($comment_author, '/');
+	return $comment_author;
+}
+
+/**
+ * tidy_avatars - Remove some of the cruft generated by get_avatar()
+ * 
+ * Adds proper alternate text for the image, replaces single quotes
+ * with double ones for markup consistency, and removes the height
+ * and width attributes so a naturally sized default image can be
+ * employed (e.g. a 1x1 pixel transparent GIF so there appears to
+ * be no default image).
+ * @since 2.1
+ * @param string $avatar
+ * @param string $id_or_email
+ * @param string $size
+ * @param string $default
+ * @return mixed
+ */
+function tidy_avatars($avatar, $id_or_email, $size, $default) {
+	$url = get_comment_author_url();
+	$author_alt = sprintf( __('%s&#8217;s avatar'), get_comment_author() );
+	$avatar = preg_replace("/height='[\d]+' width='[\d]+'/", '', $avatar);
+	
+	if ( !is_admin() )
+		$avatar = preg_replace("/'/", '"', $avatar);
+	
+	$avatar = preg_replace('/alt=""/', "alt=\"$author_alt\"", $avatar);
+	
+	return $avatar;
+}
+
+/**
+ * tarski_avatar() - Linked avatar images for Tarski.
+ * 
+ * Links to the comment author's home page if they have one,
+ * and just returns the image otherwise.
+ * @return string
+ */
+function tarski_avatar() {
+	if ( get_option('avatar_default') == '' )
+		$default = get_bloginfo('template_directory') . '/images/avatar.png';
+	else
+		$default = '';
+	
+	$avatar = get_avatar(get_comment_author_email(), '50', $default);
+	$url = get_comment_author_url();
+	
+	if ( empty($url) || preg_match('/^\s*http:\/\/\s*$/', $url) ) {
+		return $avatar;
+	} else {
+		return "<a class=\"avatar-link\" href=\"$url\" rel=\"external nofollow\">$avatar</a>";
+	}
+}
+
+/**
+ * tarski_default_avatar() - Make Tarski avatar selectable.
+ * 
+ * Adds the Tarski avatar to the Discussion options page, allowing it to be selected
+ * but also allowing users to choose other avatars.
+ * @return string
+ */
+function tarski_default_avatar($avatar_defaults) {
+	$tarski_avatar = get_bloginfo('template_directory') . '/images/avatar.png';
+	$avatar_defaults[$tarski_avatar] = 'Tarski';
+	return $avatar_defaults;
+}
+
+/**
+ * tarski_comment_author_link() - Returns a comment author's name, wrapped in a link if present.
+ * 
+ * It also includes hCard microformat markup.
+ * @link http://microformats.org/wiki/hcard
+ * @since 2.0
+ * @global object $comment
+ * @return string
+ * @hook filter get_comment_author_link
+ * Native WordPress filter on comment author links.
+ * @hook filter tarski_comment_author_link
+ * Tarski-specific filter on comment author links.
+ */
+function tarski_comment_author_link() {
+	global $comment;
+	$url = get_comment_author_url();
+	$author = get_comment_author();
+
+	if(empty($url) || 'http://' == $url) {
+		$return = sprintf(
+			'<span class="fn">%s</span>',
+			$author
+		);
+	} else {
+		$return = sprintf(
+			'<a class="url fn" href="%1$s" rel="external nofollow">%2$s</a>',
+			$url,
+			$author
+		);
+	}
+
+	$return =  apply_filters('get_comment_author_link', $return);
+	$return = apply_filters('tarski_comment_author_link', $return);
+	return $return;
+}
+
+/**
+ * tarski_404_content() - Outputs default text for 404 error pages.
+ *
+ * @since 1.5
+ * @return string
+ * @hook filter th_404_content
+ * Allows users to change their 404 page messages via a plugin.
+ */
+function tarski_404_content() {
+	$content = sprintf(
+		__('The page you are looking for does not exist; it may have been moved, or removed altogether. You might want to try the search function or return to the %s.','tarski'),
+		'<a href="' . user_trailingslashit(get_bloginfo('url')) . '">' . __('front page','tarski') . '</a>'
+	);
+	$content = wpautop($content);
+	$content = apply_filters('th_404_content', $content);
+	echo $content;
+}
+
+/**
+ * tarski_content_massage() - Filter adding smart quotes, auto-paragraphs etc.
+ * 
+ * This function strips slashes, adds smart quotes and other typographical
+ * niceties, converts characters such as ampersands to their HTML equivalent,
+ * adds automatic paragraphing and line breaks, and finally returns the
+ * altered content.
+ * @since 2.0.5
+ * @param string $input
+ * @return string $output
+ *
+ */
+function tarski_content_massage($input) {
+	if(!empty($input)) {
+		$output = wpautop(convert_chars(wptexturize(stripslashes($input))));
+	}
+	return $output;
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/helpers/tag_helper.php b/wp-content/themes/vanilla/_tarski/helpers/tag_helper.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ce1d594eeeb975772ba2aa5dcdfd17a0d6b1060
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/helpers/tag_helper.php
@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * wrap_values_in_element() - Wraps array values in the specified HTML element
+ * 
+ * Given the array <code>array('Bread', 'Milk', 'Cheese')</code>, if the specified
+ * HTML element were <code>'li'</code> it would return the array
+ * <code>array('<li>Bread</li>', '<li>Milk</li>', '<li>Cheese</li>')</code>.
+ * @since 2.0
+ * @param $array array
+ * @param $element string
+ * @return array
+ */
+function wrap_values_in_element($array, $element) {
+	if(!check_input($array, 'array') || empty($array))
+		return;
+	
+	foreach($array as $value)
+		$output[] = "<$element>$value</$element>";
+	
+	return $output;
+}
+
+/**
+ * implode_proper() - Implodes an array and adds a final conjuction.
+ * 
+ * Given the array <code>array('John', 'Paul', 'George', 'Ringo')</code> it will
+ * return the string <code>'John, Paul, George and Ringo'</code>.
+ * @since 2.0
+ * @param $array array
+ * @param $glue string
+ * @param $last_connective string
+ * @return string
+ */
+function implode_proper($array, $glue = NULL, $last_connective = NULL) {
+	if ( !check_input($array, 'array') || count($array) == 0 )
+		return;
+	
+	if ($glue == NULL)
+		$glue = __(', ', 'tarski');
+	
+	if ($last_connective == NULL)
+		$last_connective = __('and', 'tarski');
+	
+	$last_value = array_pop($array);
+	
+	if ( count($array) )
+		$output = implode($glue, $array) . " $last_connective $last_value";
+	else
+		$output = $last_value;
+	
+	return $output;
+}
+
+/**
+ * multiple_tag_titles() - Outputs all tags for a tag archive
+ * 
+ * Tag intersections and unions currently don't have a simple, single template
+ * function. This provides one.
+ * 
+ * @example multiple_tag_titles('<em>%s</em>') will wrap every printed tag in
+ * an HTML emphasis element.
+ * @since 2.0
+ * @global $wpdb object
+ * @param $format string
+ * @return string
+ * @hook filter multiple_tag_titles
+ * Filter the value returned when generating the title of multiple (union or
+ * intersection) tag archive page.
+ */
+if ( !function_exists('multiple_tag_titles') ) {
+function multiple_tag_titles($format = '') {
+	global $wpdb;
+	
+	if ( !is_tag() )
+		return;
+	
+	if ( $tag_slugs = get_query_var('tag_slug__and') )
+		$connective = __('and');
+	elseif ( $tag_slugs = get_query_var('tag_slug__in') )
+		$connective = __('or');
+	else
+		$single_tag = intval( get_query_var('tag_id') );
+	
+	$tags = array();
+	if ( $tag_slugs ) {
+		foreach ( $tag_slugs as $tag_slug ) {
+			$tag = get_term_by('slug', $tag_slug, 'post_tag', OBJECT, 'display');
+			if ( !is_wp_error($tag) && !empty($tag->name) )
+				$tags[] = $tag->name;
+		}
+	} elseif ( $single_tag ) {
+		$tag = &get_term($single_tag, 'post_tag', OBJECT, 'display');
+		if ( is_wp_error($tag) || empty($tag->name) )
+			return false;
+		else
+			$tags[] = $tag->name;
+	} else {
+		return;
+	}
+	
+	if ( strlen($format) > 0 ) {
+		foreach ( $tags as $index => $tag )
+			$tags[$index] = sprintf($format, $tag);
+	}
+			
+	$tags = implode_proper($tags, __(', ', 'tarski'), $connective);
+	$tags = apply_filters('multiple_tag_titles', $tags);
+	return $tags;
+}
+}
+
+/**
+ * add_post_tags() - Appends tags to posts.
+ * 
+ * @since 2.0
+ * @return string
+ */
+function add_post_tags() {
+	if (is_single() || (get_tarski_option('tags_everywhere') && !in_category(get_tarski_option('asidescategory')))) {
+		the_tags('<p class="tagdata"><strong>'. __('Tags','tarski'). ':</strong> ', ', ', '</p>'."\n");
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/helpers/template_helper.php b/wp-content/themes/vanilla/_tarski/helpers/template_helper.php
new file mode 100644
index 0000000000000000000000000000000000000000..c9b12c5b70adb65dcc46e8347ac18ce5ea233c07
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/helpers/template_helper.php
@@ -0,0 +1,562 @@
+<?php
+
+/**
+ * is_wp_front_page() - Returns true when current page is the WP front page.
+ * 
+ * Very useful, since is_home() doesn't return true for the front page
+ * if it's displaying a static page rather than the usual posts page.
+ * @since 2.0
+ * @return boolean
+ */
+function is_wp_front_page() {
+	if(get_option('show_on_front') == 'page')
+		return is_page(get_option('page_on_front'));
+	else
+		return is_home();
+}
+
+/**
+ * only_paginate_home() - Turns off paging for everything except feeds and the home page.
+ * 
+ * @since 2.2
+ * @param object $query
+ */
+function only_paginate_home($query) {
+	if ( !get_tarski_option('use_pages') && !is_admin() ) {
+		if ( !is_home() && !is_feed() && '' === $query->get('nopaging') ) {
+			$query->set('nopaging', 1);
+		}
+	}
+}
+
+/**
+ * tarski_doctitle() - Returns the document title.
+ * 
+ * The order (site name first or last) can be set on the Tarski Options page.
+ * While the function ultimately returns a string, please note that filters
+ * are applied to an array! This allows plugins to easily alter any aspect
+ * of the title. For example, one might write a plugin to change the separator.
+ * @since 1.5
+ * @param string $sep
+ * @return string $doctitle
+ * @hook filter tarski_doctitle
+ * Filter document titles.
+ */
+function tarski_doctitle($sep = '&middot;') {
+	$site_name = get_bloginfo('name');
+	
+	if(is_404()) {
+		$content = __(sprintf('Error %s','404'),'tarski');
+	} elseif((get_option('show_on_front') == 'posts') && is_home()) {
+		if(get_bloginfo('description')) {
+			$content = get_bloginfo('description');
+		}
+	} elseif(is_search()) {
+		$content = sprintf( __('Search results for %s','tarski'), attribute_escape(get_search_query()) );
+	} elseif(is_month()) {
+		$content = single_month_title(' ', false);
+	} elseif(is_tag()) {
+		$content = multiple_tag_titles();
+	} else {
+		$content = trim(wp_title('', false));
+	}
+	
+	if($content) {
+		$elements = array(
+			'site_name' => $site_name,
+			'separator' => $sep,
+			'content' => $content
+		);
+	} else {
+		$elements = array(
+			'site_name' => $site_name
+		);
+	}
+	
+	if(get_tarski_option('swap_title_order')) {
+		$elements = array_reverse($elements, true);
+	}
+	
+	// Filters should return an array
+	$elements = apply_filters('tarski_doctitle', $elements);
+	
+	// But if they don't, it won't try to implode
+	if(check_input($elements, 'array'))
+		$doctitle = implode(' ', $elements);
+	
+	echo $doctitle;
+}
+
+/**
+ * add_version_to_styles() - Adds version number to style links.
+ * 
+ * This makes browsers re-download the CSS file when the version
+ * number changes, reducing problems that may occur when markup
+ * changes but the corresponding new CSS is not downloaded.
+ * @since 2.0.1
+ * @see tarski_stylesheets()
+ * @param array $style_array
+ * @return array $style_array
+ */
+function add_version_to_styles($style_array) {
+	if(check_input($style_array, 'array')) {
+		foreach($style_array as $type => $values) {
+			if(is_array($values) && $values['url']) {
+				$style_array[$type]['url'] .= '?v=' . theme_version();
+			}
+		}
+	}
+	return $style_array;
+}
+
+/**
+ * generate_feed_link() - Returns a properly formatted RSS or Atom feed link
+ *
+ * @since 2.1
+ * @param string $title
+ * @param string $link
+ * @param string $type
+ * @return string
+ */
+function generate_feed_link($title, $link, $type = '') {
+	if ( $type == '' )
+		$type = feed_link_type();
+	
+	return "<link rel=\"alternate\" type=\"$type\" title=\"$title\" href=\"$link\" />";
+}
+
+/**
+ * feed_link_type() - Returns an Atom or RSS feed MIME type
+ *
+ * @since 2.1
+ * @param string $type
+ * @return string
+ */
+function feed_link_type($type = '') {
+	if(empty($type))
+		$type = get_default_feed();
+	
+	if($type == 'atom')
+		return 'application/atom+xml';
+	else
+		return 'application/rss+xml';
+}
+
+/**
+ * tarski_headerimage() - Outputs header image.
+ * 
+ * @since 1.0
+ * @return string
+ */
+function tarski_headerimage() {
+	if(get_theme_mod('header_image')) {
+		$header_img_url = get_header_image();
+	} elseif(get_tarski_option('header')) {
+		if(get_tarski_option('header') != 'blank.gif') {
+			$header_img_url = get_bloginfo('template_directory') . '/headers/' . get_tarski_option('header');
+		}
+	} else {
+		$header_img_url = get_bloginfo('template_directory') . '/headers/greytree.jpg';
+	}
+	
+	if($header_img_url) {
+		if(get_tarski_option('display_title')) {
+			$header_img_alt = __('Header image','tarski');		
+		} else {
+			$header_img_alt = get_bloginfo('name');
+		}
+
+		$header_img_tag = "<img alt=\"$header_img_alt\" src=\"$header_img_url\" />";
+
+		if(!get_tarski_option('display_title') && !is_wp_front_page()) {
+			$header_img_tag = sprintf(
+				'<a title="%1$s" rel="home" href="%2$s">%3$s</a>',
+				__('Return to main page','tarski'),
+				user_trailingslashit(get_bloginfo('url')),
+				$header_img_tag
+			);
+		}
+		
+		echo "<div id=\"header-image\">$header_img_tag</div>\n\n";
+	}
+}
+
+/**
+ * tarski_sitetitle() - Returns site title, wrapped in appropriate markup.
+ * 
+ * The title on the home page will appear inside an h1 element,
+ * whereas on other pages it will be a link (to the home page),
+ * wrapped in a p (paragraph) element.
+ * @since 1.5
+ * @return string
+ * @hook filter tarski_sitetitle
+ * Filter site title.
+ */
+function tarski_sitetitle() {
+	if(get_tarski_option('display_title')) {
+		$site_title = get_bloginfo('name');
+		
+		if(!is_wp_front_page()) {
+			$site_title = sprintf(
+				'<a title="%1$s" href="%2$s" rel="home">%3$s</a>',
+				__('Return to main page','tarski'),
+				user_trailingslashit(get_bloginfo('url')),
+				$site_title
+			);
+		}
+		
+		if((get_option('show_on_front') == 'posts') && is_home()) {
+			$site_title = sprintf('<h1 id="blog-title">%s</h1>', $site_title);
+		} else {
+			$site_title = sprintf('<p id="blog-title">%s</p>', $site_title);
+		}
+		
+		$site_title = apply_filters('tarski_sitetitle', $site_title);
+		return $site_title;
+	}
+}
+
+/**
+ * tarski_tagline() - Returns site tagline, wrapped in appropriate markup.
+ * 
+ * @since 1.5
+ * @return string
+ * @hook filter tarski_tagline
+ * Filter site tagline.
+ */
+function tarski_tagline() {
+	if((get_tarski_option('display_tagline') && get_bloginfo('description')))
+		$tagline = '<p id="tagline">' .  get_bloginfo('description') . '</p>';
+	
+	$tagline = apply_filters('tarski_tagline', $tagline);
+	return $tagline;
+}
+
+/**
+ * tarski_titleandtag() - Outputs site title and tagline.
+ * 
+ * @since 1.5
+ * @return string
+ */
+function tarski_titleandtag() {
+	if(tarski_tagline() || tarski_sitetitle()) {
+		echo '<div id="title">'."\n";
+		echo tarski_sitetitle() . "\n";
+		echo tarski_tagline() . "\n";
+		echo '</div>'."\n";
+	}
+}
+
+/**
+ * navbar_wrapper() - Outputs navigation section.
+ * 
+ * @see th_navbar()
+ * @since 2.1
+ * @return string
+ */
+function navbar_wrapper() {
+	echo '<div id="navigation" class="clearfix">';
+	th_navbar();
+	echo '</div>';
+}
+
+/**
+ * home_link_name() - Returns the name for the navbar 'Home' link.
+ * 
+ * The option 'home_link_name' can be set in the Tarski Options page;
+ * if it's not set, it defaults to 'Home'.
+ * @since 1.7
+ * @return string
+ */
+function home_link_name() {
+	if(get_tarski_option('home_link_name'))
+		return get_tarski_option('home_link_name');
+	else
+		return __('Home','tarski');
+}
+
+/**
+ * tarski_navbar() - Outputs the Tarski navbar.
+ * 
+ * @since 1.2
+ * @param boolean $return
+ * @global object $wpdb
+ * @return string $navbar
+ * @hook filter tarski_navbar
+ * Filter the HTML generated for the navbar.
+ */
+function tarski_navbar($return = false) {
+	global $wpdb;
+	$current = ' class="nav-current"';
+	
+	if(get_option('show_on_front') != 'page') {
+		if(is_home()) {
+			$home_status = $current;
+		} else {
+			$home_status = false;
+		}
+		$navbar['home'] = sprintf(
+			'<li><a id="nav-home"%1$s href="%2$s" rel="home">%3$s</a></li>',
+			$home_status,
+			user_trailingslashit(get_bloginfo('url')),
+			home_link_name()
+		);
+	}
+	
+	$pages = &get_pages('sort_column=post_parent,menu_order');
+	$nav_pages = explode(',', get_tarski_option('nav_pages'));
+	
+	if(!empty($nav_pages) && !empty($pages)) {
+		foreach($pages as $page) {
+			if(in_array($page->ID, $nav_pages)) {
+				if(is_page($page->ID) || ((get_option('show_on_front') == 'page') && (get_option('page_for_posts') == $page->ID) && is_home())) {
+					$page_status = $current;
+				} else {
+					$page_status = false;
+				}
+				
+				$navbar[$page->ID] = sprintf(
+					'<li><a id="nav-%1$s"%2$s href="%3$s">%4$s</a></li>',
+					$page->ID . '-' . $page->post_name,
+					$page_status,
+					get_permalink($page->ID),
+					htmlspecialchars($page->post_title)
+				);
+			}
+		}
+	}
+	
+	// Filters should return an array
+	$navbar = apply_filters('tarski_navbar', $navbar);
+
+	// But if they don't, the function will return false
+	if(check_input($navbar, 'array') && !empty($navbar)) {
+		$navbar = "\n" . implode("\n", $navbar) . "\n\n";
+	} else {
+		$navbar = false;
+	}
+
+	if($return) {
+		return $navbar;
+	} else {
+		echo $navbar;
+	}
+}
+
+/**
+ * add_external_links() - Adds external links to the Tarski navbar.
+ * 
+ * @since 2.0
+ * @see tarski_navbar()
+ * @param array $navbar
+ * @return array $navbar
+ */
+function add_external_links($navbar) {
+	if(!check_input($navbar, 'array'))
+		$navbar = array();
+	
+	if(get_tarski_option('nav_extlinkcat')) {
+		$extlinks_cat = get_tarski_option('nav_extlinkcat');
+		$extlinks = get_bookmarks("category=$extlinks_cat");
+		foreach($extlinks as $link) {
+			if($link->link_rel) {
+				$rel = 'rel="' . $link->link_rel . '" ';
+			}
+			if($link->link_target) {
+				$target = 'target="' . $link->link_target . '" ';
+			}
+			if($link->link_description) {
+				$title = 'title="'. $link->link_description . '" ';
+			}
+			$navbar[] = sprintf(
+				'<li><a id="nav-link-%1$s" %2$s href="%3$s">%4$s</a></li>',
+				$link->link_id,
+				$rel . $target . $title,
+				$link->link_url,
+				$link->link_name
+			);
+		}
+	}
+	
+	return $navbar;
+}
+
+/**
+ * add_admin_link() - Adds a WordPress site admin link to the Tarski navbar.
+ * 
+ * @since 2.0
+ * @see tarski_navbar()
+ * @param string $navbar
+ * @return string $navbar
+ */
+function add_admin_link($navbar) {
+	if(!check_input($navbar, 'array'))
+		$navbar = array();
+	
+	if(is_user_logged_in())
+		$navbar['admin'] = sprintf(
+			'<li><a id="nav-admin" href="%1$s">%2$s</a></li>',
+			 admin_url(),
+			__('Site Admin','tarski')
+		);	
+	
+	return $navbar;
+}
+
+/**
+ * wrap_navlist() - Wraps the Tarski navbar in an unordered list element.
+ * 
+ * Unlike other navbar filters, wrap_navlist() doesn't make $navbar an array
+ * if it isn't one, since that would result in it outputting an empty
+ * unordered list. Instead, it simply returns false.
+ * @since 2.0
+ * @see tarski_navbar()
+ * @param string $navbar
+ * @return string $navbar
+ */
+function wrap_navlist($navbar) {
+	if(check_input($navbar, 'array')) {
+		array_unshift($navbar, '<ul class="primary xoxo">');
+		array_push($navbar, '</ul>');
+		return $navbar;
+	} else {
+		return false;
+	}
+}
+
+/**
+ * tarski_feedlink() - Adds the site feed link to the site navigation.
+ * 
+ * @since 2.0
+ * @param boolean $return echo or return?
+ * @return string $output
+ */
+function tarski_feedlink() {
+	include(TARSKIDISPLAY . '/feed_link.php');
+}
+
+/**
+ * tarski_bodyclass() - Returns the classes that should be applied to the document body.
+ * 
+ * @since 1.2
+ * @param boolean $return
+ * @return string $classes
+ * @hook filter tarski_bodyclass
+ * Filter the classes applied to the document body by Tarski.
+ */
+function tarski_bodyclass($return = false) {
+	if(get_tarski_option('centred_theme')) { // Centred or not
+		$classes[] = 'centre';
+	}
+	if(get_tarski_option('swap_sides')) { // Swapped or not
+		$classes[] = 'janus';
+	}
+	if(get_tarski_option('style')) { // Alternate style
+		$stylefile = get_tarski_option('style');
+		$stylename = str_replace('.css', '', $stylefile);
+		if(is_valid_tarski_style($stylefile)) {
+			$classes[] = $stylename;
+		}
+	}
+	if(get_bloginfo('text_direction') == 'rtl') {
+		$classes[] = 'rtl';
+	}
+	
+	// Filters should return an array
+	$classes = apply_filters('tarski_bodyclass', $classes);
+	
+	// But if they don't, it won't implode
+	if(is_array($classes))
+		$classes = implode(' ', $classes);
+	
+	if($return)
+		return $classes;
+	else
+		echo $classes;
+}
+
+/**
+ * tarski_bodyid() - Outputs the id that should be applied to the document body.
+ * 
+ * @since 1.7
+ * @param boolean $return
+ * @global object $post
+ * @global object $wp_query
+ * @return string $body_id
+ * @hook filter tarski_bodyid
+ * Filter the document id value.
+ */
+function tarski_bodyid($return = false) {
+	global $post, $wp_query;
+
+	if(is_home()) {
+		$body_id = 'home';
+	} elseif(is_search()) {
+		$body_id = 'search';
+	} elseif(is_page()) {
+		$body_id = 'page-'. $post->post_name;
+	} elseif(is_single()) {
+		$body_id = 'post-'. $post->post_name;
+	} elseif(is_category()) {
+		$cat_ID = intval(get_query_var('cat'));
+		$category = &get_category($cat_ID);
+		$body_id = 'cat-'. $category->category_nicename;
+	} elseif(is_tag()) {
+		$tag_ID = intval(get_query_var('tag_id'));
+		$tag = &get_term($tag_ID, 'post_tag');
+		$body_id = 'tag-'. $tag->slug;
+	} elseif(is_author()) {
+		$author = the_archive_author();
+		$body_id = 'author-'. $author->user_login;
+	} elseif(is_date()) {
+		$year = get_query_var('year');
+		$monthnum = get_query_var('monthnum');
+		$day = get_query_var('day');
+		$body_id = "date";
+		if(is_year()) {
+			$body_id .= '-'. $year;
+		} elseif(is_month()) {
+			$body_id .= '-'. $year. '-'. $monthnum;
+		} elseif(is_day()) {
+			$body_id .= '-'. $year. '-'. $monthnum. '-'. $day;
+		}
+	} elseif(is_404()) {
+		$body_id = '404';
+	} else {
+		$body_id = 'unknown';
+	}
+	
+	$body_id = apply_filters('tarski_bodyid', $body_id);
+	
+	if($return)
+		return $body_id;
+	else
+		echo $body_id;
+}
+
+/**
+ * tarski_searchform() - Outputs the WordPress search form.
+ * 
+ * Will only output the search form on pages that aren't a search
+ * page or a 404, as these pages include the search form earlier
+ * in the document and the search form relies on the 's' id value,
+ * which as an HTML id must be unique within the document.
+ * @since 2.0
+ */
+function tarski_searchform() {
+	include_once(TEMPLATEPATH . "/searchform.php");
+}
+
+/**
+ * tarski_credits() - Outputs the site feed and Tarski credits.
+ * 
+ * @since 1.5
+ */
+function tarski_credits() {
+	if(detectWPMU())
+		$current_site = get_current_site();
+	
+	include(TARSKIDISPLAY . "/credits.php");
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/helpers/widgets.php b/wp-content/themes/vanilla/_tarski/helpers/widgets.php
new file mode 100644
index 0000000000000000000000000000000000000000..f2eb41d56bbf7a77e5096c92421911da67a02472
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/helpers/widgets.php
@@ -0,0 +1,143 @@
+<?php
+
+/**
+ * tarski_sidebar() - Outputs Tarski's sidebar.
+ * 
+ * @since 2.0
+ * @global object $post
+ * @return mixed
+ */
+function tarski_sidebar() {
+	global $post;
+	$user_sidebar = TEMPLATEPATH . '/user-sidebar.php';
+	
+	if ( file_exists($user_sidebar) ) {
+		include($user_sidebar);
+	} elseif ( is_page_template('archives.php') ) {
+		return;
+	} else {
+		if ( (is_single() || is_page()) && (get_tarski_option('sidebar_pp_type') != 'main') )
+			dynamic_sidebar('sidebar-post-and-page');
+		else
+			dynamic_sidebar('sidebar-main');
+	}
+}
+
+/**
+ * tarski_footer_main() - Outputs footer main widgets field.
+ * 
+ * @since 2.1
+ * @return mixed
+ */
+function tarski_footer_main() {
+	dynamic_sidebar('footer-main');
+}
+
+/**
+ * tarski_footer_sidebar() - Outputs the footer sidebar widgets field.
+ * 
+ * @since 2.0
+ * @return mixed
+ */
+function tarski_footer_sidebar() {
+	dynamic_sidebar('footer-sidebar');
+}
+
+/**
+ * tarski_widget_text_wrapper() - Wraps text widgets in content div with edit link.
+ *
+ * @since 2.1
+ * @param string $text
+ * @return string
+ */
+function tarski_widget_text_wrapper($text) {
+	if ( strlen(trim($text)) )
+		$text = "<div class=\"content\">\n$text</div>\n";
+	
+	return $text;
+}
+
+/**
+ * tarski_widget_links_args() - Removes navbar links from the links widget.
+ * 
+ * @since 2.2
+ * @param array $args
+ * @return array
+ */
+function tarski_widget_links_args($args) {
+	$args['exclude_category'] = get_tarski_option('nav_extlinkcat');
+	return $args;
+}
+
+/**
+ * tarski_recent_entries() - Recent entries á la Tarski.
+ *
+ * Basically a ripoff of the WP widget function wp_widget_recent_entries().
+ * @since 2.0.5
+ * @see wp_widget_recent_entries()
+ * @global object $posts
+ * @return string
+ */
+function tarski_recent_entries($args) {	
+	if ( $output = wp_cache_get('tarski_recent_entries') )
+		return print($output);
+
+	ob_start();
+	extract($args);
+	global $posts;
+	// Allow for configuration in the future
+	$options = array();
+	// $options = get_option('tarski_recent_entries');
+	$title = empty($options['title']) ? __('Recent Articles','tarski') : $options['title'];
+	
+	if ( !$number = (int) $options['number'] )
+		$number = 5;
+	elseif ( $number < 1 )
+		$number = 1;
+	elseif ( $number > 10 )
+		$number = 10;
+	
+	if ( is_home() )
+		$offset = count($posts);
+	else
+		$offset = 0;
+
+	$r = new WP_Query("showposts=$number&what_to_show=posts&nopaging=0&post_status=publish&offset=$offset");
+	
+	if ( $r->have_posts() ) {
+?>
+<div id="recent">
+	<?php echo $before_title . $title . $after_title; ?>
+	<ul>
+		<?php while ($r->have_posts()) : $r->the_post(); ?>
+		<li>
+			<h4 class="recent-title"><a title="<?php _e('View this post', 'tarski'); ?>" href="<?php the_permalink(); ?>"><?php the_title() ?></a></h4>
+			<p class="recent-metadata"><?php
+			echo the_time(get_option('date_format'));
+			if(!get_tarski_option('hide_categories')) {
+				_e(' in ', 'tarski'); the_category(', ');
+			} ?></p>
+			<div class="recent-excerpt content"><?php the_excerpt(); ?></div>
+		</li>
+		<?php endwhile; ?>
+	</ul>
+</div> <!-- /recent -->
+<?php
+		unset($r);
+		wp_reset_query();  // Restore global post data stomped by the_post().
+	}
+	
+	wp_cache_add('tarski_recent_entries', ob_get_flush(), 'widget');
+}
+
+/**
+ * flush_tarski_recent_entries() - Deletes tarski_recent_entries() from the cache. 
+ *
+ * @since 2.0.5
+ * @see tarski_recent_entries()
+ */
+function flush_tarski_recent_entries() {
+	wp_cache_delete('tarski_recent_entries');
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/images/avatar.png b/wp-content/themes/vanilla/_tarski/images/avatar.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f979a853ddcf081fb59f8b122e854a23bc4df60
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/images/avatar.png differ
diff --git a/wp-content/themes/vanilla/_tarski/images/icons.png b/wp-content/themes/vanilla/_tarski/images/icons.png
new file mode 100644
index 0000000000000000000000000000000000000000..0adec5ac856bac6bbef08d0032f732e5386a9103
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/images/icons.png differ
diff --git a/wp-content/themes/vanilla/_tarski/images/page_select.png b/wp-content/themes/vanilla/_tarski/images/page_select.png
new file mode 100644
index 0000000000000000000000000000000000000000..854021180340bfadd05556cf4827448223a30de6
Binary files /dev/null and b/wp-content/themes/vanilla/_tarski/images/page_select.png differ
diff --git a/wp-content/themes/vanilla/_tarski/js/crir.js b/wp-content/themes/vanilla/_tarski/js/crir.js
new file mode 100644
index 0000000000000000000000000000000000000000..58ab3d54c2182124070d5ecb0afbcfeb54ea32a4
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/js/crir.js
@@ -0,0 +1,165 @@
+/*
+	CRIR - Checkbox & Radio Input Replacement
+	Author: Chris Erwin (me[at]chriserwin.com)
+	www.chriserwin.com/scripts/crir/
+
+	Update August 13th, 2007
+	Major re-wrote by zbobet2012 to make script truly cross browser
+	compatible including Internet Explorer, Firefox, and Safari. Selection
+	event now added to label instead of checkbox.
+
+	Updated July 27, 2006.
+	Jesse Gavin added the AddEvent function to initialize
+	the script. He also converted the script to JSON format.
+	
+	Updated July 30, 2006.
+	Added the ability to tab to elements and use the spacebar
+	to check the input element. This bit of functionality was
+	based on a tip from Adam Burmister.
+*/
+
+crir = {
+	init: function() {
+		headerSection = document.getElementById("tarski-headers");
+		//alert("headerSection length: " + headerSection.length);
+		arrLabels = headerSection.getElementsByTagName('label');
+		//alert("arrLabel length: " + arrLabels.length);
+	
+		searchLabels:
+		for (var i=0; i<arrLabels.length; i++) {			
+			// get the input element based on the for attribute of the label tag
+			if (arrLabels[i].getAttributeNode('for') && arrLabels[i].getAttributeNode('for').value != '') {
+				labelElementFor = arrLabels[i].getAttributeNode('for').value;				
+				inputElement = document.getElementById(labelElementFor);
+			}
+			else {				
+				continue searchLabels;
+			}	
+
+			inputElementClass = inputElement.className;	
+		
+			// if the input is specified to be hidden intiate it
+			if (inputElementClass == 'crirHiddenJS') {
+				inputElement.className = 'crirHidden';
+				
+				inputElementType = inputElement.getAttributeNode('type').value;	
+				
+				// add the appropriate event listener to the label for each element so that IE and Safari can use this
+				if (inputElementType == "checkbox") {
+					arrLabels[i].onclick = function(){crir.clickedCheckBoxLabel(this);};
+				}
+				else {
+					arrLabels[i].onclick = function(){crir.clickedRadioLabel(this);};
+				}
+				
+				// set the initial label state
+				if (inputElement.checked) {
+					if (inputElementType == 'checkbox') { arrLabels[i].className = 'checkbox_checked'}
+					else { arrLabels[i].className = 'radio_checked' }
+				}
+				else {
+					if (inputElementType == 'checkbox') { arrLabels[i].className = 'checkbox_unchecked'}
+					else { arrLabels[i].className = 'radio_unchecked' }
+				}
+			}
+			else if (inputElement.nodeName != 'SELECT' && inputElement.getAttributeNode('type').value == 'radio') { // this so even if a radio is not hidden but belongs to a group of hidden radios it will still work.
+				arrLabels[i].onclick = function(){crir.clickedRadioLabel(this);};
+				inputElement.onclick = function(){crir.toggleRadioLabel(this,crir.findLabel(this.getAttributeNode('id').value));};
+			}
+		}			
+	},	
+
+	//returns the laba for the specified inputElementId
+	findLabel: function (inputElementID) {
+		//arrLabels = document.getElementsByTagName('label');
+	
+		searchLoop:
+		for (var i=0; i<arrLabels.length; i++) {
+			if (arrLabels[i].getAttributeNode('for') && arrLabels[i].getAttributeNode('for').value == inputElementID) {				
+				return arrLabels[i];
+				break searchLoop;				
+			}
+		}		
+	},
+	
+	//returns the input with the id specified by labelElementFor
+	findInput: function (labelElementFor) {
+		arrInputs = document.getElementsByTagName('input');
+		searchLoop:
+		for (var i=0; i<arrInputs.length; i++) {
+			if (arrInputs[i].getAttributeNode('id') && arrInputs[i].getAttributeNode('id').value == labelElementFor) {	
+				return arrInputs[i];
+				break searchLoop;				
+			}
+		}		
+	},		
+	
+	toggleCheckboxLabel: function (callingElement,labelElement) {
+		//check/uncheck the "real" box
+		callingElement.checked=!callingElement.checked;
+		
+		//check/uncheck the image
+		if(labelElement.className == 'checkbox_checked') {
+			labelElement.className = "checkbox_unchecked";
+		}
+		else {
+			labelElement.className = "checkbox_checked";
+		}
+	},	
+	
+	toggleRadioLabel: function (clickedInputElement,clickedLabelElement) {			 
+
+		clickedInputElementName = clickedInputElement.getAttributeNode('name').value;
+		
+		//get all me inputs so I can uncheck them
+		tarskiHeader = document.getElementById("tarski-headers");
+		arrInputs = tarskiHeader.getElementsByTagName('input');
+		
+		//check the radio button
+		clickedInputElement.checked|=1;
+		
+		// uncheck (label class) all radios in the same group
+		for (var i=0; i<arrInputs.length; i++) {			
+			inputElementType = arrInputs[i].getAttributeNode('type').value;
+			if (inputElementType == 'radio') {
+				inputElementName = arrInputs[i].getAttributeNode('name').value;
+				inputElementClass = arrInputs[i].className;
+				// find radio buttons with the same 'name' as the one we've changed and have a class of chkHidden
+				// and then set them to unchecked
+				if (inputElementName == clickedInputElementName && inputElementClass == 'crirHidden') {				
+					inputElementID = arrInputs[i].getAttributeNode('id').value;
+					labelElement = crir.findLabel(inputElementID);
+					labelElement.className = 'radio_unchecked';
+				}
+			}
+		}
+	
+		// if the radio clicked is hidden set the label to checked
+		if (clickedInputElement.className == 'crirHidden') {
+			clickedLabelElement.className = 'radio_checked';
+		}
+	},
+	
+	clickedRadioLabel: function(callingElement){
+		crir.toggleRadioLabel(crir.findInput(callingElement.getAttributeNode('for').value),callingElement);
+	},
+	
+	clickedCheckBoxLabel: function(callingElement){
+		crir.toggleCheckboxLabel(crir.findInput(callingElement.getAttributeNode('for').value),callingElement);
+	},	
+	
+	addEvent: function(element, eventType, doFunction, useCapture){
+		if (element.addEventListener) 
+		{
+			element.addEventListener(eventType, doFunction, useCapture);
+			return true;
+		} else if (element.attachEvent) {
+			var r = element.attachEvent('on' + eventType, doFunction);
+			return r;
+		} else {
+			element['on' + eventType] = doFunction;
+		}
+	}
+}
+
+crir.addEvent(window, 'load', crir.init, false);
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/js/page_select.js b/wp-content/themes/vanilla/_tarski/js/page_select.js
new file mode 100644
index 0000000000000000000000000000000000000000..29cdacb667ad8c9ec2cd092e524986e4499625b2
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/js/page_select.js
@@ -0,0 +1,144 @@
+// Included for cross-browser compatibility
+if (!Array.prototype.reduce)
+{
+  Array.prototype.reduce = function(fun /*, initial*/)
+  {
+    var len = this.length;
+    if (typeof fun != "function")
+      throw new TypeError();
+
+    // no value to return if no initial value and an empty array
+    if (len == 0 && arguments.length == 1)
+      throw new TypeError();
+
+    var i = 0;
+    if (arguments.length >= 2)
+    {
+      var rv = arguments[1];
+    }
+    else
+    {
+      do
+      {
+        if (i in this)
+        {
+          rv = this[i++];
+          break;
+        }
+
+        // if array contains no values, no initial value to return
+        if (++i >= len)
+          throw new TypeError();
+      }
+      while (true);
+    }
+
+    for (; i < len; i++)
+    {
+      if (i in this)
+        rv = fun.call(null, rv, this[i], i, this);
+    }
+
+    return rv;
+  };
+};
+
+var UniqueNumList = function(memo, item) {
+  if (Number(item) > 0 && jQuery.inArray(item, memo) < 0) memo.push(item);
+  return memo;
+};
+
+function CollapsibleList(container, collapsed_page_set) {
+	var id_format = /^page-list-(\d+)$/;
+	
+	this.container = jQuery(container);
+	this.root_id = parseInt(this.container.attr('id').replace(id_format, '$1'));
+	this.main = jQuery(container.children('p')[0]);
+	this.list = jQuery(container.children('ol')[0]);
+	
+	this.toggle = function() {
+		if ( this.container.hasClass('collapsed') ) {
+			this.expand();
+		} else {
+			this.collapse();
+		}
+	};
+	
+	this.collapse = function() {
+		this.list.slideUp(150);
+		this.toggler.addClass('collapsed-toggle');
+		this.container.addClass('collapsed');
+		collapsed_page_set.addPage(this.root_id);
+	};
+	
+	this.expand = function() {
+		this.list.slideDown(150);
+    this.toggler.removeClass('collapsed-toggle');
+		this.container.removeClass('collapsed');
+		collapsed_page_set.removePage(this.root_id);
+	};
+	
+	this.addToggle = function(toggler) {
+		var thisp = this;
+		this.toggler = jQuery(toggler);
+		
+		if (this.container.hasClass('collapsed')) this.toggler.addClass('collapsed-toggle');
+		
+		this.main.prepend(this.toggler);
+		this.toggler.bind('click', function(ev) {
+			thisp.toggle();
+		});
+	};
+	
+};
+
+function CollapsedPageSet(selector) {
+	this.pages = [];
+	
+	this.retrieve = function() {
+		this.pages = jQuery(selector).val().split(',').reduce(UniqueNumList, []);
+	};
+	
+	this.save = function() {
+		this.pages = this.pages.reduce(UniqueNumList, []);
+		jQuery(selector).val(this.pages.join(','));
+	};
+	
+	this.addPage = function(page_id) {
+		this.retrieve();
+		
+		if (this.pages instanceof Array) {
+			this.pages.push(page_id);
+		} else {
+			this.pages = [page_id];
+		}
+		
+		this.save();
+	};
+	
+	this.removePage = function(page_id) {
+		this.retrieve();
+		
+		if (this.pages instanceof Array) {
+			this.pages = jQuery.grep(this.pages, function(n) {
+				return n != page_id;
+			});
+		} else {
+			this.pages = [];
+		}
+		
+		this.save();
+	};
+	
+};
+
+jQuery(document).ready(function() {
+	jQuery('#navbar-select').addClass('js');
+	
+	var collapsed_page_set = new CollapsedPageSet('#opt-collapsed-pages');
+	
+	jQuery('#navbar-select ol').each(function(i) {
+		list = new CollapsibleList(jQuery(this).parent(), collapsed_page_set);
+		list.addToggle('<span class="toggle">Toggle</span>');
+	});
+});
diff --git a/wp-content/themes/vanilla/_tarski/js/tarski.js b/wp-content/themes/vanilla/_tarski/js/tarski.js
new file mode 100644
index 0000000000000000000000000000000000000000..297ebcf59a5156e404cec4285b166c0ebd9746ae
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/js/tarski.js
@@ -0,0 +1,110 @@
+Function.prototype.bind = function(object) {
+	var method = this;
+	return function() {
+		return method.apply(object, arguments);
+	};
+};
+
+function addEvent( obj, type, fn ) {
+	if (obj.addEventListener) {
+		obj.addEventListener( type, fn, false );
+		EventCache.add(obj, type, fn);
+	}
+	else if (obj.attachEvent) {
+		obj["e"+type+fn] = fn;
+		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
+		obj.attachEvent( "on"+type, obj[type+fn] );
+		EventCache.add(obj, type, fn);
+	}
+	else {
+		obj["on"+type] = obj["e"+type+fn];
+	}
+};
+
+var EventCache = function(){
+	var listEvents = [];
+	return {
+		listEvents : listEvents,
+		add : function(node, sEventName, fHandler){
+			listEvents.push(arguments);
+		},
+		flush : function(){
+			var i, item;
+			for(i = listEvents.length - 1; i >= 0; i = i - 1){
+				item = listEvents[i];
+				if(item[0].removeEventListener){
+					item[0].removeEventListener(item[1], item[2], item[3]);
+				};
+				if(item[1].substring(0, 2) != "on"){
+					item[1] = "on" + item[1];
+				};
+				if(item[0].detachEvent){
+					item[0].detachEvent(item[1], item[2]);
+				};
+				item[0][item[1]] = null;
+			};
+		}
+	};
+}();
+addEvent(window,'unload',EventCache.flush);
+
+/**
+ * <p>Replaces element el1's empty 'value' attribute with element el2's content.</p>
+ * @param {Object} replaceable
+ * @param {Object} replacing
+ */
+function replaceEmpty(replaceable, replacing) {
+	if (/^\s*$/.test(replaceable.value)) {
+		replaceable.value = replacing.firstChild.nodeValue;
+	}
+};
+
+/**
+ * <p>Search box object, allowing us to add some default text to the search
+ * field which will then be removed when that field is given focus. It remains
+ * accessible because the default text is pulled from the search field's label
+ * and that label is only hidden when JavaScript is enabled.</p>
+ */
+var Searchbox = {
+	
+	/**
+	 * <p>If the search box and associated label exist, hide the label and
+	 * add the label's content to the search box. Then add two events to the
+	 * search box, one which will reset the box's content when it's given focus
+	 * and one which will add the label content back when it loses focus (as
+	 * long as the box is empty).</p>
+	 */
+	init : function() {
+		this.sBox = document.getElementById('s');
+		this.sLabel = document.getElementById('searchlabel');
+		if (this.sBox && this.sLabel) {
+			this.sLabel.style.display = 'none';
+			replaceEmpty(this.sBox, this.sLabel);
+			addEvent(this.sBox, 'focus', this.reset_text.bind(this));
+			addEvent(this.sBox, 'blur', this.add_text.bind(this));
+		}
+	},
+	
+	/**
+	 * <p>Removes the search box's default content.</p>
+	 */
+	reset_text : function() {
+		if (this.sBox.value == this.sLabel.firstChild.nodeValue) {
+			this.sBox.value = '';
+		}
+	},
+	
+	/**
+	 * <p>Adds the search box's default content back in if it's empty.</p>
+	 */
+	add_text : function() {
+		replaceEmpty(this.sBox, this.sLabel);
+	}
+};
+
+addEvent(window, 'load', function() {
+  var body = document.getElementsByTagName('body')[0];
+  body.className += " js";
+});
+
+addEvent(window, 'load', Searchbox.init.bind(Searchbox));
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_tarski/launcher.php b/wp-content/themes/vanilla/_tarski/launcher.php
new file mode 100644
index 0000000000000000000000000000000000000000..a23092dcf520393c411724ab59c899f008fd41cc
--- /dev/null
+++ b/wp-content/themes/vanilla/_tarski/launcher.php
@@ -0,0 +1,147 @@
+<?php
+
+// Localisation
+load_theme_textdomain('tarski');
+
+// Custom header image
+define('HEADER_TEXTCOLOR', '');
+define('HEADER_IMAGE', '%s/headers/' . get_tarski_option('header')); // %s is theme directory URI
+define('HEADER_IMAGE_WIDTH', 720);
+define('HEADER_IMAGE_HEIGHT', 180);
+define('NO_HEADER_TEXT', true);
+add_custom_image_header('', 'tarski_admin_header_style');
+
+// Widgets
+register_sidebar( // Main sidebar widgets
+	array(
+		'id' => 'sidebar-main',
+		'name' => __('Main sidebar','tarski'),
+		'before_widget' => '<div id="%1$s" class="widget %2$s">',
+		'after_widget' => '</div>',
+		'before_title' => '<h3>',
+		'after_title' => '</h3>'
+	)
+);
+register_sidebar( // Post and page sidebar widgets
+	array(
+		'id' => 'sidebar-post-and-page',
+		'name' => __('Post and page sidebar','tarski'),
+		'before_widget' => '<div id="%1$s" class="widget %2$s">',
+		'after_widget' => '</div>',
+		'before_title' => '<h3>',
+		'after_title' => '</h3>'
+	)
+);
+register_sidebar( // Footer main widgets
+	array(
+		'id' => 'footer-main',
+		'name' => __('Footer main widgets','tarski'),
+		'before_widget' => '<div id="%1$s" class="widget %2$s">',
+		'after_widget' => '</div>',
+		'before_title' => '<h3>',
+		'after_title' => '</h3>'
+	)
+);
+register_sidebar( // Footer sidebar widgets
+	array(
+		'id' => 'footer-sidebar',
+		'name' => __('Footer sidebar widgets','tarski'),
+		'before_widget' => '<div id="%1$s" class="widget %2$s">',
+		'after_widget' => '</div>',
+		'before_title' => '<h3>',
+		'after_title' => '</h3>'
+	)
+);
+
+// Tarski widgets
+register_sidebar_widget(__('Recent Articles','tarski'), 'tarski_recent_entries');
+
+// Widget filters
+add_filter('widget_text', 'tarski_content_massage');
+add_filter('widget_text', 'tarski_widget_text_wrapper');
+add_filter('widget_links_args', 'tarski_widget_links_args');
+
+if (is_admin()) {
+	// Generate messages
+	add_filter('tarski_messages', 'tarski_update_notifier');
+
+	// Output messages on dashboard and options page
+	add_action('admin_notices', 'tarski_messages');
+
+	// Tarski Options page
+	add_action('admin_print_styles', 'tarski_admin_style');
+	add_action('admin_print_scripts-design_page_tarski-options', 'tarski_inject_scripts');
+	add_action('admin_print_styles-design_page_tarski-options', 'tarski_inject_styles');
+	add_action('admin_menu', 'tarski_addmenu');
+
+	// Options
+	add_action('save_post', 'tarski_resave_show_authors');
+	add_action('deleted_post', 'tarski_resave_show_authors');
+	add_action('save_post', 'flush_tarski_recent_entries');
+	add_action('deleted_post', 'flush_tarski_recent_entries');
+	add_action('switch_theme', 'flush_tarski_recent_entries');
+	add_action('switch_theme', 'tarski_upgrade_and_flush_options');
+}
+
+// Header
+add_action('wp_head', array('Asset', 'init'));
+
+add_action('th_header', 'tarski_headerimage');
+add_action('th_header', 'tarski_titleandtag');
+add_action('th_header', 'navbar_wrapper');
+add_action('th_header', 'tarski_next_prev_posts');
+
+add_filter('tarski_navbar', 'add_external_links');
+add_filter('tarski_navbar', 'add_admin_link', 20);
+add_filter('tarski_navbar', 'wrap_navlist', 21);
+
+add_action('th_navbar', 'tarski_navbar');
+add_action('th_navbar', 'tarski_feedlink');
+
+// Posts
+add_action('parse_query', 'only_paginate_home');
+
+add_action('th_postend', 'add_post_tags', 10);
+add_action('th_postend', 'tarski_link_pages', 11);
+
+add_action('th_posts_nav', 'tarski_posts_nav_link');
+
+// Sidebar
+add_filter('tarski_sidebar_custom', 'tarski_content_massage', 9);
+add_filter('tarski_sidebar', 'hide_sidebar_for_archives');
+
+add_action('th_sidebar', 'tarski_sidebar', 10);
+
+// Comments
+add_filter('avatar_defaults', 'tarski_default_avatar');
+add_filter('get_comment_author', 'tidy_openid_names');
+add_filter('get_avatar', 'tidy_avatars', 10, 4);
+
+// Footer
+add_action('th_fsidebar', 'tarski_footer_sidebar');
+add_action('th_fmain', 'tarski_footer_main');
+add_action('th_footer', 'tarski_feedlink');
+add_action('th_footer', 'tarski_credits');
+
+// Constants output
+if(file_exists(TEMPLATEPATH . '/constants.php')) {
+	include_once(TEMPLATEPATH . '/constants.php');
+	
+	add_filter('tarski_navbar', 'tarski_output_navbarinclude');
+	add_filter('th_404_content', 'tarski_output_errorinclude');
+
+	add_action('wp_head', 'tarski_output_headinclude');
+	add_action('th_postend', 'tarski_output_frontpageinclude');
+	add_action('th_postend', 'tarski_output_postendinclude', 12);
+	add_action('th_postend', 'tarski_output_pageendinclude', 12);
+	add_action('comment_form', 'tarski_output_commentsforminclude', 11);
+	add_action('th_sidebar', 'tarski_output_sidebartopinclude', 9);
+	add_action('th_sidebar', 'tarski_output_sidebarbottominclude', 11);
+	add_action('th_sidebar', 'tarski_output_nosidebarinclude', 11);
+	add_action('th_sidebar', 'tarski_output_archivesinclude', 9);
+	add_action('th_fsidebar', 'tarski_output_searchtopinclude', 9);
+	add_action('th_fsidebar', 'tarski_output_searchbottominclude', 11);
+	add_action('th_footer', 'tarski_output_footerinclude');
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_vanilla/blocks.php b/wp-content/themes/vanilla/_vanilla/blocks.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ad0d2dca8ccc8de6defacdc6abcfa0e33f4de20
--- /dev/null
+++ b/wp-content/themes/vanilla/_vanilla/blocks.php
@@ -0,0 +1,685 @@
+<?php
+
+// Theme options adapted from "A Theme Tip For WordPress Theme Authors"
+// http://literalbarrage.org/blog/archives/2007/05/03/a-theme-tip-for-wordpress-theme-authors/
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+$themename = "Vanilla";
+$shortname = "vnl";
+
+// Create theme options
+
+$blocks = array (
+
+/* --------------------------------------------------
+   Layout/grid befores and afters
+   -------------------------------------------------- */
+   
+				array(	"name" => "1. Before div#doc",
+						"desc" => "Between the opening body tag and the opening div#doc tag.<br />(Pair with No. 14 for correctly nested tags.)",
+						"id" => $shortname."_before_doc",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "2. Before div#page",
+						"desc" => "Between the opening div#doc tag and the opening div#page tag.<br />(Pair with No. 13 for correctly nested tags.)",
+						"id" => $shortname."_before_page",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "3. Before div#hd",
+						"desc" => "Between the opening div#page tag and the opening div#hd tag.<br />(Pair with No. 12 for correctly nested tags.)",
+						"id" => $shortname."_before_hd",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+											
+				array(	"name" => "4. Before div#bd",
+						"desc" => "Between the closing div#access tag and the opening div#bd tag.<br />(Pair with No. 11 for correctly nested tags.)",
+						"id" => $shortname."_before_bd",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+											
+				array(	"name" => "5. Top of div#bd",
+						"desc" => "Immediately after (below) the opening div#bd tag.<br />(Pair with No. 10 for correctly nested tags.)",
+						"id" => $shortname."_before_top_grid",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+				array(	"name" => "6. Top of div#content",
+						"desc" => "Immediately after (below) the opening div#content tag.<br />(Pair with No. 9 for correctly nested tags.)",
+						"id" => $shortname."_after_top_grid",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "7. Bottom of div#content",
+						"desc" => "Immediately before (above) the closing div#content tag.<br />(Pair with No. 8 for correctly nested tags.)",
+						"id" => $shortname."_before_bottom_grid",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "8. Bottom of div#bd",
+						"desc" => "Immediately before (above) the closing div#bd tag.<br />(Pair with No. 7 for correctly nested tags.)",
+						"id" => $shortname."_after_bottom_grid",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "9. After div#bd",
+						"desc" => "Between the closing div#bd tag the opening div#ft tag.<br />(Pair with No. 6 for correctly nested tags.)",
+						"id" => $shortname."_before_ft",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+											
+				array(	"name" => "10. Before div#utility",
+						"desc" => "Between the opening div#ft tag and the opening div#utility tag.<br />(Pair with No. 5 for correctly nested tags.)",
+						"id" => $shortname."_before_utility_grid",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "11. After div#utility",
+						"desc" => "Immediately after (below) the closing div#utility tag.<br />(Pair with No. 4 for correctly nested tags.)",
+						"id" => $shortname."_after_utility_grid",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+				
+				array(	"name" => "12. After div#ft",
+						"desc" => "Between the closing div#ft tag and the closing div#page tag.<br />(Pair with No. 3 for correctly nested tags.)",
+						"id" => $shortname."_after_ft",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+											
+				array(	"name" => "13. After div#page",
+						"desc" => "Between the closing div#page tag and the closing div#doc tag.<br />(Pair with No. 2 for correctly nested tags.)",
+						"id" => $shortname."_after_page",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "14. After div#doc",
+						"desc" => "Between the closing div#doc tag and the closing body tag.<br />(Pair with No. 1 for correctly nested tags.)",
+						"id" => $shortname."_after_doc",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+											
+				array(	"name" => "Widget Blocks",
+						"desc" => "Vanilla allows you to add code/markup before and after each widget block. This is, of course, entirely optional. If you wish to customise this on a per-child-theme basis, then you should use the child theme&rsquo;s functions.php file for this purpose. Note that code added before or after a widget block will display whether or not a widget block contains any active widgets.",
+						"id" => "",
+						"std" => "",
+						"type" => "heading"),
+
+/* --------------------------------------------------
+   Before and after Header Nav widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "15. Before Header Nav widget block",
+						"desc" => "Before (above) the opening div#header-nav tag",
+						"id" => $shortname."_widget_header_nav_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "16. After Header Nav widget block",
+						"desc" => "After (below) the closing div#header-nav tag",
+						"id" => $shortname."_widget_header_nav_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Header widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "17. Before Header widget block",
+						"desc" => "Before (above) the opening div#header tag",
+						"id" => $shortname."_widget_header_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "18. After Header widget block",
+						"desc" => "After (below) the closing div#header tag",
+						"id" => $shortname."_widget_header_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Main Menu widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "19. Before Main Menu widget block",
+						"desc" => "Before (above) the opening div#main-menu tag",
+						"id" => $shortname."_widget_main_menu_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "20. After Main Menu widget block",
+						"desc" => "After (below) the closing div#main-menu tag",
+						"id" => $shortname."_widget_main_menu_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Sub Menu widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "21. Before Sub Menu widget block",
+						"desc" => "Before (above) the opening div#sub-menu tag",
+						"id" => $shortname."_widget_sub_menu_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "22. After Sub Menu widget block",
+						"desc" => "After (below) the closing div#sub-menu tag",
+						"id" => $shortname."_widget_sub_menu_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Breadcrumbs widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "23. Before Breadcrumbs widget block",
+						"desc" => "Before (above) the opening div#breadcrumbs tag",
+						"id" => $shortname."_widget_breadcrumbs_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "24. After Breadcrumbs widget block",
+						"desc" => "After (below) the closing div#breadcrumbs tag",
+						"id" => $shortname."_widget_breadcrumbs_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Content Top widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "25. Before Content Top widget block",
+						"desc" => "Before (above) the opening div#content-top tag",
+						"id" => $shortname."_widget_content_top_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "26. After Content Top widget block",
+						"desc" => "After (below) the closing div#content-top tag",
+						"id" => $shortname."_widget_content_top_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Content Middle widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "27. Before Content Middle widget block",
+						"desc" => "Before (above) the opening div#content-middle tag",
+						"id" => $shortname."_widget_content_middle_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "28. After Content Middle widget block",
+						"desc" => "After (below) the closing div#content-middle tag",
+						"id" => $shortname."_widget_content_middle_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Content Bottom widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "29. Before Content Bottom widget block",
+						"desc" => "Before (above) the opening div#content-bottom tag",
+						"id" => $shortname."_widget_content_bottom_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "30. After Content Bottom widget block",
+						"desc" => "After (below) the closing div#content-bottom tag",
+						"id" => $shortname."_widget_content_bottom_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Primary Sidebar widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "31. Before Primary Sidebar widget block",
+						"desc" => "Before (above) the opening div#primary-sidebar tag",
+						"id" => $shortname."_widget_primary_sidebar_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "32. After Primary Sidebar widget block",
+						"desc" => "After (below) the closing div#primary-sidebar tag",
+						"id" => $shortname."_widget_primary_sidebar_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Secondary Sidebar widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "33. Before Secondary Sidebar widget block",
+						"desc" => "Before (above) the opening div#secondary-sidebar tag",
+						"id" => $shortname."_widget_secondary_sidebar_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "34. After Secondary Sidebar widget block",
+						"desc" => "After (below) the closing div#secondary-sidebar tag",
+						"id" => $shortname."_widget_secondary_sidebar_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after 1st Utility widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "35. Before 1st Utility widget block",
+						"desc" => "Before (above) the opening div#utility-1 tag",
+						"id" => $shortname."_widget_utility_1_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "36. After 1st Utility widget block",
+						"desc" => "After (below) the closing div#utility-1 tag",
+						"id" => $shortname."_widget_utility_1_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after 2nd Utility widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "37. Before 2nd Utility widget block",
+						"desc" => "Before (above) the opening div#utility-2 tag",
+						"id" => $shortname."_widget_utility_2_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "38. After 2nd Utility widget block",
+						"desc" => "After (below) the closing div#utility-2 tag",
+						"id" => $shortname."_widget_utility_2_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after 3rd Utility widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "39. Before 3rd Utility widget block",
+						"desc" => "Before (above) the opening div#utility-3 tag",
+						"id" => $shortname."_widget_utility_3_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "40. After 3rd Utility widget block",
+						"desc" => "After (below) the closing div#utility-3 tag",
+						"id" => $shortname."_widget_utility_3_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after 4th Utility widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "41. Before 4th Utility widget block",
+						"desc" => "Before (above) the opening div#utility-4 tag",
+						"id" => $shortname."_widget_utility_4_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "42. After 4th Utility widget block",
+						"desc" => "After (below) the closing div#utility-4 tag",
+						"id" => $shortname."_widget_utility_4_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Footer Nav widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "43. Before Footer Nav widget block",
+						"desc" => "Before (above) the opening div#footer-nav tag",
+						"id" => $shortname."_widget_footer_nav_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "44. After Footer Nav widget block",
+						"desc" => "After (below) the closing div#footer-nav tag",
+						"id" => $shortname."_widget_footer_nav_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Footer widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "45. Before Footer widget block",
+						"desc" => "Before (above) the opening div#footer tag",
+						"id" => $shortname."_widget_footer_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "46. After Footer widget block",
+						"desc" => "After (below) the closing div#footer tag",
+						"id" => $shortname."_widget_footer_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Front Page 1 widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "47. Before 1st Front Page widget block",
+						"desc" => "Before (above) the opening div#front-page-1 tag",
+						"id" => $shortname."_widget_front_page_1_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+						
+				array(	"name" => "48. After 1st Front Page widget block",
+						"desc" => "After (below) the closing div#front-page-1 tag",
+						"id" => $shortname."_widget_front_page_1_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+
+/* --------------------------------------------------
+   Before and after Front Page 2 widget block
+   -------------------------------------------------- */
+   
+				array(	"name" => "49. Before 2nd Front Page widget block",
+						"desc" => "Before (above) the opening div#front-page-2 tag",
+						"id" => $shortname."_widget_front_page_2_before",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94")),
+				
+				array(	"name" => "50. After 2nd Front Page widget block",
+						"desc" => "After (below) the closing div#front-page-2 tag",
+						"id" => $shortname."_widget_front_page_2_after",
+						"std" => "",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94"))
+		  );
+
+function vanilla_add_admin_blocks_page() {
+
+    global $themename, $shortname, $blocks;
+
+    if (isset($_GET['page'])) {
+	    if ( $_GET['page'] == basename(__FILE__) ) {
+	        if ( 'save' == $_REQUEST['action'] ) {
+	
+	                foreach ($blocks as $value) {
+	                    if ( $value['type'] != 'heading') {
+	                    update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }
+	                }
+	                foreach ($blocks as $value) {
+	                    if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ]  ); } else { delete_option( $value['id'] ); } }
+	
+	                header("Location: themes.php?page=blocks.php&saved=true");
+	                die;
+	
+	        } else if( 'reset' == $_REQUEST['action'] ) {
+	
+	            foreach ($blocks as $value) {
+	                delete_option( $value['id'] ); }
+	
+	            header("Location: themes.php?page=blocks.php&reset=true");
+	            die;
+	
+	        }
+	    }
+    }
+
+    add_theme_page($themename." Blocks", "Vanilla Blocks", 'edit_themes', basename(__FILE__), 'vanilla_admin_blocks_page');
+
+}
+
+function vanilla_admin_blocks_page() {
+
+    global $themename, $shortname, $blocks;
+
+    if ( $_REQUEST['saved'] ) echo '<div id="message" class="updated fade"><p><strong>'.$themename.' settings saved.</strong></p></div>';
+    if ( $_REQUEST['reset'] ) echo '<div id="message" class="updated fade"><p><strong>'.$themename.' settings reset.</strong></p></div>';
+    
+?>
+<div class="wrap">
+<h2><?php echo $themename; ?> Blocks</h2>
+
+<p>Vanilla gives you an amazing level of control of your theme's HTML code and content, without making you access the PHP template files.</p>
+
+<p>Each of the text-boxes below corresponds to an area of the page where you may wish to add extra code/markup.</p>
+
+<p>You may enter any client-side code here (i.e. HTML/JS/Flash/etc), but no PHP. If you wish to add PHP, you should use the custom/functions.php file in your theme folder, where a function has been included which corresponds to each of the text-boxes below.</p>
+
+<form method="post">
+
+<table class="form-table">
+
+<?php foreach ($blocks as $value) { 
+	
+	switch ( $value['type'] ) {
+		case 'heading':
+		?>
+	</table>
+	
+	<h3><br /><?php echo $value['name']; ?></h3>
+	<p><?php echo $value['desc']; ?></p>
+	
+	<table class="form-table">
+		<?php
+		break;
+		case 'text':
+		?>
+		<tr valign="top"> 
+		    <th scope="row"><?php echo $value['name']; ?>:</th>
+		    <td>
+		        <input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_settings( $value['id'] ) != "") { echo get_settings( $value['id'] ); } else { echo $value['std']; } ?>" />
+			    <?php echo $value['desc']; ?>
+		    </td>
+		</tr>
+		<?php
+		break;
+		
+		case 'select':
+		?>
+		<tr valign="top">
+			<th scope="row"><?php echo $value['name']; ?>:</th>
+			<td>
+				<select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
+					<?php foreach ($value['options'] as $option) { ?>
+					<option<?php if ( get_option( $value['id'] ) == $option[0]) { echo ' selected="selected"'; } elseif ($option[0] == $value['std'][0]) { echo ' selected="selected"'; } ?> value="<?php echo $option[0]; ?>"><?php echo $option[1]; ?></option>
+					<?php } ?>
+				</select>
+			</td>
+		</tr>
+		<?php
+		break;
+		
+		case 'textarea':
+		$ta_options = $value['options'];
+		?>
+		<tr valign="top"> 
+	        <th scope="row"><?php echo $value['name']; ?>:</th>
+	        <td>
+			    <?php echo $value['desc']; ?><br />
+				<textarea name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" cols="<?php echo $ta_options['cols']; ?>" rows="<?php echo $ta_options['rows']; ?>"><?php 
+				if( get_settings($value['id']) != "") {
+						echo stripslashes(get_settings($value['id']));
+					}else{
+						echo $value['std'];
+				}?></textarea>
+	        </td>
+	    </tr>
+		<?php
+		break;
+
+		case "radio":
+		?>
+		<tr valign="top"> 
+	        <th scope="row"><?php echo $value['name']; ?>:</th>
+	        <td>
+	            <?php foreach ($value['options'] as $key=>$option) { 
+				$radio_setting = get_settings($value['id']);
+				if($radio_setting != ''){
+		    		if ($key == get_settings($value['id']) ) {
+						$checked = "checked=\"checked\"";
+						} else {
+							$checked = "";
+						}
+				}else{
+					if($key == $value['std']){
+						$checked = "checked=\"checked\"";
+					}else{
+						$checked = "";
+					}
+				}?>
+	            <input type="radio" name="<?php echo $value['id']; ?>" value="<?php echo $key; ?>" <?php echo $checked; ?> /><?php echo $option; ?><br />
+	            <?php } ?>
+	        </td>
+	    </tr>
+		<?php
+		break;
+		
+		case "checkbox":
+		?>
+			<tr valign="top"> 
+		        <th scope="row"><?php echo $value['name']; ?>:</th>
+		        <td>
+		           <?php
+						if(get_settings($value['id'])){
+							$checked = "checked=\"checked\"";
+						}else{
+							$checked = "";
+						}
+					?>
+		            <input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> />
+		            <?php  ?>
+			    <?php echo $value['desc']; ?>
+		        </td>
+		    </tr>
+			<?php
+		break;
+
+		default:
+
+		break;
+	}
+}
+?>
+
+</table>
+
+<p class="submit">
+<input name="save" type="submit" value="Save changes" />    
+<input type="hidden" name="action" value="save" />
+</p>
+</form>
+<form method="post">
+<p class="submit">
+<input name="reset" type="submit" value="Reset" />
+<input type="hidden" name="action" value="reset" />
+</p>
+</form>
+
+<p><?php _e('For more information about this theme, visit <a href="http://www.vanillatheme.com/">Vanilla Theme</a>. Brought to you by <a href="http://www.alistercameron.com/">Alister Cameron // Blogologist</a>.', 'vanilla'); ?></p>
+
+<?php
+}
+
+add_action('admin_menu' , 'vanilla_add_admin_blocks_page');
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_vanilla/core.php b/wp-content/themes/vanilla/_vanilla/core.php
new file mode 100644
index 0000000000000000000000000000000000000000..895359cd38862be06819642371eeb082dad76133
--- /dev/null
+++ b/wp-content/themes/vanilla/_vanilla/core.php
@@ -0,0 +1,139 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function vanilla_get_option($name) {
+	$defaults = array(
+		'vnl_tpl_set' => array('blog', 'Blog (default)')
+		, 'vnl_grid_width' => array('yui-d1', '750 pixels, centered')
+		, 'vnl_custom_width' => 1000
+		, 'vnl_grid_template' => array('yui-t7', 'none')
+		, 'vnl_grid_nesting' => array('yui-g', 'none')
+		, 'vnl_utility_nesting' => array('yui-ga', 'none')
+		, 'vnl_insert_position' => 2
+		, 'vnl_authorinfo' => false
+		, 'vnl_footertext' => '<span id="generator-link">You are enjoying the taste by <span id="designer-link"><a href="http://www.alistercameron.com/vanilla-theme-for-wordpress" title="Vanilla Theme" rel="designer">Vanilla flavored</a> <a href="http://WordPress.org/" title="WordPress" rel="generator">WordPress</a></span></span><span class="meta-sep">.</span>'
+	);
+	$value = get_option($name);
+	if ($value == '' && isset($defaults[$name])) {
+		$value = $defaults[$name];
+		$value = (is_array($value)) ? $value[0] : $value;
+	}
+	return $value;
+}
+
+// Check whether a child theme template file exists, otherwise return the vanilla file.
+function vanilla_get_template($path) {
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	$child_template = STYLESHEETPATH.'/'.$set.$path;
+	$parent_template = CFCT_PATH.$set.$path;
+	return ( file_exists($child_template) ) ? $child_template : ( file_exists($parent_template) ) ? $parent_template : false;
+}
+
+function vanilla_output_page($template) {
+	global $tpl;
+	
+	$template->set('vanilla', $tpl);
+	if (!VANILLA_DEBUG) $template->setPostFilter(new Minify_HTML());
+	
+	try { echo $template->execute(); }
+	catch (Exception $e){ echo $e; }
+}
+
+function vanilla_widget_block_wrapper($block){
+	// called from within a dynamic PHPTAL macro (below) to stop it outputting a '1' to screen.
+	if (!dynamic_sidebar($block)) {
+		// do nothing;
+	}
+}
+
+function vanilla_widget_template_markup($block=null) {
+	global $wp_registered_sidebars, $wp_registered_widgets;
+	
+	$tpl_source = "";
+
+	$block = sanitize_title($block);
+	foreach ( (array) $wp_registered_sidebars as $key => $value ) {
+		if ( sanitize_title($value['name']) == $block ) {
+			$block = $key;
+			break;
+		}
+	}
+
+	$sidebars_widgets = wp_get_sidebars_widgets();
+
+	if ( empty($wp_registered_sidebars[$block]) || !array_key_exists($block, $sidebars_widgets) || !is_array($sidebars_widgets[$block]) || empty($sidebars_widgets[$block]) )
+		return "";
+
+	$sidebar = $wp_registered_sidebars[$block];
+
+	foreach ( (array) $sidebars_widgets[$block] as $id ) {
+		$params = array_merge(
+			array( array_merge( $sidebar, array('widget_id' => $id, 'widget_name' => $wp_registered_widgets[$id]['name']) ) ),
+			(array) $wp_registered_widgets[$id]['params']
+		);
+
+		$params = apply_filters( 'dynamic_sidebar_params', $params );
+		$callback = $wp_registered_widgets[$id]['callback'];
+		$widget_name = str_replace("widget_", "", strtolower($callback));
+		$active_template = vanilla_get_template('widgets/' . str_replace("_", "-", $widget_name) . ".html");
+		
+		if (!$active_template) return "";
+		
+		//echo $widget_name . " " . $widget_filename;
+
+		if ( is_callable($callback) ) {
+			call_user_func_array($callback, $params);
+			
+			$tpl_source .= '<span metal:use-macro="'.$active_template.'/loader" />' . "\n" .
+					'<span tal:condition="php:VANILLA_DEBUG" class="widget-debug">WIDGET: '.$widget_name.'</span>' . "\n" .
+					'<span metal:define-slot="'.$widget_name.'" />' . "\n";	
+		}
+	}
+	return $tpl_source;
+}
+
+function vanilla_widget_block($block=null){
+	$block = sanitize_title_with_dashes(strtolower($block));
+	
+	// Apply action
+	do_action('vanilla_widget_' . str_replace('-', '_', $block) . '_before');
+	
+	if ( function_exists('dynamic_sidebar') && is_sidebar_active($block) ) {
+		
+		$tpl_source = '<metal:block define-macro="'.str_replace("-", "_", $block).'">' . "\n" .
+				"<!-- widget block: ".$block." -->\n" .
+				'<span tal:condition="php:VANILLA_DEBUG" class="widget-debug">'.$block.'</span>' . "\n";
+		$tpl_source .= vanilla_widget_template_markup($block);
+		$tpl_source .= '${php:vanilla_widget_block_wrapper(\''.$block.'\')}' . "\n" .
+				'</metal:block><metal:block use-macro="'.str_replace("-", "_", $block).'" />'."\n";
+		
+		//echo $tpl_source;
+		
+		echo "\t\t<div id=\"" . $block . "\" class=\"block\">\n";
+		
+		// Load and fire the PHPTAL template!
+		$$block = new PHPTAL();
+		$set = vanilla_get_option('vnl_tpl_set').'-set/';
+		$$block->setSource($tpl_source, $set.$block);
+		vanilla_output_page($$block);
+		
+		echo "</div>\n";
+	}
+	
+	// Apply action
+	do_action('vanilla_widget_' . str_replace('-', '_', $block) . '_after');
+}
+
+function vanilla_add_debug_css(){
+	if (!VANILLA_DEBUG) return;
+?>
+	<style type="text/css">
+	/* Vanilla debugging CSS - set the constant in functions.php to 'false' to remove. */
+	.debug, .grid-debug, .widget-debug, .doc-debug { display: block; text-align: left; border: 1px solid #090; background: #cfc; color: #060; padding: 0.2em 0.5em; filter: alpha(opacity=50);-moz-opacity: 0.50; opacity: 0.50; }
+	.grid-debug, .doc-debug { color: #900; background: #fcc; border-color: #900; }
+	.widget-debug { color: #009; background: #ccf; border-color: #009; }
+	</style>
+<?php
+}
+add_action('wp_head', 'vanilla_add_debug_css');
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_vanilla/grid.php b/wp-content/themes/vanilla/_vanilla/grid.php
new file mode 100644
index 0000000000000000000000000000000000000000..9fcb27115b5da5d751af50f13323794e7ae0521b
--- /dev/null
+++ b/wp-content/themes/vanilla/_vanilla/grid.php
@@ -0,0 +1,279 @@
+<?php
+// Theme options adapted from "A Theme Tip For WordPress Theme Authors"
+// http://literalbarrage.org/blog/archives/2007/05/03/a-theme-tip-for-wordpress-theme-authors/
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+$themename = "Vanilla";
+$shortname = "vnl";
+
+// Create theme options
+
+$options = array (
+
+				array(  "name" => "Template Set",
+						"id" => $shortname."_tpl_set",
+						"std" => array('blog', 'Blog (default)'),
+						"type" => "select",
+						"options" => array(
+							array('blog', 'Blog (default)'),
+							array('photoblog', 'Photoblog'),
+							array('corporate', 'Corporate'),
+							array('magazine', 'Magazine'))),
+
+				array(  "name" => "Page Width",
+						"id" => $shortname."_grid_width",
+						"std" => array('yui-d1', '750 pixels, centered'),
+						"type" => "select",
+						"options" => array(
+							array('yui-d1', '750 pixels, centered'),
+							array('yui-d2', '950 pixels, centered'),
+							array('yui-d3', '974 pixels, centered'),
+							array('yui-d0', '100%, 10 pixel margins'))),
+							
+				array(	"name" => "Custom Width",
+						"desc" => "pixels or percentage",
+						"id" => $shortname."_custom_width",
+						"std" => "1000",
+						"type" => "text"),
+				
+				array(  "name" => "Outer Column (fixed width)",
+						"id" => $shortname."_grid_template",
+						"std" => array('yui-t7', 'none'),
+						"type" => "select",
+						"options" => array(
+							array('yui-t7', 'none'),
+							array('yui-t1', '160 pixels, to the left'),
+							array('yui-t2', '180 pixels, to the left'),
+							array('yui-t3', '300 pixels, to the left'),
+							array('yui-t4', '180 pixels, to the right'),
+							array('yui-t5', '240 pixels, to the right'),
+							array('yui-t6', '300 pixels, to the right'))),
+				
+				array(  "name" => "Inner Column (relative width)",
+						"id" => $shortname."_grid_nesting",
+						"std" => array('yui-g', 'none'),
+						"type" => "select",
+						"options" => array(
+							array('yui-g', 'none'),
+							array('yui-gc', 'wide (33%), to the right'),
+							array('yui-gd', 'wide (33%), to the left'),
+							array('yui-ge', 'narrow (25%), to the right'),
+							array('yui-gf', 'narrow (25%), to the left'))),
+				
+				array(  "name" => "Utility Columns (relative widths)",
+						"id" => $shortname."_utility_nesting",
+						"std" => array('yui-ga', 'none'),
+						"type" => "select",
+						"options" => array(
+							array('yui-ga', 'none'),
+							array('yui-g', '2 cols, 50/50'),
+							array('yui-gf', '2 cols, 25/75'),
+							array('yui-ge', '2 cols 75/25'),
+							array('yui-gd', '2 cols, 33/67'),
+							array('yui-gc', '2 cols, 67/33'),
+							array('yui-gb', '3 cols, 33/33/33'),
+							array('yui-gg', '4 cols, 25/25/25/25'))),
+										
+				array(	"name" => "Index Insert Position",
+						"desc" => "The widgetized Index Insert will follow after this post number.",
+						"id" => $shortname."_insert_position",
+						"std" => "2",
+						"type" => "text"),
+
+				array(	"name" => "Info on Author Page",
+						"desc" => "Display a <a href=\"http://microformats.org/wiki/hcard\" target=\"_blank\">microformatted vCard</a>�with the author's avatar, bio and email�on the author page.",
+						"id" => $shortname."_authorinfo",
+						"std" => "false",
+						"type" => "checkbox"),
+
+				array(	"name" => "Text in Footer",
+						"desc" => "Enter the HTML text that will appear in the bottom of your footer. Feel free to remove or change any links. <strong>Hint:</strong> <a href=\"http://www.w3schools.com/HTML/html_links.asp\" target=\"_blank\">how to write a link</a>.",
+						"id" => $shortname."_footertext",
+						"std" => "<span id=\"generator-link\">You are enjoying the taste by <span id=\"designer-link\"><a href=\"http://www.alistercameron.com/vanilla-theme-for-wordpress\" title=\"Vanilla Theme\" rel=\"designer\">Vanilla flavored</a> <a href=\"http://WordPress.org/\" title=\"WordPress\" rel=\"generator\">WordPress</a></span></span><span class=\"meta-sep\">.</span>",
+						"type" => "textarea",
+						"options" => array(	"rows" => "5",
+											"cols" => "94") )
+
+		  );
+
+function vanilla_add_admin_grid_page() {
+
+    global $themename, $shortname, $options;
+
+    if (isset($_GET['page'])) {
+	    if ( $_GET['page'] == basename(__FILE__) ) {
+	        if ( 'save' == $_REQUEST['action'] ) {
+	
+	                foreach ($options as $value) {
+	                    update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }
+	
+	                foreach ($options as $value) {
+	                    if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ]  ); } else { delete_option( $value['id'] ); } }
+	
+	                header("Location: themes.php?page=grid.php&saved=true");
+	                die;
+	
+	        } else if( 'reset' == $_REQUEST['action'] ) {
+	
+	            foreach ($options as $value) {
+	                delete_option( $value['id'] ); }
+	
+	            header("Location: themes.php?page=grid.php&reset=true");
+	            die;
+	
+	        }
+	    }
+    }
+
+    add_theme_page($themename." Layout", "Vanilla Layout", 'edit_themes', basename(__FILE__), 'vanilla_admin_grid_page');
+
+}
+
+function vanilla_admin_grid_page() {
+
+    global $themename, $shortname, $options;
+
+    if ( $_REQUEST['saved'] ) echo '<div id="message" class="updated fade"><p><strong>'.$themename.' settings saved.</strong></p></div>';
+    if ( $_REQUEST['reset'] ) echo '<div id="message" class="updated fade"><p><strong>'.$themename.' settings reset.</strong></p></div>';
+    
+?>
+<div class="wrap">
+<h2><?php echo $themename; ?> Grid (Layout) Options</h2>
+
+<form method="post">
+
+<table class="form-table">
+
+<?php foreach ($options as $value) { 
+	
+	switch ( $value['type'] ) {
+		case 'text':
+		?>
+		<tr valign="top"> 
+		    <th scope="row"><?php echo $value['name']; ?>:</th>
+		    <td>
+		        <input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_settings( $value['id'] ) != "") { echo get_settings( $value['id'] ); } else { echo $value['std']; } ?>" />
+			    <?php echo $value['desc']; ?>
+		    </td>
+		</tr>
+		<?php
+		break;
+		
+		case 'select':
+		?>
+		<tr valign="top">
+			<th scope="row"><?php echo $value['name']; ?>:</th>
+			<td>
+				<select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
+					<?php foreach ($value['options'] as $option) { ?>
+					<option<?php if ( get_option( $value['id'] ) == $option[0]) { echo ' selected="selected"'; } elseif ($option[0] == $value['std'][0]) { echo ' selected="selected"'; } ?> value="<?php echo $option[0]; ?>"><?php echo $option[1]; ?></option>
+					<?php } ?>
+				</select>
+			</td>
+		</tr>
+		<?php
+		break;
+		
+		case 'textarea':
+		$ta_options = $value['options'];
+		?>
+		<tr valign="top"> 
+	        <th scope="row"><?php echo $value['name']; ?>:</th>
+	        <td>
+			    <?php echo $value['desc']; ?>
+				<textarea name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" cols="<?php echo $ta_options['cols']; ?>" rows="<?php echo $ta_options['rows']; ?>"><?php 
+				if( get_settings($value['id']) != "") {
+						echo stripslashes(get_settings($value['id']));
+					}else{
+						echo $value['std'];
+				}?></textarea>
+	        </td>
+	    </tr>
+		<?php
+		break;
+
+		case "radio":
+		?>
+		<tr valign="top"> 
+	        <th scope="row"><?php echo $value['name']; ?>:</th>
+	        <td>
+	            <?php foreach ($value['options'] as $key=>$option) { 
+				$radio_setting = get_settings($value['id']);
+				if($radio_setting != ''){
+		    		if ($key == get_settings($value['id']) ) {
+						$checked = "checked=\"checked\"";
+						} else {
+							$checked = "";
+						}
+				}else{
+					if($key == $value['std']){
+						$checked = "checked=\"checked\"";
+					}else{
+						$checked = "";
+					}
+				}?>
+	            <input type="radio" name="<?php echo $value['id']; ?>" value="<?php echo $key; ?>" <?php echo $checked; ?> /><?php echo $option; ?><br />
+	            <?php } ?>
+	        </td>
+	    </tr>
+		<?php
+		break;
+		
+		case "checkbox":
+		?>
+			<tr valign="top"> 
+		        <th scope="row"><?php echo $value['name']; ?>:</th>
+		        <td>
+		           <?php
+						if(get_settings($value['id'])){
+							$checked = "checked=\"checked\"";
+						}else{
+							$checked = "";
+						}
+					?>
+		            <input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> />
+		            <?php  ?>
+			    <?php echo $value['desc']; ?>
+		        </td>
+		    </tr>
+			<?php
+		break;
+
+		default:
+
+		break;
+	}
+}
+?>
+
+</table>
+
+<p class="submit">
+<input name="save" type="submit" value="Save changes" />    
+<input type="hidden" name="action" value="save" />
+</p>
+</form>
+<form method="post">
+<p class="submit">
+<input name="reset" type="submit" value="Reset" />
+<input type="hidden" name="action" value="reset" />
+</p>
+</form>
+
+<script type="text/javascript">
+jQuery(document).ready(function($){
+		$('input#vnl_custom_width').focus();
+		
+		//alert("Need to add the slider etc here...");
+	});
+
+</script>
+
+<p><?php _e('For more information about this theme, visit <a href="http://www.vanillatheme.com/">Vanilla Theme</a>. Brought to you by <a href="http://www.alistercameron.com/">Alister Cameron // Blogologist</a>.', 'vanilla'); ?></p>
+
+<?php
+}
+
+add_action('admin_menu' , 'vanilla_add_admin_grid_page'); 
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_vanilla/hooks-filters.php b/wp-content/themes/vanilla/_vanilla/hooks-filters.php
new file mode 100644
index 0000000000000000000000000000000000000000..39fc599c6239c7f7a917f320e53d386e3087a5b9
--- /dev/null
+++ b/wp-content/themes/vanilla/_vanilla/hooks-filters.php
@@ -0,0 +1,178 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+/* ========================================
+   Master List, Actions & Hooks
+   ======================================== */
+
+$bits = array("before_doc", "before_page", "before_hd", "before_bd", "before_ft", "after_ft", "after_page", "after_doc", "before_utility_grid", "after_utility_grid", "widget_header_nav_before", "widget_header_nav_after", "widget_header_before", "widget_header_after", "widget_main_menu_before", "widget_main_menu_after", "widget_sub_menu_before", "widget_sub_menu_after", "widget_breadcrumbs_before", "widget_breadcrumbs_after", "widget_content_top_before", "widget_content_top_after", "widget_content_middle_before", "widget_content_middle_after", "widget_content_bottom_before", "widget_content_bottom_after", "widget_primary_sidebar_before", "widget_primary_sidebar_after", "widget_secondary_sidebar_before", "widget_secondary_sidebar_after", "widget_utility_1_before", "widget_utility_1_after", "widget_utility_2_before", "widget_utility_2_after", "widget_utility_3_before", "widget_utility_3_after", "widget_utility_4_before", "widget_utility_4_after", "widget_footer_nav_before", "widget_footer_nav_after", "widget_footer_before", "widget_footer_after", "widget_front_page_1_before", "widget_front_page_1_after", "widget_front_page_2_before", "widget_front_page_2_after");
+
+foreach ($bits as $bit) {
+	$safebit = str_replace("'", '&rsquo;', stripslashes(get_option('vnl_' . $bit)));
+	eval("function option_" . $bit . "() { echo('" . $safebit . "'); }");
+	
+	// action
+	eval("add_action('vanilla_" . $bit . "', 'option_" . $bit . "');");
+	
+	// hook
+	eval("function vanilla_" . $bit . "() { do_action('vanilla_" . $bit . "'); }");
+}
+
+
+
+// Carrington Sidebars Top
+function ct_sidebars_top() {
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	include_once(CFCT_PATH.$set.'carrington-sidebar-top.php');
+}
+add_action('vanilla_widget_breadcrumbs_after', 'ct_sidebars_top');
+
+// Accessibility
+function vanilla_accessibility_link() {
+?>
+		<p id="top"><a id="to-content" href="#content" title="<?php _e( 'Skip to content', 'sandbox' ) ?>"><?php _e( 'Skip to content', 'carrington' ); ?></a></p>
+<?php
+}
+add_action('vanilla_before_hd' , 'vanilla_accessibility_link');
+
+// Produces a clean list of pages in the header � thanks to Scott Wallick and Andy Skelton.
+function sandbox_globalnav() {
+	$menu = '<div id="menu"><ul>';
+	$menu .= str_replace( array( "\r", "\n", "\t" ), '', wp_list_pages('title_li=&sort_column=menu_order&echo=0') );
+	$menu .= "</ul></div>\n";
+	echo apply_filters( 'sandbox_menu', $menu ); // Filter to override default globalnav
+}
+
+// Information in Post Header
+function vanilla_postheader() {
+    global $id, $post, $authordata;
+
+    // Create $posteditlink    
+    $posteditlink .= '<a href="' . get_bloginfo('wpurl') . '/wp-admin/post.php?action=edit&post=' . $id;
+    $posteditlink .= '" title="' . __('Edit post', 'thematic') .'" class="edit-link">';
+    $posteditlink .= __('Edit', 'thematic') . '</a>';
+    
+    if (is_single() || is_page()) {
+        $posttitle = '<h1 class="entry-title">' . get_the_title() . "</h1>\n";
+    } elseif (is_404()) {    
+        $posttitle = '<h1 class="entry-title">' . __('Not Found', 'thematic') . "</h1>\n";
+    } else {
+        $posttitle = '<h2 class="entry-title"><a href="';
+        $posttitle .= get_permalink();
+        $posttitle .= '" title="';
+        $posttitle .= __('Permalink to ', 'thematic') . the_title_attribute('echo=0');
+        $posttitle .= '" rel="bookmark">';
+        $posttitle .= get_the_title();   
+        $posttitle .= "</a></h2>\n";
+    }
+    
+    $postmeta = '<div class="entry-meta">';
+    
+    // Display edit link
+    if (current_user_can('edit_posts')) {
+        $postmeta .= $posteditlink;
+    }
+    
+    $postmeta .= '<em>'. __('by', 'thematic') . '</em> ';
+    $postmeta .= '<span class="author vcard"><a class="url fn n" href="';
+    $postmeta .= get_author_link(false, $authordata->ID, $authordata->user_nicename);
+    $postmeta .= '" title="' . __('View all posts by ', 'thematic') . get_the_author() . '">';
+    $postmeta .= get_the_author();
+    $postmeta .= "</a></span>\n";
+    
+    // Display the post category/ies
+    if ( !is_category() ) { 
+        $postmeta .= '<span class="cat-links"><em>' . __('in', 'thematic') . '</em> ';
+        $postmeta .= get_the_category_list(', ') . "</span>\n";
+    }
+    
+    $postmeta .= '<em>'. __('on', 'thematic') . '</em> ';
+    $postmeta .= '<span class="entry-date"><abbr class="published" title="';
+    $postmeta .= get_the_time('Y-m-d\TH:i:sO') . '">';
+    $postmeta .= the_date('', '', '', false);
+    $postmeta .= '</abbr></span>';
+    
+    $postmeta .= "</div><!-- .entry-meta -->\n";
+    
+    if ($post->post_type == 'page' || is_404()) {
+        $postheader = $posttitle;        
+    } else {
+        $postheader = $posttitle . $postmeta;    
+    }
+    
+    echo apply_filters( 'vanilla_postheader', $postheader ); // Filter to override default post header
+}
+
+// Information in Post Footer
+function vanilla_postfooter() {
+    global $id, $post;
+    
+    // Display the tags
+    if (is_single()) {
+        $tagtext = __(' and tagged', 'thematic');
+        $posttags = get_the_tag_list("<span class=\"tag-links\"> $tagtext ",', ','</span>');
+    } elseif ( is_tag() && $tag_ur_it = sandbox_tag_ur_it(', ') ) { /* Returns tags other than the one queried */
+        $posttags = '<span class="tag-links">' . __(' Also tagged ', 'thematic') . $tag_ur_it . '</span> <span class="meta-sep">|</span>';
+    } else {
+        $tagtext = __('Tagged', 'thematic');
+        $posttags = get_the_tag_list("<span class=\"tag-links\"> $tagtext ",', ','</span> <span class="meta-sep">|</span>');
+    }
+    
+    // Display comments link and edit link
+    $postcomments = ' <span class="comments-link"><span class="bracket">{</span>';
+    
+    if (comments_open()) {
+        $postcommentnumber = get_comments_number();
+        if ($postcommentnumber != '1') {
+            $postcomments .= ' <a href="' . get_permalink() . '#comments" title="' . __('Comment on ', 'thematic') . the_title_attribute('echo=0') . '">';
+            $postcomments .= '<span>' . get_comments_number() . '</span>' . __(' comments', 'thematic') . '</a>';
+        } else {
+            $postcomments .= ' <a href="' . get_permalink() . '#comments" title="' . __('Comment on ', 'thematic') . the_title_attribute('echo=0') . '">';
+            $postcomments .= '<span>' . get_comments_number() . '</span>' . __(' comment', 'thematic') . '</a>';
+        }
+    } else {
+        $postcomments .= __('Comments closed', 'thematic');
+    }
+    $postcomments .= ' <span class="bracket">}</span></span>';             
+    
+    // Display permalink, comments link, and RSS on single posts
+    $postconnect .= __('. Bookmark the ', 'thematic') . '<a href="' . get_permalink() . '" title="' . __('Permalink to ', 'thematic') . the_title_attribute('echo=0') . '">';
+    $postconnect .= __('permalink', 'thematic') . '</a>.';
+    if (('open' == $post-> comment_status) && ('open' == $post->ping_status)) { /* Comments are open */
+        $postconnect .= ' <a class="comment-link" href="#respond" title ="' . __('Post a comment', 'thematic') . '">' . __('Post a comment', 'thematic') . '</a>';
+        $postconnect .= __(' or leave a trackback: ', 'thematic');
+        $postconnect .= '<a class="trackback-link" href="' . trackback_url(FALSE) . '" title ="' . __('Trackback URL for your post', 'thematic') . '" rel="trackback">' . __('Trackback URL', 'thematic') . '</a>.';
+    } elseif (!('open' == $post-> comment_status) && ('open' == $post->ping_status)) { /* Only trackbacks are open */
+        $postconnect .= __(' Comments are closed, but you can leave a trackback: ', 'thematic');
+        $postconnect .= '<a class="trackback-link" href="' . trackback_url(FALSE) . '" title ="' . __('Trackback URL for your post', 'thematic') . '" rel="trackback">' . __('Trackback URL', 'thematic') . '</a>.';
+    } elseif (('open' == $post-> comment_status) && !('open' == $post->ping_status)) { /* Only comments open */
+        $postconnect .= __(' Trackbacks are closed, but you can ', 'thematic');
+        $postconnect .= '<a class="comment-link" href="#respond" title ="' . __('Post a comment', 'thematic') . '">' . __('post a comment', 'thematic') . '</a>.';
+    } elseif (!('open' == $post-> comment_status) && !('open' == $post->ping_status)) { /* Comments and trackbacks closed */
+        $postconnect .= __(' Both comments and trackbacks are currently closed.', 'thematic');
+    }
+    // Display edit link on single posts
+    if (current_user_can('edit_posts')) {
+        $postconnect .= ' ' . $posteditlink;
+    }
+    
+    // Add it all up
+    $postfooter = '<div class="entry-utility">';
+    if ($post->post_type == 'page' && current_user_can('edit_posts')) { /* For logged-in "page" search results */
+        $postfooter .= $posteditlink;    
+    } elseif ($post->post_type == 'page') { /* For logged-out "page" search results */
+        // nothing
+    } else {
+        if (is_single()) {
+            $postfooter .= $posttags . $postconnect;
+        } else {
+            $postfooter .= $posttags . $postcomments;
+        }
+    }
+    $postfooter .= "</div><!-- .entry-utility -->\n";
+    
+    // Put it on the screen
+    echo apply_filters( 'vanilla_postfooter', $postfooter ); // Filter to override default post footer
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_vanilla/minify-html.php b/wp-content/themes/vanilla/_vanilla/minify-html.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e54a7109fa42f83f4ee0450283ad573c8e5775c
--- /dev/null
+++ b/wp-content/themes/vanilla/_vanilla/minify-html.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * Class Minify_HTML  
+ * @package Minify
+ */
+
+/**
+ * Compress HTML
+ *
+ * This is a heavy regex-based removal of whitespace, unnecessary comments and
+ * tokens. IE conditional comments are preserved. There are also options to have
+ * STYLE and SCRIPT blocks compressed by callback functions.
+ *
+ * A test suite is available.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_HTML implements PHPTAL_Filter {
+
+    /**
+     * Defines which class to call as part of callbacks, change this
+     * if you extend Minify_HTML
+     * @var string
+     */
+    protected static $className = 'Minify_HTML';
+
+    /**
+     * "Minify" an HTML page
+     *
+     * @param string $html
+     *
+     * @param array $options
+     *
+     * 'cssMinifier' : (optional) callback function to process content of STYLE
+     * elements.
+     *
+     * 'jsMinifier' : (optional) callback function to process content of SCRIPT
+     * elements. Note: the type attribute is ignored.
+     *
+     * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
+     * unset, minify will sniff for an XHTML doctype.
+     *
+     * @return string
+     */
+    public function filter($html) {
+    	return self::minify($html);
+    }
+     
+    public static function minify($html, $options = array()) {
+       
+        if (isset($options['cssMinifier'])) {
+            self::$_cssMinifier = $options['cssMinifier'];
+        }
+        if (isset($options['jsMinifier'])) {
+            self::$_jsMinifier = $options['jsMinifier'];
+        }
+       
+        $html = str_replace("\r\n", "\n", trim($html));
+       
+        self::$_isXhtml = (
+            isset($options['xhtml'])
+                ? (bool)$options['xhtml']
+                : (false !== strpos($html, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML'))
+        );
+       
+        self::$_replacementHash = 'MINIFYHTML' . md5(time());
+        self::$_placeholders = array();
+       
+        // replace SCRIPTs (and minify) with placeholders
+        $html = preg_replace_callback(
+            '/\\s*(<script\\b[^>]*?>)([\\s\\S]*?)<\\/script>\\s*/i'
+            ,array(self::$className, '_removeScriptCB')
+            ,$html);
+       
+        // replace STYLEs (and minify) with placeholders
+        $html = preg_replace_callback(
+            '/\\s*(<style\\b[^>]*?>)([\\s\\S]*?)<\\/style>\\s*/i'
+            ,array(self::$className, '_removeStyleCB')
+            ,$html);
+       
+        // remove HTML comments (not containing IE conditional comments).
+        $html = preg_replace_callback(
+            '/<!--([\\s\\S]*?)-->/'
+            ,array(self::$className, '_commentCB')
+            ,$html);
+       
+        // replace PREs with placeholders
+        $html = preg_replace_callback('/\\s*(<pre\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/i'
+            ,array(self::$className, '_removePreCB')
+            , $html);
+       
+        // replace TEXTAREAs with placeholders
+        $html = preg_replace_callback(
+            '/\\s*(<textarea\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/i'
+            ,array(self::$className, '_removeTaCB')
+            , $html);
+       
+        // trim each line.
+        // @todo take into account attribute values that span multiple lines.
+        $html = preg_replace('/^\\s+|\\s+$/m', '', $html);
+       
+        // remove ws around block/undisplayed elements
+        $html = preg_replace('/\\s+(<\\/?(?:area|base(?:font)?|blockquote|body'
+            .'|caption|center|cite|col(?:group)?|dd|dir|div|dl|dt|fieldset|form'
+            .'|frame(?:set)?|h[1-6]|head|hr|html|legend|li|link|map|menu|meta'
+            .'|ol|opt(?:group|ion)|p|param|t(?:able|body|head|d|h||r|foot|itle)'
+            .'|ul)\\b[^>]*>)/i', '$1', $html);
+       
+        // remove ws outside of all elements
+        $html = preg_replace_callback(
+            '/>([^<]+)</'
+            ,array(self::$className, '_outsideTagCB')
+            ,$html);
+       
+        // use newlines before 1st attribute in open tags (to limit line lengths)
+        $html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $html);
+       
+        // fill placeholders
+        $html = str_replace(
+            array_keys(self::$_placeholders)
+            ,array_values(self::$_placeholders)
+            ,$html
+        );
+        self::$_placeholders = array();
+       
+        self::$_cssMinifier = self::$_jsMinifier = null;
+        return $html;
+    }
+   
+    protected static function _commentCB($m)
+    {
+        return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<!['))
+            ? $m[0]
+            : '';
+    }
+   
+    protected static function _reservePlace($content)
+    {
+        $placeholder = '%' . self::$_replacementHash . count(self::$_placeholders) . '%';
+        self::$_placeholders[$placeholder] = $content;
+        return $placeholder;
+    }
+
+    protected static $_isXhtml = false;
+    protected static $_replacementHash = null;
+    protected static $_placeholders = array();
+    protected static $_cssMinifier = null;
+    protected static $_jsMinifier = null;
+
+    protected static function _outsideTagCB($m)
+    {
+        return '>' . preg_replace('/^\\s+|\\s+$/', ' ', $m[1]) . '<';
+    }
+   
+    protected static function _removePreCB($m)
+    {
+        return self::_reservePlace($m[1]);
+    }
+   
+    protected static function _removeTaCB($m)
+    {
+        return self::_reservePlace($m[1]);
+    }
+
+    protected static function _removeStyleCB($m)
+    {
+        $openStyle = $m[1];
+        $css = $m[2];
+        // remove HTML comments
+        $css = preg_replace('/(?:^\\s*<!--|-->\\s*$)/', '', $css);
+       
+        // remove CDATA section markers
+        $css = self::_removeCdata($css);
+       
+        // minify
+        $minifier = self::$_cssMinifier
+            ? self::$_cssMinifier
+            : 'trim';
+        $css = call_user_func($minifier, $css);
+       
+        return self::_reservePlace(self::_needsCdata($css)
+            ? "{$openStyle}/*<![CDATA[*/{$css}/*]]>*/</style>"
+            : "{$openStyle}{$css}</style>"
+        );
+    }
+
+    protected static function _removeScriptCB($m)
+    {
+        $openScript = $m[1];
+        $js = $m[2];
+       
+        // remove HTML comments (and ending "//" if present)
+        $js = preg_replace('/(?:^\\s*<!--\\s*|\\s*(?:\\/\\/)?\\s*-->\\s*$)/', '', $js);
+           
+        // remove CDATA section markers
+        $js = self::_removeCdata($js);
+       
+        // minify
+        $minifier = self::$_jsMinifier
+            ? self::$_jsMinifier
+            : 'trim';
+        $js = call_user_func($minifier, $js);
+       
+        return self::_reservePlace(self::_needsCdata($js)
+            ? "{$openScript}/*<![CDATA[*/{$js}/*]]>*/</script>"
+            : "{$openScript}{$js}</script>"
+        );
+    }
+
+
+    protected static function _removeCdata($str)
+    {
+        return (false !== strpos($str, '<![CDATA['))
+            ? str_replace(array('<![CDATA[', ']]>'), '', $str)
+            : $str;
+    }
+   
+    protected static function _needsCdata($str)
+    {
+        return (self::$_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str));
+    }
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_vanilla/phptal-custom.php b/wp-content/themes/vanilla/_vanilla/phptal-custom.php
new file mode 100644
index 0000000000000000000000000000000000000000..e9042d43e18cc5e713d8a7df6f928f6522e909cc
--- /dev/null
+++ b/wp-content/themes/vanilla/_vanilla/phptal-custom.php
@@ -0,0 +1,61 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+// Using ugly filter to get a return, not echo.
+$comments_number = "";
+function redir_comments_number($out){
+	global $comments_number;
+	$comments_number = $out;
+	return "";
+}
+add_filter('comments_number', 'redir_comments_number');
+
+// no filter here so have to redo the function using return, not echo.
+function vanilla_comments_popup_link( $zero = 'No Comments', $one = '1 Comment', $more = '% Comments', $css_class = '', $none = 'Comments Off' ) {
+	global $id, $wpcommentspopupfile, $wpcommentsjavascript, $post, $comments_number;
+	
+	$output = false;
+
+	if ( is_single() || is_page() )
+		return $output;
+
+	$number = get_comments_number( $id );
+
+	if ( 0 == $number && 'closed' == $post->comment_status && 'closed' == $post->ping_status ) {
+		return '<span' . ((!empty($css_class)) ? ' class="' . $css_class . '"' : '') . '>' . $none . '</span>';
+	}
+
+	if ( post_password_required() ) {
+		return __('Enter your password to view comments');
+	}
+
+	$output .= '<a href="';
+	if ( $wpcommentsjavascript ) {
+		if ( empty( $wpcommentspopupfile ) )
+			$home = get_option('home');
+		else
+			$home = get_option('siteurl');
+		$output .= $home . '/' . $wpcommentspopupfile . '?comments_popup=' . $id;
+		$output .= '" onclick="wpopen(this.href); return false"';
+	} else { // if comments_popup_script() is not in the template, display simple comment link
+		if ( 0 == $number )
+			$output .= get_permalink() . '#respond';
+		else
+			$output .= get_comments_link();
+		$output .= '"';
+	}
+
+	if ( !empty( $css_class ) ) {
+		$output .= ' class="'.$css_class.'" ';
+	}
+	$title = attribute_escape( get_the_title() );
+
+	$output .= apply_filters( 'comments_popup_link_attributes', '' );
+
+	$output .= ' title="' . sprintf( __('Comment on %s'), $title ) . '">';
+	comments_number( $zero, $one, $more, $number );
+	$output .= $comments_number . '</a>';
+	
+	return $output;
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/_vanilla/widgets.php b/wp-content/themes/vanilla/_vanilla/widgets.php
new file mode 100644
index 0000000000000000000000000000000000000000..ba32d84c0a1fc3ea204c1c61aaba55708b49a7b4
--- /dev/null
+++ b/wp-content/themes/vanilla/_vanilla/widgets.php
@@ -0,0 +1,304 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+// Load widget PHP files from the widgets directory
+function vanilla_load_widgets() {
+	$set = vanilla_get_option('vnl_tpl_set').'-set/';
+	$files = cfct_files(CFCT_PATH.$set.'widgets');
+	foreach ($files as $file) {
+		include(CFCT_PATH.$set.'widgets/'.$file);
+	}
+}
+
+// Make widget registration really easy
+function vanilla_register_widget($classname=null, $description=null){
+	if(!isset($classname)) return false;
+	
+	$widget = str_replace("widget_", "", $classname);
+	$description = (!isset($description) || $description == "") ? $widget : $description;
+	
+	// clean up the description a tad
+	$description = ucwords(str_replace("_", " ", $description));
+	
+	wp_register_sidebar_widget( $widget, $description, $classname, 
+		array(
+			'classname'    =>  $classname,
+			'description'  =>  $description
+		)
+	);
+	wp_register_widget_control( $widget, $description, $classname.'_control' );
+}
+
+// Widget: Global_Nav
+function widget_globalnav($args) {
+	extract($args);
+	$options = get_option('widget_globalnav');
+	$title = empty($options['title']) ? __( 'Main Menu', 'sandbox' ) : $options['title'];
+	$params = empty($options['params']) ? __( 'Parameters', 'sandbox' ) : $options['params'];
+ 
+	// Produces a list of pages in the header without whitespace -- er, I mean negative space.
+	echo '<div id="menu"><ul>'."\n";
+	$menu = wp_list_pages('title_li=&sort_column=menu_order&echo=0&'.$params) .
+		'<li class="rss"><a href="' . get_bloginfo('rss2_url') . '">Subscribe</a></li>' .
+		'<li class="delicious"><a href="#" onclick="delicious_bookmark();" title="Click here to bookmark this page on del.icio.us...">Bookmark</a></li>' .
+		'<li class="technorati"><a href="http://technorati.com/faves?add=' . get_option('home') . '">Favorite</a></li>';
+	echo str_replace(array("\r", "\n", "\t"), '', $menu);
+	echo "</ul></div>\n";
+}
+
+// Widget: Global_Nav Control
+function widget_globalnav_control() {
+	$options = $newoptions = get_option('widget_globalnav');
+	if ( $_POST['globalnav-submit'] ) {
+		$newoptions['title'] = strip_tags( stripslashes( $_POST['globalnav-title'] ) );
+		$newoptions['params'] = strip_tags( stripslashes( $_POST['globalnav-params'] ) );
+	}
+	if ( $options != $newoptions ) {
+		$options = $newoptions;
+		update_option( 'widget_globalnav', $options );
+	}
+	$title = attribute_escape( $options['title'] );
+	$params = attribute_escape( $options['params'] );
+?>
+			<p><label for="globalnav-title"><?php _e( 'Title:', 'sandbox' ) ?> <input class="widefat" id="globalnav-title" name="globalnav-title" type="text" value="<?php echo $title; ?>" /></label></p>
+			<p><label for="globalnav-params"><?php _e( 'Parameters:', 'sandbox' ) ?> <input class="widefat" id="globalnav-params" name="globalnav-params" type="text" value="<?php echo $params; ?>" /></label></p>
+			<input type="hidden" id="globalnav-submit" name="globalnav-submit" value="1" />
+<?php
+}
+
+// Widget: Search; to match the Sandbox style and replace Widget plugin default
+function widget_sandbox_search($args) {
+	extract($args);
+	$options = get_option('widget_sandbox_search');
+	$title = empty($options['title']) ? __( 'Search', 'sandbox' ) : $options['title'];
+	$button = empty($options['button']) ? __( 'Find', 'sandbox' ) : $options['button'];
+?>
+			<?php echo $before_widget ?>
+				<?php echo $before_title ?><label for="s"><?php echo $title ?></label><?php echo $after_title ?>
+				<form id="searchform" method="get" action="<?php bloginfo('home') ?>">
+					<div>
+						<input id="s" class="text-input" name="s" type="text" value="<?php the_search_query() ?>" size="10" tabindex="1" accesskey="S" />
+						<input id="searchsubmit" class="submit-button" name="searchsubmit" type="submit" value="<?php echo $button ?>" tabindex="2" />
+					</div>
+				</form>
+			<?php echo $after_widget ?>
+<?php
+}
+
+// Widget: Search; element controls for customizing text within Widget plugin
+function widget_sandbox_search_control() {
+	$options = $newoptions = get_option('widget_sandbox_search');
+	if ( $_POST['search-submit'] ) {
+		$newoptions['title'] = strip_tags( stripslashes( $_POST['search-title'] ) );
+		$newoptions['button'] = strip_tags( stripslashes( $_POST['search-button'] ) );
+	}
+	if ( $options != $newoptions ) {
+		$options = $newoptions;
+		update_option( 'widget_sandbox_search', $options );
+	}
+	$title = attribute_escape( $options['title'] );
+	$button = attribute_escape( $options['button'] );
+?>
+			<p><label for="search-title"><?php _e( 'Title:', 'sandbox' ) ?> <input class="widefat" id="search-title" name="search-title" type="text" value="<?php echo $title; ?>" /></label></p>
+			<p><label for="search-button"><?php _e( 'Button Text:', 'sandbox' ) ?> <input class="widefat" id="search-button" name="search-button" type="text" value="<?php echo $button; ?>" /></label></p>
+			<input type="hidden" id="search-submit" name="search-submit" value="1" />
+<?php
+}
+
+// Widget: Meta; to match the Sandbox style and replace Widget plugin default
+function widget_sandbox_meta($args) {
+	extract($args);
+	if ( empty($title) )
+		$title = __('Meta', 'sandbox');
+?>
+			<?php echo $before_widget; ?>
+				<?php echo $before_title . $title . $after_title; ?>
+				<ul>
+					<?php wp_register() ?>
+					<li><?php wp_loginout() ?></li>
+					<?php wp_meta() ?>
+				</ul>
+			<?php echo $after_widget; ?>
+<?php
+}
+
+// Widget: Navigation_top
+function widget_navigation_top($args) {
+	if (is_single() || is_page()) return;
+?>
+			<div id="nav-above" class="navigation">
+                <?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
+                elseif(function_exists('wp_page_numbers')) { wp_page_numbers(); }
+                else { ?>  
+				<div class="nav-previous"><?php next_posts_link(__('<span class="meta-nav">&laquo;</span> Older posts', 'thematic')) ?></div>
+				<div class="nav-next"><?php previous_posts_link(__('Newer posts <span class="meta-nav">&raquo;</span>', 'thematic')) ?></div>
+				<?php } ?>
+			</div>
+<?php
+}
+
+// Widget: Navigation_top; element controls for customizing text within Widget plugin
+function widget_navigation_top_control() {
+	$options = $newoptions = get_option('widget_navigation_top');
+	if ( $_POST['navigation-top-submit'] ) {
+		$newoptions['title'] = strip_tags( stripslashes( $_POST['navigation-top-title'] ) );
+	}
+	if ( $options != $newoptions ) {
+		$options = $newoptions;
+		update_option( 'widget_navigation_top', $options );
+	}
+	$title = attribute_escape( $options['title'] );
+?>
+			<p><label for="navigation-top-title"><?php _e( 'Title:', 'sandbox' ) ?> <input class="widefat" id="navigation-top-title" name="navigation-top-title" type="text" value="<?php echo $title; ?>" /></label></p>
+			<input type="hidden" id="navigation-top-submit" name="navigation-top-submit" value="1" />
+<?php
+}
+
+// Widget: Navigation_bottom
+function widget_navigation_bottom($args) {
+	if (is_single() || is_page()) return;
+?>
+			<div id="nav-below" class="navigation">
+                <?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
+                elseif(function_exists('wp_page_numbers')) { wp_page_numbers(); }
+                else { ?>  
+				<div class="nav-previous"><?php next_posts_link(__('<span class="meta-nav">&laquo;</span> Older posts', 'thematic')) ?></div>
+				<div class="nav-next"><?php previous_posts_link(__('Newer posts <span class="meta-nav">&raquo;</span>', 'thematic')) ?></div>
+				<?php } ?>
+			</div>
+<?php
+}
+
+// Widget: Navigation_bottom; element controls for customizing text within Widget plugin
+function widget_navigation_bottom_control() {
+	$options = $newoptions = get_option('widget_navigation_bottom');
+	if ( $_POST['navigation-bottom-submit'] ) {
+		$newoptions['title'] = strip_tags( stripslashes( $_POST['navigation-bottom-title'] ) );
+	}
+	if ( $options != $newoptions ) {
+		$options = $newoptions;
+		update_option( 'widget_navigation_bottom', $options );
+	}
+	$title = attribute_escape( $options['title'] );
+?>
+			<p><label for="navigation-bottom-title"><?php _e( 'Title:', 'sandbox' ) ?> <input class="widefat" id="navigation-bottom-title" name="navigation-bottom-title" type="text" value="<?php echo $title; ?>" /></label></p>
+			<input type="hidden" id="navigation-bottom-submit" name="navigation-bottom-submit" value="1" />
+<?php
+}
+
+// Widget: RSS links; to match the Sandbox style
+function widget_sandbox_rsslinks($args) {
+	extract($args);
+	$options = get_option('widget_sandbox_rsslinks');
+	$title = empty($options['title']) ? __('RSS Links', 'sandbox') : $options['title'];
+?>
+		<?php echo $before_widget; ?>
+			<?php echo $before_title . $title . $after_title; ?>
+			<ul>
+				<li><a href="<?php bloginfo('rss2_url') ?>" title="<?php echo wp_specialchars(get_bloginfo('name'), 1) ?> <?php _e('Posts RSS feed', 'sandbox'); ?>" rel="alternate" type="application/rss+xml"><?php _e('All posts', 'sandbox') ?></a></li>
+				<li><a href="<?php bloginfo('comments_rss2_url') ?>" title="<?php echo wp_specialchars(bloginfo('name'), 1) ?> <?php _e('Comments RSS feed', 'sandbox'); ?>" rel="alternate" type="application/rss+xml"><?php _e('All comments', 'sandbox') ?></a></li>
+			</ul>
+		<?php echo $after_widget; ?>
+<?php
+}
+
+// Widget: RSS links; element controls for customizing text within Widget plugin
+function widget_sandbox_rsslinks_control() {
+	$options = $newoptions = get_option('widget_sandbox_rsslinks');
+	if ( $_POST["rsslinks-submit"] ) {
+		$newoptions['title'] = strip_tags(stripslashes($_POST["rsslinks-title"]));
+	}
+	if ( $options != $newoptions ) {
+		$options = $newoptions;
+		update_option('widget_sandbox_rsslinks', $options);
+	}
+	$title = htmlspecialchars($options['title'], ENT_QUOTES);
+?>
+			<p><label for="rsslinks-title"><?php _e('Title:'); ?> <input style="width: 250px;" id="rsslinks-title" name="rsslinks-title" type="text" value="<?php echo $title; ?>" /></label></p>
+			<input type="hidden" id="rsslinks-submit" name="rsslinks-submit" value="1" />
+<?php
+}
+
+// Widgets plugin: intializes the plugin after the widgets above have passed snuff
+function vanilla_widgets_init() {
+	if ( !function_exists('register_sidebars') )
+		return;
+		
+	$widget_blocks = array('Header Nav','Header','Main Menu','Sub Menu','Breadcrumbs','Content Top','Content Middle','Content Bottom','Primary Sidebar','Secondary Sidebar','Utility 1','Utility 2','Utility 3','Utility 4','Footer Nav','Footer','Front Page 1', 'Front Page 2');
+	
+	foreach ($widget_blocks as $block) {
+		register_sidebar( array(
+			'name' => $block,
+			'id' => sanitize_title_with_dashes(strtolower($block)),
+			'before_widget' => '<div id="%1$s" class="widget %2$s">'."\n",
+			'after_widget' => "</div>\n",
+			'before_title' => '<h3 class="widgettitle">'."\n",
+			'after_title' => "</h3>\n"
+		));
+	};
+	
+	// Load widgets from the /widgets directory.
+	vanilla_load_widgets();
+
+	// Finished intializing Widgets plugin, now let's load the Sandbox default widgets; first, Sandbox search widget
+	$widget_ops = array(
+		'classname'    =>  'widget_search',
+		'description'  =>  __( "A search form for your blog (Sandbox)", "sandbox" )
+	);
+	wp_register_sidebar_widget( 'search', __( 'Search', 'sandbox' ), 'widget_sandbox_search', $widget_ops );
+	unregister_widget_control('search');
+	wp_register_widget_control( 'search', __( 'Search', 'sandbox' ), 'widget_sandbox_search_control' );
+
+	// Sandbox Meta widget
+	$widget_ops = array(
+		'classname'    =>  'widget_meta',
+		'description'  =>  __( "Log in/out and administration links (Sandbox)", "sandbox" )
+	);
+	wp_register_sidebar_widget( 'meta', __( 'Meta', 'sandbox' ), 'widget_sandbox_meta', $widget_ops );
+	unregister_widget_control('meta');
+	wp_register_widget_control( 'meta', __('Meta'), 'wp_widget_meta_control' );
+	
+	// Navigation Top widget
+	$widget_ops = array(
+		'classname'    =>  'widget_navigation_top',
+		'description'  =>  __( "Top Prev/Next paging links (Vanilla)", "sandbox" )
+	);
+	wp_register_sidebar_widget( 'navigation_top', __( 'Top Prev/Next', 'sandbox' ), 'widget_navigation_top', $widget_ops );
+	wp_register_widget_control( 'navigation_top', __( 'Top Prev/Next', 'sandbox' ), 'widget_navigation_top_control' );
+	
+	// Navigation Bottom widget
+	$widget_ops = array(
+		'classname'    =>  'widget_navigation_bottom',
+		'description'  =>  __( "Bottom Prev/Next paging links (Vanilla)", "sandbox" )
+	);
+	wp_register_sidebar_widget( 'navigation_bottom', __( 'Bottom Prev/Next', 'sandbox' ), 'widget_navigation_bottom', $widget_ops );
+	wp_register_widget_control( 'navigation_bottom', __( 'Bottom Prev/Next', 'sandbox' ), 'widget_navigation_bottom_control' );
+
+	//Sandbox RSS Links widget
+	$widget_ops = array(
+		'classname'    =>  'widget_rss_links',
+		'description'  =>  __( "RSS links for both posts and comments <small>(Sandbox)</small>", "sandbox" )
+	);
+	wp_register_sidebar_widget( 'rss_links', __( 'RSS Links', 'sandbox' ), 'widget_sandbox_rsslinks', $widget_ops );
+	wp_register_widget_control( 'rss_links', __( 'RSS Links', 'sandbox' ), 'widget_sandbox_rsslinks_control' );
+	
+	//Global Nav widget
+	$widget_ops = array(
+		'classname'    =>  'widget_globalnav',
+		'description'  =>  __( "Global Navigation Menu <small>(Vanilla)</small>", "sandbox" )
+	);
+	wp_register_sidebar_widget( 'globalnav', __( 'Global Navigation', 'sandbox' ), 'widget_globalnav', $widget_ops );
+	wp_register_widget_control( 'globalnav', __( 'Global Navigation', 'sandbox' ), 'widget_globalnav_control' );
+}
+
+
+// Runs our code at the end to check that everything needed has loaded
+add_action( 'init', 'vanilla_widgets_init' );
+
+// Adds filters so that things run smoothly
+add_filter( 'archive_meta', 'wptexturize' );
+add_filter( 'archive_meta', 'convert_smilies' );
+add_filter( 'archive_meta', 'convert_chars' );
+add_filter( 'archive_meta', 'wpautop' );
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/archive.php b/wp-content/themes/vanilla/archive.php
new file mode 100644
index 0000000000000000000000000000000000000000..7ac452cea89ee37021522ae6b4b96a28d1ed3aba
--- /dev/null
+++ b/wp-content/themes/vanilla/archive.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_posts();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/archives.php b/wp-content/themes/vanilla/archives.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3268fa06623c4135dcecf895276c42325569bf3
--- /dev/null
+++ b/wp-content/themes/vanilla/archives.php
@@ -0,0 +1,21 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/carrington-sidebar-top.php b/wp-content/themes/vanilla/blog-set/carrington-sidebar-top.php
new file mode 100644
index 0000000000000000000000000000000000000000..25994ad4b1de08cb15d6c5ac08e2e8d753e48198
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/carrington-sidebar-top.php
@@ -0,0 +1,62 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $post;
+
+?>
+
+<div id="sidebar-top">
+	<div id="carrington-subscribe" class="widget">
+		<h2 class="widget-title"><?php _e('Subscribe', 'carrington'); ?></h2>
+		<a class="feed" title="RSS 2.0 feed for posts" rel="alternate" href="<?php bloginfo('rss2_url') ?>"><?php _e('Site <acronym title="Really Simple Syndication">RSS</acronym> feed', 'carrington'); ?></a>
+	</div><!--.widget-->
+<?php
+$about_text = get_option('cfct_about_text');
+remove_filter('the_content', 'st_add_widget');
+remove_filter('the_excerpt', 'st_add_widget');
+if (!empty($about_text)) {
+	$about_text = apply_filters('the_content', $about_text);
+}
+else {
+	$about_query = new WP_Query('pagename=about');
+	$orig_post = $post;
+	while ($about_query->have_posts()) {
+		$about_query->the_post();
+		$about_text = get_the_excerpt().sprintf(__('<a class="more" href="%s">more &rarr;</a>', 'carrington'), get_permalink());
+	}
+}
+if (function_exists('st_add_widget')) {
+	add_filter('the_content', 'st_add_widget');
+	add_filter('the_excerpt', 'st_add_widget');
+}
+if (!empty($about_text)) {
+?>
+	<div id="carrington-about" class="widget">
+		<div class="about">
+			<h2 class="title"><?php printf(__('About %s', 'carrington'), get_bloginfo('name')); ?></h2>
+<?php
+	echo $about_text;
+?>
+		</div>
+	</div><!--.widget-->
+<?php
+}
+?>
+</div><!--#sidebar-->
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/comment/README.txt b/wp-content/themes/vanilla/blog-set/comment/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2591ee4a768bc3b85418373794e1e5db806f8f27
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comment/README.txt
@@ -0,0 +1,27 @@
+## comment/
+
+### Overview
+
+This directory holds templates for displaying a comment in it's entirety. These templates do not hold the comment loop, or the "Comments" title or the form to allow commenting; they just show a single comment.
+
+Typically these templates will be brought in to a template in _comments/_, but can also be used to display single comments as needed.
+
+A "default" template is required, and will be used when there are no other templates that match a given comment. This could be because no other templates have been created, or because the comment in question doesn't match the templates that are available.
+
+
+### Supported Override Filenames
+
+- comment-default.php (or default.php)
+- ping.php
+- author.php
+- user-{username}.php
+- role-{role}.php
+
+
+### File Descriptions
+
+- *comment-default.php* - Used when there are no other templates that match for a given comment.
+- *ping.php* - Used if the comment is a pingback or a trackback.
+- *author.php* - Used when the author of the post leaves a comment.
+- *user-{username}.php* - Used when a user with that username leaves a comment. For example, a template with a file name of _user-jsmith.php_ would be used for a comment by user _jsmith_. Any WordPres username can take the place of {username} in the file name.
+- *role-{role}.php* - Used when a comment is made by a user with a certain role. For example, a template with a file name of _role-subscriber.php_ would be used for a user with a role of "subscriber" (typical for a registered commentor who is not an author or an admin). Any WordPress role can take the place of {role} in the file name.
diff --git a/wp-content/themes/vanilla/blog-set/comment/comment-default.html b/wp-content/themes/vanilla/blog-set/comment/comment-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..41a69db1d16566dee5f78c479912c145bd5255a1
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comment/comment-default.html
@@ -0,0 +1,45 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+	<div metal:fill-slot="comment" id="comment-${comment/id}" class="${comment/class}">
+		<span tal:condition="php: comment.approved == '0'">
+			<div class="notification"><strong>${structure comment/message}</strong></div>${comment/approved}
+		</span>
+	
+		<div class="info">
+			<address class="vcard author entry-title comment-author">
+				<span class="photo" tal:condition="exists: comment/avatar">${structure comment/avatar}</span>
+				${structure comment/author_link}
+			</address><!--.vcard-->
+			<div class="date comment-date">
+				${structure comment/date}
+			</div><!--.date-->
+		</div><!--.info-->
+	
+		<div class="entry-content comment-content">
+			${structure comment/text}
+		</div><!--.entry-content-->
+		<div class="comment-editlink"><a href="${structure comment/edit_link}" title="${comment/edit_attribute}">${comment/edit_message}</a></div>
+	</div><!--.comment-->
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/comment/comment-default.php b/wp-content/themes/vanilla/blog-set/comment/comment-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c99a7c04d99f69d26f04102604ca82f7a26e8f2
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comment/comment-default.php
@@ -0,0 +1,58 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $comment, $tpl;
+
+add_filter('get_comment_author_link', 'cfct_hcard_comment_author_link');
+
+$author_link = sprintf(__('%s <span class="said">said</span>', 'carrington'), get_comment_author_link());
+
+remove_filter('get_comment_author_link', 'cfct_hcard_comment_author_link');
+
+$comment_date = sprintf(
+	__('<span class="on">on</span> <abbr class="published" title="%s"><a title="Permanent link to this comment" rel="bookmark" href="%s#comment-%s">%s</a></abbr>'
+	, 'carrington'
+	)
+	, get_comment_date('Y-m-d\TH:i:sO')
+	, get_permalink()
+	, get_comment_ID()
+	, get_comment_date()
+);
+
+$tpl["comment"] = array(
+	"tpl_file" => "comment-default.html"
+);
+
+$tpl["comments_list"][] = array(
+	"id" => get_comment_ID(),
+	"class" => cfct_comment_class(false),
+	"approved" => ($comment->comment_approved) ? 1 : 0,
+	"message" => __('Your comment is awaiting moderation.', 'carrington'),
+	"avatar" => get_avatar($comment, 36),
+	"author_link" => $author_link,
+	"date" => $comment_date,
+	"author_url" => get_comment_author_url(),
+	"text" => get_comment_text(),
+	"edit_link" => get_edit_comment_link($comment->comment_ID),
+	"edit_attribute" => __('Edit comment'),
+	"edit_message" => __('Edit')
+);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/comment/ping.html b/wp-content/themes/vanilla/blog-set/comment/ping.html
new file mode 100644
index 0000000000000000000000000000000000000000..f403a8de2a251f76513ac2f983bdd4c94026a60a
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comment/ping.html
@@ -0,0 +1,33 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+	
+	<div metal:fill-slot="ping" id="comment-${ping/id}" class="${ping/class}">
+		${structure ping/author_link}
+		<span class="date">
+			<span class="on">${ping/on}</span> <abbr class="published" title="${structure ping/date_attribute}">${structure ping/date}</abbr>
+		</span>
+		<blockquote class="entry-summary" cite="${structure ping/author_url}">${structure ping/text}</blockquote> 
+		<div class="comment-editlink"><a href="${structure ping/edit_link}" title="${ping/edit_attribute}">${ping/edit_message}</a></div>
+	</div><!--.ping-->
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/comment/ping.php b/wp-content/themes/vanilla/blog-set/comment/ping.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f070d361dad85f27d26eb8a12cd90a4bbd49285
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comment/ping.php
@@ -0,0 +1,45 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+add_filter('get_comment_author_link', 'cfct_hcard_ping_author_link');
+
+$author_link = sprintf(__('<cite class="vcard author entry-title">%s <span class="linked-to-this-post">linked to this post</span></cite>', 'carrington'), get_comment_author_link());
+
+remove_filter('get_comment_author_link', 'cfct_hcard_ping_author_link');
+
+global $comment, $tpl;
+
+$tpl["ping"] = array(
+	"tpl_file" => "ping.html"
+);
+
+$tpl["pings_list"][] = array(
+	"id" => get_comment_ID(),
+	"class" => cfct_comment_class(false),
+	"author_link" => $author_link,
+	"on" => __('on'),
+	"date_attribute" => get_comment_date('Y-m-d\TH:i:sO'),
+	"date" => get_comment_date(),
+	"author_url" => get_comment_author_url(),
+	"text" => get_comment_text(),
+	"edit_link" => get_edit_comment_link($comment->comment_ID),
+	"edit_attribute" => __('Edit comment'),
+	"edit_message" => __('Edit')
+);
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/comments/README.txt b/wp-content/themes/vanilla/blog-set/comments/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ec7f7d2b210a45abacae6cbeac59ffba689a87d5
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comments/README.txt
@@ -0,0 +1,37 @@
+## comments/
+
+### Overview
+
+This directory holds templates for displaying the comment loop and the comment form - what is typically called in by WordPress's `comment_template()` function.
+
+This level of abstraction us useful to be able to load in the comments and new comment form for a post/page via AJAX if desired.
+
+A "default" template is required, and will be used when there are no other templates that match a given comment. This could be because no other templates have been created, or because the context doesn't match the templates that are available.
+
+
+### Supported Override Filenames
+
+- comments-default.php (or default.php)
+- archive.php
+- author.php
+- author-{username}.php
+- category.php
+- cat-{slug}.php
+- home.php
+- page.php
+- role-{rolename}.php
+- search.php
+- single.php
+- tag.php
+- tag-{slug}.php
+
+
+### File Descriptions
+
+Standard context file naming will work for files in this directory. Here are some specific examples.
+
+- *default.php* - Used when there are no other templates that match for a given page/post.
+- *author-{username}.php* - Used when the post/page is authored by a specific user. For example, a template with a file name of _author-jsmith.php_ would be used for a post/page by user _jsmith_. Any WordPres username can take the place of {username} in the file name.
+- *home.php* - Used for the home page.
+- *page.php* - Used for pages that do not match any other contextual templates.
+
diff --git a/wp-content/themes/vanilla/blog-set/comments/comments-default.html b/wp-content/themes/vanilla/blog-set/comments/comments-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..d8fda38c2bb73842db6e62902de0b5ea89c0aabb
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comments/comments-default.html
@@ -0,0 +1,49 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="comments" tal:omit-tag="">
+	<span tal:define="file php:vanilla_get_template('comments/' . vanilla['comments_loop']['tpl_file'])"
+		  metal:use-macro="${file}/loader"
+		  tal:condition="exists: vanilla/comments_list" tal:comment="The comments_loop slot." />
+	<span tal:define="file php:vanilla_get_template('comments/' . vanilla['pings_loop']['tpl_file'])"
+		  metal:use-macro="${file}/loader"
+		  tal:condition="exists: vanilla/pings_list" tal:comment="The pings_loop slot." />
+	<span tal:define="file php:vanilla_get_template('forms/' . vanilla['comment_form']['tpl_file'])"
+		  metal:use-macro="${file}/loader" tal:comment="The comment form slot." />
+	
+	<h2 class="comments">${structure vanilla/comments/comments_title}</h2>
+	<p>${structure vanilla/comments/comments_description}</p>
+
+	<span metal:define-slot="comments_loop" tal:condition="exists: vanilla/comments_list" />
+	
+	<div tal:condition="exists: vanilla/pings_list">
+		<h3 class="pings">${structure vanilla/comments/pings_title}</h3>
+		<span metal:define-slot="pings_loop" />
+	</div>
+	
+	<span metal:define-slot="comment_form" />
+</div>
+
+</div>
+
+
diff --git a/wp-content/themes/vanilla/blog-set/comments/comments-default.php b/wp-content/themes/vanilla/blog-set/comments/comments-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..a716f30d5a07a7d6675105ae16c696f8856c06b0
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comments/comments-default.php
@@ -0,0 +1,58 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $post, $wp_query, $comments, $comment, $tpl;
+if (empty($post->post_password) || $_COOKIE['wp-postpass_' . COOKIEHASH] == $post->post_password) {
+	$comments = $wp_query->comments;
+	$comment_count = count($comments);
+	$comment_count == 1 ? $comment_title = __('One Response', 'carrington') : $comment_title = sprintf(__('%d Responses', 'carrington'), $comment_count);
+}
+
+$comments_desc = sprintf(__('Stay in touch with the conversation, subscribe to the <a class="feed" title="RSS feed for comments on this post" rel="alternate" href="%s"><acronym title="Really Simple Syndication">RSS</acronym> feed for comments on this post</a>.', 'carrington'), get_bloginfo('rss2_url'));
+
+$tpl["comments"] = array(
+	"tpl_file" => "comments-default.html",
+	"comments_title" => $comment_title,
+	"comments_description" => $comments_desc,
+	"pings_title" => __('Continuing the Discussion', 'carrington')
+);
+
+if ($comments) {
+	$comment_count = 0;
+	$ping_count = 0;
+	foreach ($comments as $comment) {
+		if (get_comment_type() == 'comment') {
+			$comment_count++;
+		}
+		else {
+			$ping_count++;
+		}
+	}
+	if ($comment_count) {
+		cfct_template_file('comments', 'comments-loop');
+	}
+	if ($ping_count) {
+		cfct_template_file('comments', 'pings-loop');
+	}
+}
+
+cfct_form('comment'); 
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/comments/comments-loop.html b/wp-content/themes/vanilla/blog-set/comments/comments-loop.html
new file mode 100644
index 0000000000000000000000000000000000000000..cc587e61faa361c0fe2c7202f1d265fcf9d30a11
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comments/comments-loop.html
@@ -0,0 +1,40 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="comments_loop" tal:omit-tag="">
+	<ol class="comments-list hfeed">
+		<li class="hentry ${vanilla/comment_list_class}" tal:repeat="comment vanilla/comments_list">
+			<span tal:define="file php:vanilla_get_template('comment/' . vanilla['comment']['tpl_file'])"
+				  metal:use-macro="${file}/loader" tal:comment="The single comment slot." />
+			<span metal:define-slot="comment" />
+		</li><!-- .hentry -->
+	</ol><!-- #comments-list -->
+</div>
+
+</div>
+
+
+
+
+
+
diff --git a/wp-content/themes/vanilla/blog-set/comments/comments-loop.php b/wp-content/themes/vanilla/blog-set/comments/comments-loop.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef0c137ade321cb8dfb4ed0cbebfcfd450144b16
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comments/comments-loop.php
@@ -0,0 +1,36 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $comments, $comment, $tpl;
+
+$tpl["comments_loop"] = array(
+	"tpl_file" => "comments-loop.html"
+);
+
+$tpl[] = array(
+	"comment_list_class" => cfct_comment_list_class(false)
+);
+
+foreach ($comments as $comment) {
+	if (get_comment_type() == 'comment') {
+		cfct_comment();
+	}
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/comments/pings-loop.html b/wp-content/themes/vanilla/blog-set/comments/pings-loop.html
new file mode 100644
index 0000000000000000000000000000000000000000..4c13c9b1e87840dceaf55969284567631231949e
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comments/pings-loop.html
@@ -0,0 +1,34 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="pings_loop" tal:omit-tag="">
+	<ol class="pings-list hfeed">
+		<li class="hentry ${vanilla/comment_list_class}" tal:repeat="ping vanilla/pings_list">
+			<span tal:define="file php:vanilla_get_template('comment/' . vanilla['ping']['tpl_file'])"
+				  metal:use-macro="${file}/loader" tal:comment="The single ping slot." />
+			<span metal:define-slot="ping" />
+		</li><!-- .hentry -->
+	</ol><!-- #pings-list -->
+</div>
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/comments/pings-loop.php b/wp-content/themes/vanilla/blog-set/comments/pings-loop.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f6a024122a3d894d766f206c83344577b021bc6
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/comments/pings-loop.php
@@ -0,0 +1,36 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $comments, $comment, $tpl;
+
+$tpl["pings_loop"] = array(
+	"tpl_file" => "pings-loop.html"
+);
+
+$tpl[] = array(
+	"comment_list_class" => cfct_comment_list_class(false)
+);
+
+foreach ($comments as $comment) {
+	if (get_comment_type() != 'comment') {
+		cfct_comment();
+	}
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/content/README.txt b/wp-content/themes/vanilla/blog-set/content/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5c8f2c588869a4d359fd663c932f0e5a549f1c4b
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/content/README.txt
@@ -0,0 +1,66 @@
+## content/
+
+### Overview
+
+This directory holds the templates for displaying a post. Typically this will be the full post with title, meta information (date, categories, tags, author, etc.) and the full output of `the_content()`.
+
+Commonly these templates are included by templates in the _loop/_; but are also useful for bringing in an atomic post representation via AJAX or placing one within another template.
+
+A "default" template is required, and will be used when there are no other templates that match a given comment. This could be because no other templates have been created, or because the comment in question doesn't match the templates that are available.
+
+You can create templates to be used with posts/pages given various conditions. For example, you might want to give all posts in a certain category some specific styling rules. Or perhaps posts with a certain custom field or by a specific author. This is accomplished by creating templates with file names that match these conditions, then placing them in the _content/_ directory. All templates other than _default.php_ are optional.
+
+The order in which these conditions are checked defaults to the following:
+
+1. author
+2. meta
+3. category
+4. role
+5. tag
+6. page types (author, category, tag, single, search, etc.)
+7. default
+
+however this order can be overridden with a plugin using the `cfct_content_match_order` hook.
+
+Once a template match has been found, no other processing is done.
+
+If you want to apply styling/custom HTML to `the_excerpt()`, create/customize templates in the _excerpt/_ directory rather than adding conditional logic to these templates.
+
+
+### Supported Override Filenames
+
+- content-default.php (or default.php)
+- archive.php
+- author.php
+- author-{username}.php
+- category.php
+- cat-{slug}.php
+- home.php
+- meta-{key}-{value}.php
+- meta-{key}.php
+- page.php
+- parent-{slug}.php
+- role-{rolename}.php
+- search.php
+- single.php
+- tag.php
+- tag-{slug}.php
+
+
+### File Descriptions
+
+- *content-default.php* - Used when there are no other templates that match for a given post/page.
+- *author-{username}.php* - Used when a user with that username authors a post/page. For example, a template with a file name of _author-jsmith.php_ would be used for a poat/page by user _jsmith_. Any WordPres username can take the place of {username} in the file name.
+- *meta-{key}-{value}.php* - Used when there is a custom field for the post/page matching the key and value listed in the file name. This is useful if you want to be able to flag posts as "featured" or similar, and give those posts some custom treatment. In this example, you could add a custom field of "featured" with a value of "yes" to a post/page and it would use a template of _meta-featured-yes.php_ if that template exists.
+- *meta-{key}.php* - Used when there is a custom field for the post/page matching the key listed in the file name. This is useful if you want to be able to flag posts as "photo" or similar, and give those posts some custom treatment. In this example, you could add a custom field of "photo" with a value of the URL of the image to a post/page and it would use a template of _meta-photo.php_ if that template exists. The value does not matter in this match.
+- *cat-{slug}.php* - Used when a post is in a given category. The category is matched by the "slug" - for example a post in category "General" (with a category slug of "general") could use a template of _cat-general.php_.
+- *parent-{slug}.php* - Used when a page is a child page of a specific parent page. The page is matched by the "slug" - for example a page under a parent page with slug of "example" could use a template of _parent-example.php_.
+- *role-{role}.php* - Used when a post/page is authored by a user with a particular role. The {role} is an all lowercase representation of the role string - for example, an author with an "Administrator" role might use a template of _role-administrator.php_. This is primarily useful if you have a set of authors that are given a Contributor role; or a Guest Columnist role or similar. Any WordPress role can take the place of {role} in the file name.
+- *tag-{slug}.php* - Used when a post has a certain tag applied to it. The tag is matched by the "slug" - for example a post with tag "Reference" (with a tag slug of "reference") could use a template of _tag-reference.php_.
+- *author.php* - Used when the content is being displayed on an "author" page (a page listing posts by author).
+- *category.php* - Used when the content is being displayed on a "category" page (a page listing posts by category).
+- *tag.php* - Used when the content is being displayed on an "tag" page (a page listing posts by tags).
+- *page.php* - Used when the content is being displayed is a page (not a post).
+- *single.php* - Used when the content is being displayed on an "single" page (a page showing only one post).
+- *search.php* - Used when the content is being displayed are search results (a page listing posts matching a user search).
+- *home.php* - Used when the page being displayed is the home page.
diff --git a/wp-content/themes/vanilla/blog-set/content/cat-asides.php b/wp-content/themes/vanilla/blog-set/content/cat-asides.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1c67b40b4457b94f0ca1057c43a0268f89a029d
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/content/cat-asides.php
@@ -0,0 +1,67 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $previousday, $authordata;
+$previousday = -1;
+
+if (is_home()) :
+
+// THIS IS THE MODIFIED LOOK FOR ASIDES ON "INDEX" PAGES
+?>
+<div id="post-content-<?php the_ID() ?>" class="hentry full <?php sandbox_post_class() ?>">
+	<div class="wrapper">
+		<div class="entry-content full-content">
+			<?php the_content('<span class="more-link">'.__('Continued...', 'carrington').'</span>') ?>
+			<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+		</div><!--/entry-content-->
+		<p class="comments-link"><?php comments_popup_link(__('No comments', 'carrington'), __('1 comment', 'carrington'), __('% comments', 'carrington')); ?></p>
+	</div>
+		<div class="clear"></div>
+		<div id="post-comments-<?php the_ID(); ?>-target"></div>
+		<?php edit_post_link(__('Edit This', 'carrington'), '<div class="entry-editlink">', '</div>'); ?>
+</div><!-- .post -->
+
+<?php else : 
+
+// THIS IS THE DEFAULT LOOK FOR ASIDES ON ALL OTHER PAGES
+?>
+
+<div id="post-content-<?php the_ID() ?>" class="hentry full <?php sandbox_post_class() ?>">
+	<h1 class="entry-title full-title"><a href="<?php the_permalink() ?>" title="Permanent link to <?php the_title_attribute() ?>" rel="bookmark" rev="post-<?php the_ID(); ?>"><?php the_title() ?></a></h1>
+	<div class="entry-content full-content">
+		<?php the_content('<span class="more-link">'.__('Continued...', 'carrington').'</span>'); link_pages('<p class="pages-link">'.__('Pages: ', 'carrington'), "</p>\n", 'number'); ?>
+	</div><!--/entry-content-->
+	<p class="filed">
+		<span class="categories"><?php printf(__('Posted in %s.', 'carrington'), get_the_category_list(', ')) ?></span> 
+		<?php the_tags(__('<span class="tags">Tagged with ', 'carrington'), ', ', '.</span>'); ?>
+	</p><!--/filed-->
+	<div class="by-line">
+		<address class="author vcard full-author">
+			<?php printf(__('<span class="by">By</span> %s', 'carrington'), '<a class="url fn" href="'.get_author_link(false, get_the_author_ID(), $authordata->user_nicename).'" title="View all posts by ' . attribute_escape($authordata->display_name) . '">'.get_the_author().'</a>') ?>
+		</address>
+		<span class="date full-date"><abbr class="published" title="<?php the_time('Y-m-d\TH:i:sO'); ?>"><?php the_date(); ?></abbr></span>
+	</div><!--/by-line-->
+	<p class="comments-link"><?php comments_popup_link(__('No comments', 'carrington'), __('1 comment', 'carrington'), __('% comments', 'carrington')); ?></p>
+	<div class="clear"></div>
+	<div id="post-comments-<?php the_ID(); ?>-target"></div>
+	<?php edit_post_link(__('Edit This', 'carrington'), '<div class="entry-editlink">', '</div>'); ?>
+</div><!-- .post -->
+
+<?php endif; ?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/content/content-default.html b/wp-content/themes/vanilla/blog-set/content/content-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..779315b35b0cdc10a0e8ae729e14a09c7b3e322f
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/content/content-default.html
@@ -0,0 +1,48 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="content" tal:omit-tag="">
+	<div id="post-content-${entry/id}" class="hentry full ${entry/class}">
+		<h1 class="entry-title full-title"><a href="${entry/permalink}" title="Permanent link to ${entry/title_attribute}" rel="bookmark" rev="post-${entry/id}">${entry/title}</a></h1>
+		<div class="entry-content full-content">
+			${structure entry/content}
+			<p class="pages-link" tal:condition="entry/pages_link">Pages: ${structure entry/pages_link}</p>
+		</div><!--/entry-content-->
+		<p class="filed">
+			<span class="categories" tal:condition="entry/categories_list">Posted in ${structure entry/categories_list}</span> 
+			<span class="tags" tal:condition="entry/tags_list">Tagged with ${structure entry/tags_list}</span>
+		</p><!--/filed-->
+		<div class="by-line" tal:condition="entry/author">
+			<address class="author vcard full-author">
+				<span class="by">By</span> <a class="url fn" href="${structure entry/author/link}" title="View all posts by ${entry/author/name_attribute}">${entry/author/name}</a>
+			</address>
+			<span class="date full-date"><abbr class="published" title="${entry/date_time}">${entry/date}</abbr></span>
+		</div><!--/by-line-->
+		<p class="comments-link" tal:condition="entry/comments_link">${structure entry/comments_link}</p>
+		<div class="clear"></div>
+		<div id="post-comments-${entry/id}-target"></div>
+		<div class="entry-editlink" tal:condition="entry/edit_link"><a href="${structure entry/edit_link}">${entry/edit_link_text}</a></div>
+	</div><!-- .post -->
+</div>
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/content/content-default.php b/wp-content/themes/vanilla/blog-set/content/content-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..d2c7ec8a8832bbe408de98eb468a5ee3ec88952d
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/content/content-default.php
@@ -0,0 +1,57 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $previousday, $authordata, $tpl;
+$previousday = -1;
+
+$tpl_tags_list = get_the_tag_list("", ",", "");
+$tpl_edit_link = get_edit_post_link();
+$tpl_pages_link = wp_link_pages('before=&after=&echo=0');
+
+$content = get_the_content('<span class="more-link">'.__('Continued...', 'carrington').'</span>');
+$content = apply_filters('the_content', $content);
+$content = str_replace(']]>', ']]&gt;', $content);
+
+$tpl["content"] = array(
+	"tpl_file" => "content-default.html"
+);
+
+$tpl["entries"][] = array(
+	"id" => get_the_ID(),
+	"class" => sandbox_post_class(false),
+	"permalink" => get_permalink(),
+	"title_attribute" => the_title_attribute('echo=0'),
+	"title" => the_title("", "", false),
+	"content" => $content,
+	"pages_link" => ($tpl_pages_link == '') ? false : $tpl_pages_link,
+	"categories_list" => get_the_category_list(', '),
+	"tags_list" => ($tpl_tags_list == '') ? false : $tpl_tags_list,
+	"author" => array(
+		"link" => get_author_link(false, get_the_author_ID(), $authordata->user_nicename),
+		"name_attribute" => attribute_escape($authordata->display_name),
+		"name" => get_the_author()
+		),
+	"date_time" => get_the_time('Y-m-d\TH:i:sO'),
+	"date" => the_date("", "", "", false),
+	"comments_link" => vanilla_comments_popup_link(__('No comments', 'carrington'), __('1 comment', 'carrington'), __('% comments', 'carrington')),
+	"edit_link" => ($tpl_edit_link == '') ? false : $tpl_edit_link,
+	"edit_link_text" => __('Edit This', 'carrington')
+);
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/README.txt b/wp-content/themes/vanilla/blog-set/css/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ad9901c38334920741e014c6076b821ad1968ba2
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/README.txt
@@ -0,0 +1,8 @@
+## css/
+
+### Overview
+
+This directory is used to organize your CSS files. You can reference these files using the built-in WordPress `bloginfo()` function like so:
+
+	<link rel="stylesheet" type="text/css" 
+		href="<?php bloginfo('template_directory'); ?>/css/base.css" />
diff --git a/wp-content/themes/vanilla/blog-set/css/fonts-context-min.css b/wp-content/themes/vanilla/blog-set/css/fonts-context-min.css
new file mode 100644
index 0000000000000000000000000000000000000000..049da881bdf3008e77067219614c940505cb2aaf
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/fonts-context-min.css
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 3.0.0pr2
+*/
+.yui-cssfonts body,.yui-cssfonts{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}.yui-cssfonts select,.yui-cssfonts input,.yui-cssfonts button,.yui-cssfonts textarea{font:99% arial,helvetica,clean,sans-serif;}.yui-cssfonts table{font-size:inherit;font:100%;}.yui-cssfonts pre,.yui-cssfonts code,.yui-cssfonts kbd,.yui-cssfonts samp,.yui-cssfonts tt{font-family:monospace;*font-size:108%;line-height:100%;}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/fonts-min.css b/wp-content/themes/vanilla/blog-set/css/fonts-min.css
new file mode 100644
index 0000000000000000000000000000000000000000..dc2bed677a4a3f8a25da9e37950f88eed4b87e47
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/fonts-min.css
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 3.0.0pr2
+*/
+body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/grids-context-min.css b/wp-content/themes/vanilla/blog-set/css/grids-context-min.css
new file mode 100644
index 0000000000000000000000000000000000000000..6b6503b778c5bd792ba931c10144d7f5ca218b09
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/grids-context-min.css
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 3.0.0pr2
+*/
+.yui-cssgrids body{text-align:center;margin-left:auto;margin-right:auto;}.yui-cssgrids .yui-d0,.yui-cssgrids .yui-d1,.yui-cssgrids .yui-d1f,.yui-cssgrids .yui-d2,.yui-cssgrids .yui-d2f,.yui-cssgrids .yui-d3,.yui-cssgrids .yui-d3f{margin:auto;text-align:left;width:57.69em;*width:56.25em;}.yui-cssgrids .yui-t1,.yui-cssgrids .yui-t2,.yui-cssgrids .yui-t3,.yui-cssgrids .yui-t4,.yui-cssgrids .yui-t5,.yui-cssgrids .yui-t6{margin:auto;text-align:left;width:100%;}.yui-cssgrids .yui-d0{margin:auto 10px;width:auto;}.yui-cssgrids .yui-d0f{width:100%;}.yui-cssgrids .yui-d2{width:73.076em;*width:71.25em;}.yui-cssgrids .yui-d2f{width:950px;}.yui-cssgrids .yui-d3{width:74.923em;*width:73.05em;}.yui-cssgrids .yui-d3f{width:974px;}.yui-cssgrids .yui-b{position:relative;}.yui-cssgrids .yui-b{_position:static;}.yui-cssgrids .yui-main .yui-b{position:static;}.yui-cssgrids .yui-main{width:100%;}.yui-cssgrids .yui-t1 .yui-main,.yui-cssgrids .yui-t2 .yui-main,.yui-cssgrids .yui-t3 .yui-main{float:right;margin-left:-25em;}.yui-cssgrids .yui-t4 .yui-main,.yui-cssgrids .yui-t5 .yui-main,.yui-cssgrids .yui-t6 .yui-main{float:left;margin-right:-25em;}.yui-cssgrids .yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-cssgrids .yui-t1 .yui-main .yui-b{margin-left:13.30769em;*margin-left:12.975em;}.yui-cssgrids .yui-t2 .yui-b{float:left;width:13.84615em;*width:13.50em;}.yui-cssgrids .yui-t2 .yui-main .yui-b{margin-left:14.84615em;*margin-left:14.475em;}.yui-cssgrids .yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-cssgrids .yui-t3 .yui-main .yui-b{margin-left:24.0769em;*margin-left:23.475em;}.yui-cssgrids .yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-cssgrids .yui-t4 .yui-main .yui-b{margin-right:14.8456em;*margin-right:14.475em;}.yui-cssgrids .yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-cssgrids .yui-t5 .yui-main .yui-b{margin-right:19.4615em;*margin-right:18.975em;}.yui-cssgrids .yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-cssgrids .yui-t6 .yui-main .yui-b{margin-right:24.0769em;*margin-right:23.475em;}.yui-cssgrids .yui-main .yui-b{float:none;width:auto;}.yui-cssgrids .yui-gb .yui-u,.yui-cssgrids .yui-g .yui-gb .yui-u,.yui-cssgrids .yui-gb .yui-g,.yui-cssgrids .yui-gb .yui-gb,.yui-cssgrids .yui-gb .yui-gc,.yui-cssgrids .yui-gb .yui-gd,.yui-cssgrids .yui-gb .yui-ge,.yui-cssgrids .yui-gb .yui-gf,.yui-cssgrids .yui-gc .yui-u,.yui-cssgrids .yui-gc .yui-g,.yui-cssgrids .yui-gd .yui-u{float:left;}.yui-cssgrids .yui-g .yui-u,.yui-cssgrids .yui-g .yui-g,.yui-cssgrids .yui-g .yui-gb,.yui-cssgrids .yui-g .yui-gc,.yui-cssgrids .yui-g .yui-gd,.yui-cssgrids .yui-g .yui-ge,.yui-cssgrids .yui-g .yui-gf,.yui-cssgrids .yui-gc .yui-u,.yui-cssgrids .yui-gd .yui-g,.yui-cssgrids .yui-g .yui-gc .yui-u,.yui-cssgrids .yui-ge .yui-u,.yui-cssgrids .yui-ge .yui-g,.yui-cssgrids .yui-gf .yui-g,.yui-cssgrids .yui-gf .yui-u{float:right;}.yui-cssgrids .yui-g div.first,.yui-cssgrids .yui-gb div.first,.yui-cssgrids .yui-gc div.first,.yui-cssgrids .yui-gd div.first,.yui-cssgrids .yui-ge div.first,.yui-cssgrids .yui-gf div.first,.yui-cssgrids .yui-g .yui-gc div.first,.yui-cssgrids .yui-g .yui-ge div.first,.yui-cssgrids .yui-gc div.first div.first{float:left;}.yui-cssgrids .yui-g .yui-u,.yui-cssgrids .yui-g .yui-g,.yui-cssgrids .yui-g .yui-gb,.yui-cssgrids .yui-g .yui-gc,.yui-cssgrids .yui-g .yui-gd,.yui-cssgrids .yui-g .yui-ge,.yui-cssgrids .yui-g .yui-gf{width:49.1%;}.yui-cssgrids .yui-gb .yui-u,.yui-cssgrids .yui-g .yui-gb .yui-u,.yui-cssgrids .yui-gb .yui-g,.yui-cssgrids .yui-gb .yui-gb,.yui-cssgrids .yui-gb .yui-gc,.yui-cssgrids .yui-gb .yui-gd,.yui-cssgrids .yui-gb .yui-ge,.yui-cssgrids .yui-gb .yui-gf,.yui-cssgrids .yui-gc .yui-u,.yui-cssgrids .yui-gc .yui-g,.yui-cssgrids .yui-gd .yui-u{width:32%;margin-left:2.0%;}.yui-cssgrids .yui-gb .yui-u{*width:31.8%;*margin-left:1.9%;}.yui-cssgrids .yui-gc div.first,.yui-cssgrids .yui-gd .yui-u{width:66%;_width:65.7%;}.yui-cssgrids .yui-gd div.first{width:32%;_width:31.5%;}.yui-cssgrids .yui-ge div.first,.yui-cssgrids .yui-gf .yui-u{width:74.2%;_width:74%;}.yui-cssgrids .yui-ge .yui-u,.yui-cssgrids .yui-gf div.first{width:24%;_width:23.8%;}.yui-cssgrids .yui-g .yui-gb div.first,.yui-cssgrids .yui-gb div.first,.yui-cssgrids .yui-gc div.first,.yui-cssgrids .yui-gd div.first{margin-left:0;}.yui-cssgrids .yui-g .yui-g .yui-u,.yui-cssgrids .yui-gb .yui-g .yui-u,.yui-cssgrids .yui-gc .yui-g .yui-u,.yui-cssgrids .yui-gd .yui-g .yui-u,.yui-cssgrids .yui-ge .yui-g .yui-u,.yui-cssgrids .yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-cssgrids .yui-g .yui-gb div.first,.yui-cssgrids .yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-cssgrids .yui-g .yui-gc div.first,.yui-cssgrids .yui-gd .yui-g{width:66%;}.yui-cssgrids .yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-cssgrids .yui-gb .yui-gc div.first,.yui-cssgrids .yui-gb .yui-gd div.first{*margin-right:0;}.yui-cssgrids .yui-gb .yui-gb .yui-u,.yui-cssgrids .yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-cssgrids .yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-cssgrids .yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-cssgrids .yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-cssgrids .yui-g .yui-gc .yui-u,.yui-cssgrids .yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-cssgrids .yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-cssgrids .yui-gb .yui-ge .yui-u,.yui-cssgrids .yui-gb .yui-gf .yui-u{margin:0;}.yui-cssgrids .yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-cssgrids .yui-gb .yui-g div.first,.yui-cssgrids .yui-gb .yui-gb div.first{*margin-left:0;}.yui-cssgrids .yui-gc .yui-g .yui-u,.yui-cssgrids .yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-cssgrids .yui-gb .yui-gd div.first{width:32%;}.yui-cssgrids .yui-g .yui-gd div.first{_width:29.9%;}.yui-cssgrids .yui-ge .yui-g{width:24%;}.yui-cssgrids .yui-gf .yui-g{width:74.2%;}.yui-cssgrids .yui-gb .yui-ge div.yui-u,.yui-cssgrids .yui-gb .yui-gf div.yui-u{float:right;}.yui-cssgrids .yui-gb .yui-ge div.first,.yui-cssgrids .yui-gb .yui-gf div.first{float:left;}.yui-cssgrids .yui-gb .yui-ge .yui-u,.yui-cssgrids .yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-cssgrids .yui-gc .yui-gf .yui-u{width:74%;_width:73%;}.yui-cssgrids .yui-gc .yui-gf div.first{width:24%;}.yui-cssgrids .yui-gb .yui-ge div.first,.yui-cssgrids .yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-cssgrids .yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-cssgrids .yui-ge div.first .yui-gd div.first{width:32%;}.yui-cssgrids #bd:after,.yui-cssgrids .yui-g:after,.yui-cssgrids .yui-gb:after,.yui-cssgrids .yui-gc:after,.yui-cssgrids .yui-gd:after,.yui-cssgrids .yui-ge:after,.yui-cssgrids .yui-gf:after,.yui-cssgrids .yui-t1:after,.yui-cssgrids .yui-t2:after,.yui-cssgrids .yui-t3:after,.yui-cssgrids .yui-t4:after,.yui-cssgrids .yui-t5:after,.yui-cssgrids .yui-t6:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.yui-cssgrids #bd,.yui-cssgrids .yui-g,.yui-cssgrids .yui-gb,.yui-cssgrids .yui-gc,.yui-cssgrids .yui-gd,.yui-cssgrids .yui-ge,.yui-cssgrids .yui-gf,.yui-cssgrids .yui-t1,.yui-cssgrids .yui-t2,.yui-cssgrids .yui-t3,.yui-cssgrids .yui-t4,.yui-cssgrids .yui-t5,.yui-cssgrids .yui-t6{zoom:1;}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/grids-min.css b/wp-content/themes/vanilla/blog-set/css/grids-min.css
new file mode 100644
index 0000000000000000000000000000000000000000..027433c02453132c0cd82de14c13d977bb2393bd
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/grids-min.css
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 3.0.0pr2
+*/
+body{text-align:center;margin-left:auto;margin-right:auto;}.yui-d0,.yui-d1,.yui-d1f,.yui-d2,.yui-d2f,.yui-d3,.yui-d3f{margin:auto;text-align:left;width:57.69em;*width:56.25em;}.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6{margin:auto;text-align:left;width:100%;}.yui-d0{margin:auto 10px;width:auto;}.yui-d0f{width:100%;}.yui-d2{width:73.076em;*width:71.25em;}.yui-d2f{width:950px;}.yui-d3{width:74.923em;*width:73.05em;}.yui-d3f{width:974px;}.yui-b{position:relative;}.yui-b{_position:static;}.yui-main .yui-b{position:static;}.yui-main{width:100%;}.yui-t1 .yui-main,.yui-t2 .yui-main,.yui-t3 .yui-main{float:right;margin-left:-25em;}.yui-t4 .yui-main,.yui-t5 .yui-main,.yui-t6 .yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 .yui-main .yui-b{margin-left:13.30769em;*margin-left:12.975em;}.yui-t2 .yui-b{float:left;width:13.84615em;*width:13.50em;}.yui-t2 .yui-main .yui-b{margin-left:14.84615em;*margin-left:14.475em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 .yui-main .yui-b{margin-left:24.0769em;*margin-left:23.475em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 .yui-main .yui-b{margin-right:14.8456em;*margin-right:14.475em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 .yui-main .yui-b{margin-right:19.4615em;*margin-right:18.975em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 .yui-main .yui-b{margin-right:24.0769em;*margin-right:23.475em;}.yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:2.0%;}.yui-gb .yui-u{*width:31.8%;*margin-left:1.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;_width:65.7%;}.yui-gd div.first{width:32%;_width:31.5%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;_width:74%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;_width:23.8%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after,.yui-t1:after,.yui-t2:after,.yui-t3:after,.yui-t4:after,.yui-t5:after,.yui-t6:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6{zoom:1;}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/ie.css b/wp-content/themes/vanilla/blog-set/css/ie.css
new file mode 100644
index 0000000000000000000000000000000000000000..faf7e89f716a6a55cd84ec0a0f4adc28741306bc
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/ie.css
@@ -0,0 +1,55 @@
+/* hasLayout fixes */
+#content,
+#sidebar,
+#navigation,
+#navigation ul,
+#navigation li,
+#all-categories ul,
+#all-categories li,
+.full,
+ol#comments-list li.hentry,
+#comment-form,
+#comment-form .section,
+.comment,
+h2#comments,
+.widget,
+.pagination,
+#carrington-about .about {zoom:1;}
+
+/* Suckerfish dropdowns stick in IE7 without this bit */
+#navigation li:hover,
+#all-categories li:hover {
+    position:static;
+}
+
+/* Since we have to give layout to the .full div, the box model is different, messing with spacing. */
+.full{
+	margin-bottom:0;
+}
+
+/* Border dotted looks like junk in IE. */
+ol.archive,
+.excerpt,
+#content .search,
+ol#comments-list li,
+.pingback,
+.trackback,
+#carrington-archives ul,
+#carrington-archives li {
+	border-style:solid;
+}
+
+/* IE6 doesn't understand inherit */
+address.author {
+	font-style:normal;
+}
+
+/* IE doesn't comprehend the short-notation override */
+#navigation ul,
+#all-categories ul {list-style-image: none;}
+
+/* lo-fi png fix */
+#footer p#developer-link a,
+#footer p#developer-link a:visited {
+	background-image: url(../images/by-crowd-favorite.gif);
+}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/image.css b/wp-content/themes/vanilla/blog-set/css/image.css
new file mode 100644
index 0000000000000000000000000000000000000000..0ef3e1e48e051110a08530f1117d792acf97da3c
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/image.css
@@ -0,0 +1,80 @@
+body {
+	background-color:#000;
+	color:#ccc;
+}
+
+a,
+a:visited {
+	color:#fff;
+	font-weight:bold;
+}
+
+#header,
+#footer {clear:both;}
+
+#header a,
+#footer a {
+	background:#111;
+	display:block;
+	padding:10px;
+}
+#header a:hover,
+#footer a:hover {background:#222;}
+
+#content {
+	float:left;
+	margin:20px 0;
+	width:50%;
+}
+
+.figure-info {
+	background:#0f0f0f;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+	-khtml-border-radius:5px;
+	-moz-border-radius:5px;
+	margin:20px 0 0;
+	padding:10px;
+}
+.figure-info .title {
+ 	margin:0;
+}
+.figure-info .caption {
+	color:#777;
+}
+.figure-info .caption p {
+	font-size: 1.16666667em; /* 14 */
+	line-height: 1.28571429;
+	margin-bottom:1.28571429em;
+	margin-top:.25em;
+}
+
+.entry-attachment {
+	text-align:center;
+}
+
+.previous-attachment,
+.next-attachment {
+	float:left;
+	padding:50px 0;
+	text-align:center;
+	width:25%;
+}
+
+.previous-attachment img,
+.next-attachment img{
+	background:#222 url(../images/attachment-next.png) no-repeat right center;
+	padding:8px;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+	-khtml-border-radius:5px;
+	-moz-border-radius:5px;
+}
+.previous-attachment img {
+	background-image:url(../images/attachment-previous.png);
+	background-position:left center;
+	padding-left:50px;
+}
+.next-attachment img {
+	padding-right:50px;
+}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/reset-context-min.css b/wp-content/themes/vanilla/blog-set/css/reset-context-min.css
new file mode 100644
index 0000000000000000000000000000000000000000..02346e7a178908b4877a1c7399928a4901c88087
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/reset-context-min.css
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 3.0.0pr2
+*/
+.yui-cssreset html{color:#000;background:#FFF;}.yui-cssreset body,.yui-cssreset div,.yui-cssreset dl,.yui-cssreset dt,.yui-cssreset dd,.yui-cssreset ul,.yui-cssreset ol,.yui-cssreset li,.yui-cssreset h1,.yui-cssreset h2,.yui-cssreset h3,.yui-cssreset h4,.yui-cssreset h5,.yui-cssreset h6,.yui-cssreset pre,.yui-cssreset code,.yui-cssreset form,.yui-cssreset fieldset,.yui-cssreset legend,.yui-cssreset input,.yui-cssreset textarea,.yui-cssreset p,.yui-cssreset blockquote,.yui-cssreset th,.yui-cssreset td{margin:0;padding:0;}.yui-cssreset table{border-collapse:collapse;border-spacing:0;}.yui-cssreset fieldset,.yui-cssreset img{border:0;}.yui-cssreset address,.yui-cssreset caption,.yui-cssreset cite,.yui-cssreset code,.yui-cssreset dfn,.yui-cssreset em,.yui-cssreset strong,.yui-cssreset th,.yui-cssreset var{font-style:normal;font-weight:normal;}.yui-cssreset li{list-style:none;}.yui-cssreset caption,.yui-cssreset th{text-align:left;}.yui-cssreset h1,.yui-cssreset h2,.yui-cssreset h3,.yui-cssreset h4,.yui-cssreset h5,.yui-cssreset h6{font-size:100%;font-weight:normal;}.yui-cssreset q:before,.yui-cssreset q:after{content:'';}.yui-cssreset abbr,.yui-cssreset acronym{border:0;font-variant:normal;}.yui-cssreset sup{vertical-align:text-top;}.yui-cssreset sub{vertical-align:text-bottom;}.yui-cssreset input,.yui-cssreset textarea,.yui-cssreset select{font-family:inherit;font-size:inherit;font-weight:inherit;}.yui-cssreset input,.yui-cssreset textarea,.yui-cssreset select{*font-size:100%;}.yui-cssreset legend{color:#000;}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/reset-fonts-grids.css b/wp-content/themes/vanilla/blog-set/css/reset-fonts-grids.css
new file mode 100644
index 0000000000000000000000000000000000000000..066cfc199864d33a5947794f8ebc0e1f57c1ed2c
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/reset-fonts-grids.css
@@ -0,0 +1,8 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.5.2
+*/
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;font-variant:normal;}sup {vertical-align:text-top;}sub {vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}body {font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
+body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;min-width:750px;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}s .yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/reset-min.css b/wp-content/themes/vanilla/blog-set/css/reset-min.css
new file mode 100644
index 0000000000000000000000000000000000000000..a7474d3af2eb939bec3e56cf90d5d2f210abd0c5
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/reset-min.css
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 3.0.0pr2
+*/
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/css/typography.css b/wp-content/themes/vanilla/blog-set/css/typography.css
new file mode 100644
index 0000000000000000000000000000000000000000..d06bc682ba615601f3c16729e4fb32982d1c8e8a
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/css/typography.css
@@ -0,0 +1,181 @@
+/* =====Typography=====*/
+body {
+	background: #fff;
+	color: #51555c;
+	font-family: helvetica, arial, sans-serif; /* Set in percentages so IE6 can still resize. The percentage notation also fixes a strange quirk where IE dramaticly scales text. */
+	line-height: 1.5;
+}
+#page {
+	font-size: 93%;
+}
+code {
+	font-family: "Lucida Console", Monaco, monospace;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+strong {
+	font-weight: bold;
+}
+em,
+*[lang] {
+	font-style: italic;
+}
+strike,
+del {
+	text-decoration: line-through;
+}
+acronym,
+.caps {
+	text-transform: uppercase;
+}
+.small-caps {
+	font-variant: small-caps;
+}
+acronym,
+.num,
+.caps,
+.small-caps {
+	letter-spacing: 0.1em;
+}
+/* Links */
+a,
+a:visited {
+	color: #a00004;
+	text-decoration: none;
+}
+/* specify all three for accessibility */
+a:focus,
+a:hover,
+a:active {
+	text-decoration: underline;
+}
+h1 a,
+h1 a:visited,
+h2 a,
+h2 a:visited,
+h3 a,
+h3 a:visited,
+h4 a,
+h4 a:visited,
+h5 a,
+h5 a:visited,
+h6 a,
+h6 a:visited {
+	color: #51555c;
+}
+h1 a:hover,
+h2 a:hover,
+h3 a:hover,
+h4 a:hover,
+h5 a:hover,
+h6 a:hover {
+	color: #a00004;
+	text-decoration: none;
+}
+/* elements with title attribute */
+abbr[title],
+acronym[title],
+dfn[title],
+span[title],
+del[title] {
+	cursor: help;
+}
+/* typogrify: inset initial double quotes. */
+.dquo {
+	margin-left: -.45em;
+}
+ /* fancy ampersands */
+.amp {
+	font-family: Baskerville, "Goudy Old Style", "Palatino", "Book Antiqua", serif;
+	font-size: 110%;
+	font-style: italic;
+}
+/* Font sizes and vertical measure */
+h1 {
+	font-size: 2em; /* 24 */
+	line-height: 1;
+	margin: 1.125em 0 .25em;
+}
+h2,
+big {
+	font-size: 1.5em; /* 18 */
+	line-height: 1;
+}
+h2 {
+	margin: 0 0 .5em 0;
+}
+h3 {
+	font-size: 1.16666667em; /* 14 */
+	line-height: 1.28571429;
+	margin: 0 0 .58333334em 0;
+}
+h4,
+h5,
+h6 {
+	margin: 0 0 .75em 0;
+}
+p {
+	margin: 0 0 1.5em 0;
+}
+blockquote {
+	border-left:.16666667em solid #e9eaea;
+	margin: 0 .75em .75em .75em;
+	padding-left:1em;
+}
+small,
+acronym,
+.caps {
+	font-size: .833333333333em;
+	line-height: 1.8em;
+}
+pre {
+	font-size: 1em;
+	line-height: 1.5;
+	margin-bottom: 1.5em;
+	overflow: auto;
+}
+textarea {
+	font-family: helvetica, arial, sans-serif;
+	font-size: 1em;
+	line-height: 1.5;
+	padding: 3px;
+}
+ul,
+ol,
+dl {
+	margin: 0 0 1.5em 2em;
+}
+li ul,
+li ol {
+	margin-bottom: 0;
+}
+ul, li {
+	list-style-image: url(../images/arrow-bullet.gif);
+}
+ol li { list-style-image: none; }
+
+#content li, #content dd {
+	margin-bottom: .5em;
+}
+/* Tables */
+table {
+	border-left: .083333333em solid #eee;
+	border-top: .083333333em solid #eee;
+}
+td,th {
+	line-height: 1.33333333em;
+	padding: 0 .5em;
+}
+th {
+	background-color: #eee;
+	border-bottom: .083333333em solid #ddd;
+	border-right: .083333333em solid #ddd;
+}
+td {
+	border-bottom: .083333333em solid #eee;
+	border-right: .083333333em solid #eee;
+}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/error/404.php b/wp-content/themes/vanilla/blog-set/error/404.php
new file mode 100644
index 0000000000000000000000000000000000000000..75ac2c0d6f22a2d14ffe6f9776e28cd39fddc786
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/error/404.php
@@ -0,0 +1,38 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+get_header();
+
+?>
+<div id="content">
+<p>Sorry, we're not sure what you're looking for here.</p>
+
+<?php
+
+cfct_form('search');
+
+?>
+</div><!--#content-->
+<?php 
+get_sidebar();
+
+get_footer();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/error/README.txt b/wp-content/themes/vanilla/blog-set/error/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8d5d4f4d89a4c5721841fd882d8fcbf3999058dd
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/error/README.txt
@@ -0,0 +1,20 @@
+## error/
+
+### Overview
+
+This directory holds templates for error conditions. WordPress supports the 404 error out of the box, but you may want to create additional error templates for other conditions (not authorized, etc.).
+
+You can load an error template by using the following code:
+
+	cfct_error('not-authorized.php');
+
+
+### Supported Override Filenames
+
+- (none)
+
+
+### File Descriptions
+
+- *404.php* - used for "File not Found" errors.
+- *exit.php* - used to display a message when exiting on some error condition.
diff --git a/wp-content/themes/vanilla/blog-set/error/exit.php b/wp-content/themes/vanilla/blog-set/error/exit.php
new file mode 100644
index 0000000000000000000000000000000000000000..e8c8d9a276ce1c5e7d037f2c87560dfd9ad780a4
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/error/exit.php
@@ -0,0 +1,24 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+?>
+<html>
+<body><?php echo htmlspecialchars($str); ?></body>
+</html>
diff --git a/wp-content/themes/vanilla/blog-set/excerpt/README.txt b/wp-content/themes/vanilla/blog-set/excerpt/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..47b08754fe904f92b826b03d20154f820772aeed
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/excerpt/README.txt
@@ -0,0 +1,64 @@
+## excerpt/
+
+### Overview
+
+(This information is very similar to the _content/_)
+
+This directory holds the templates for displaying a the excerpt for a post. Typically this will include the title and some sub-set of meta information (date, categories, tags, author, etc.) and the full output of `the_content()`.
+
+Commonly these templates are included by templates in the _loop/_; but are also useful for bringing in an atomic post representation via AJAX or placing one within another template.
+
+A "default" template is required, and will be used when there are no other templates that match a given comment. This could be because no other templates have been created, or because the comment in question doesn't match the templates that are available.
+
+You can create templates to be used with posts/pages given various conditions. For example, you might want to give all posts in a certain category some specific styling rules. Or perhaps posts with a certain custom field or by a specific author. This is accomplished by creating templates with file names that match these conditions, then placing them in the _content/_ directory. All templates other than _default.php_ are optional.
+
+The order in which these conditions are checked defaults to the following:
+
+1. author
+2. meta
+3. category
+4. role
+5. tag
+6. page types (author, category, tag, single, search, etc.)
+7. default
+
+however this order can be overridden with a plugin using the `cfct_content_match_order` hook.
+
+Once a template match has been found, no other processing is done.
+
+
+### Supported Override Filenames
+
+- excerpt-default.php (or default.php)
+- archive.php
+- author.php
+- author-{username}.php
+- category.php
+- cat-{slug}.php
+- home.php
+- meta-{key}-{value}.php
+- page.php
+- role-{rolename}.php
+- search.php
+- single.php
+- tag.php
+- tag-{slug}.php
+
+
+### File Descriptions
+
+(This information is the same as the _content/_)
+
+- *excerpt-default.php* - Used when there are no other templates that match for a given post/page.
+- *author-{username}.php* - Used when a user with that username authors a post/page. For example, a template with a file name of _author-jsmith.php_ would be used for a poat/page by user _jsmith_. Any WordPres username can take the place of {username} in the file name.
+- *meta-{key}-{value}.php* - Used when there is a custom field for the post/page matching the key and value listed in the file name. This is useful if you want to be able to flag posts as "featured" or similar, and give those posts some custom treatment. In this example, you could add a custom field of "featured" with a value of "yes" to a post/page and it would use a template of _meta-featured-yes.php_ if that template exists.
+- *cat-{slug}.php* - Used when a post is in a given category. The category is matched by the "slug" - for example a post in category "General" (with a category slug of "general") could use a template of _cat-general.php_.
+- *role-{role}.php* - Used when a post/page is authored by a user with a particular role. The {role} is an all lowercase representation of the role string - for example, an author with an "Administrator" role might use a template of _role-administrator.php_. This is primarily useful if you have a set of authors that are given a Contributor role; or a Guest Columnist role or similar. Any WordPress role can take the place of {role} in the file name.
+- *tag-{slug}.php* - Used when a post has a certain tag applied to it. The tag is matched by the "slug" - for example a post with tag "Reference" (with a category slug of "reference") could use a template of _tag-reference.php_.
+- *author.php* - Used when the content is being displayed on an "author" page (a page listing posts by author).
+- *category.php* - Used when the content is being displayed on a "category" page (a page listing posts by category).
+- *tag.php* - Used when the content is being displayed on an "tag" page (a page listing posts by tags).
+- *page.php* - Used when the content is being displayed is a page (not a post).
+- *single.php* - Used when the content is being displayed on an "single" page (a page showing only one post).
+- *search.php* - Used when the content is being displayed are search results (a page listing posts matching a user search).
+- *home.php* - Used when the page being displayed is the home page.
diff --git a/wp-content/themes/vanilla/blog-set/excerpt/excerpt-default.html b/wp-content/themes/vanilla/blog-set/excerpt/excerpt-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..327c1bd8d2464fb717b264b04b1548735f9af1fa
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/excerpt/excerpt-default.html
@@ -0,0 +1,30 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+	<div metal:fill-slot="excerpt" id="post-excerpt-${entry/id}" class="hentry excerpt ${entry/class}">
+		<strong class="entry-title"><a href="${entry/permalink}" title="Permanent link to ${entry/title_attribute}" rel="bookmark" rev="post-${entry/id}">${entry/title}</a></strong> <span class="date"><abbr class="published" title="${entry/date_time}">${entry/date}</abbr></span>
+		<p class="categories" tal:condition="entry/categories_list">Posted in ${structure entry/categories_list}</p> 
+		<span class="comments-link" tal:condition="entry/comments_link">${structure entry/comments_link}</span>
+	</div><!-- .excerpt -->
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/excerpt/excerpt-default.php b/wp-content/themes/vanilla/blog-set/excerpt/excerpt-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..48343381d4e6c8d48acf6826a63a67b455cd8fc4
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/excerpt/excerpt-default.php
@@ -0,0 +1,38 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $tpl;
+
+$tpl["excerpt"] = array(
+	"tpl_file" => "excerpt-default.html"
+);
+
+$tpl["entries"][] = array(
+	"id" => get_the_ID(),
+	"class" => sandbox_post_class(false),
+	"permalink" => get_permalink(),
+	"title_attribute" => the_title_attribute('echo=0'),
+	"title" => the_title("", "", false),
+	"categories_list" => get_the_category_list(', '),
+	"date_time" => get_the_time('Y-m-d\TH:i:sO'),
+	"date" => get_the_time('F j, Y'),
+	"comments_link" => vanilla_comments_popup_link(__('No comments', 'carrington'), __('1 comment', 'carrington'), __('% comments', 'carrington'))
+);
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/excerpt/search.html b/wp-content/themes/vanilla/blog-set/excerpt/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..e4e6c2a1bd2c740f9dfe18dafc7f8e3bf3cd4f32
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/excerpt/search.html
@@ -0,0 +1,36 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="excerpt" id="post-search-${entry/id}" class="hentry search ${entry/class}">
+	<h2 class="entry-title"><a href="${entry/permalink}" title="Permanent link to ${entry/title_attribute}" rel="bookmark">${entry/title}</a></h2>
+	<address class="author vcard">
+		${structure entry/author}
+	</address>
+	<span class="ndash">&ndash;</span>
+	<abbr class="published" title="${entry/date_attribute}">${entry/date}</abbr>
+	<div class="entry-content">
+		${structure entry/content}
+	</div><!--.entry-content-->
+</div><!-- .post -->
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/excerpt/search.php b/wp-content/themes/vanilla/blog-set/excerpt/search.php
new file mode 100644
index 0000000000000000000000000000000000000000..4f6561e690a21804cc51d5ab5a2d559d5768ab56
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/excerpt/search.php
@@ -0,0 +1,40 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $tpl;
+
+$tpl["excerpt"] = array(
+	"tpl_file" => "search.html"
+);
+
+$author = sprintf(__('<span class="by">By</span> %s', 'carrington'), '<a class="url fn" href="'.get_author_link(false, get_the_author_ID(), $authordata->user_nicename).'" title="View all posts by ' . attribute_escape($authordata->display_name) . '">'.get_the_author().'</a>');
+
+$tpl["entries"][] = array(
+	"id" => get_the_ID(),
+	"class" => sandbox_post_class(false),
+	"permalink" => get_permalink(),
+	"author" => $author,
+	"title_attribute" => the_title_attribute('echo=0'),
+	"title" => the_title("", "", false),
+	"date_time" => get_the_time('Y-m-d\TH:i:sO'),
+	"date" => get_the_time('F j, Y'),
+	"content" => get_the_excerpt()
+);
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/footer/README.txt b/wp-content/themes/vanilla/blog-set/footer/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ed7998adb3147826e83af59bc6f98ee79905e435
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/footer/README.txt
@@ -0,0 +1,36 @@
+## footer/
+
+### Overview
+
+The standard _footer.php_ file (included using the WordPress `get_footer()` function) in Carrington is set up to call the `cfct_footer()` function, which will choose the appropriate footer file from this directory - based on the context of the given page. This can be useful if you want to have pages to have a custom footer, or perhaps a certain category to have a custom footer.
+
+A "default" template is required, and will be used when there are no other templates that match a given comment. This could be because no other templates have been created, or because the context doesn't match the templates that are available.
+
+
+### Supported Override Filenames
+
+- footer-default.php (or default.php)
+- archive.php
+- author.php
+- author-{username}.php
+- category.php
+- cat-{slug}.php
+- home.php
+- page.php
+- role-{rolename}.php
+- search.php
+- single.php
+- tag.php
+- tag-{slug}.php
+
+
+### File Descriptions
+
+Standard context file naming will work for files in this directory. Here are some specific examples.
+
+- *footer-default.php* - Used when there are no other templates that match for a given page/post.
+- *author-{username}.php* - Used when the post/page is authored by a specific user. For example, a template with a file name of _author-jsmith.php_ would be used for a post/page by user _jsmith_. Any WordPres username can take the place of {username} in the file name.
+- *cat-{slug}.php* - Used when a post is in a given category. The category is matched by the "slug" - for example a post in category "General" (with a category slug of "general") could use a template of _cat-general.php_.
+- *home.php* - Used for the home page.
+- *page.php* - Used for pages that do not match any other contextual templates.
+
diff --git a/wp-content/themes/vanilla/blog-set/footer/footer-default.html b/wp-content/themes/vanilla/blog-set/footer/footer-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..5fef4cc01aff147b02c886e51125aa08a46fef1c
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/footer/footer-default.html
@@ -0,0 +1,33 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="ft" tal:omit-tag="">
+		<div id="ft" class="yui-d0">
+			<div class="wrapper">		
+				<span metal:define-slot="footer_nav" />
+				<span metal:define-slot="footer" />
+			</div><!--.wrapper-->
+		</div><!--#ft -->
+</div>
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/footer/footer-default.php b/wp-content/themes/vanilla/blog-set/footer/footer-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..756d225671c802ac1b5c7d9cc302901e09ff236d
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/footer/footer-default.php
@@ -0,0 +1,26 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $tpl;
+$tpl["footer"] = array(
+	"tpl_file" => "footer-default.html"
+);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/forms/README.txt b/wp-content/themes/vanilla/blog-set/forms/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ee7b7cc18653d4817f22f3efcc1ceb5a419c630b
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/forms/README.txt
@@ -0,0 +1,22 @@
+## forms/
+
+### Overview
+
+This directory holds forms that may be used in various places throughout the theme. 
+
+These forms can be included in other theme files using the following code:
+
+	<?php cfct_form('comment'); ?>
+
+Where `comment.php` is the name of the file in the _forms/_ directory that you want to include.
+
+
+### Supported Override Filenames
+
+- (none)
+
+
+### File Descriptions
+
+Included by default are the "post comment" form (_comment.php_) and the "search" form (_search.php_). Create as many forms as you like and store them here to keep them organized.
+
diff --git a/wp-content/themes/vanilla/blog-set/forms/comment.html b/wp-content/themes/vanilla/blog-set/forms/comment.html
new file mode 100644
index 0000000000000000000000000000000000000000..b479abea913863bd6630bbd9644a04d2f78d268c
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/forms/comment.html
@@ -0,0 +1,73 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+	
+	<div metal:fill-slot="comment_form" tal:condition="vanilla/comment_form/open" tal:omit-tag="">
+		<!-- slot: comment_form -->
+		<p tal:condition="vanilla/comment_form/must_login" id="you-must-be-logged-in-to-comment">${vanilla/comment_form/logged_in_message}</p>
+		
+		<span tal:condition="php: NOT vanilla.comment_form.registered" tal:comment="Display if registration is not required." tal:omit-tag="">
+			<form action="${vanilla/wpurl}/wp-comments-post.php" method="post" id="comment-form">
+				<div id="comment-form-comment" class="section">
+					<label id="respond" for="comment">${vanilla/comment_form/comment_label}</label>
+					<div>
+						<textarea name="comment" id="comment" rows="8" cols="40" tabindex="1"></textarea>
+						<p id="some-html-is-ok">
+							<abbr title="${vanilla/comment_form/allowed_html_attribute}">${vanilla/comment_form/allowed_html_message}</abbr>
+						</p>
+					</div>
+				</div>
+			
+				<p tal:condition="vanilla/comment_form/logged_in" class="logged-in section" tal:comment="Display if user is logged in.">
+					${structure vanilla/comment_form/logged_in_as}
+					<a href="${vanilla/wpurl}/wp-login.php?action=logout" title="${vanilla/comment_form/log_out_attribute}">${vanilla/comment_form/log_out_message}</a>
+				</p>
+				
+				<span tal:condition="php: vanilla.comment_form.logged_in == '0'" tal:comment="Display if user is not logged in." tal:omit-tag="">
+					<p id="comment-form-name" class="section">
+						<label for="author">${vanilla/comment_form/author_label}</label>
+						<input type="text" name="author" id="author" value="${vanilla/comment_form/author_value}" size="22" tabindex="2" />
+						<span tal:condition="vanilla/comment_form/required" class="note">${vanilla/comment_form/required_message}</span>
+					</p><!--/name-->
+					<p id="comment-form-email" class="section">
+						<label for="email">${vanilla/comment_form/email_label}</label>
+						<input type="text" name="email" id="email" value="${vanilla/comment_form/email_value}" size="22" tabindex="3" />
+						<span tal:condition="vanilla/comment_form/required" class="note">${vanilla/comment_form/required_email_message}</span>
+						<span tal:condition="php: NOT vanilla.comment_form.required" class="note">${vanilla/comment_form/email_message}</span>
+					</p><!--/email-->
+					<p id="comment-form-url" class="section">
+						<label title="${vanilla/comment_form/url_attribute}" for="url">${vanilla/comment_form/url_label}</label>
+						<input type="text" name="url" id="url" value="${vanilla/comment_form/url_value}" size="22" tabindex="4" />
+					</p><!--/url-->
+				</span>
+		
+				<p class="actions">
+					<input name="submit" type="submit" id="submit" value="${vanilla/comment_form/submit_text}" tabindex="5" />
+					<span id="comment-form-trackback">${structure vanilla/comment_form/trackback_message}</span>
+					<input type="hidden" name="comment_post_ID" value="${vanilla/comment_form/post_id}" />
+				</p><!--/controls-->
+			</form>
+		</span>
+		<!-- /slot: comment_form -->
+	</div>
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/forms/comment.php b/wp-content/themes/vanilla/blog-set/forms/comment.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6ffb6eb5cd882b042c40b11ec3cff7c43fd621c
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/forms/comment.php
@@ -0,0 +1,57 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $post, $user_ID, $user_identity, $comment_author, $comment_author_email, $comment_author_url, $tpl;
+
+$req = get_option('require_name_email');
+
+do_action('comment_form', $post->ID);
+
+$tpl[] = array(
+	"wpurl" => get_bloginfo('wpurl')
+);
+
+$tpl["comment_form"] = array(
+	"tpl_file" => "comment.html",
+	"open" => ($post->comment_status) ? 1 : 0,
+	"logged_in" => ($user_ID) ? 1 : 0,
+	"must_login" => (get_option('comment_registration') && !$user_ID) ? 1 : 0,
+	"logged_in_message" => sprintf(__('You must be <a href="%s">logged in</a> to post a comment.', 'carrington'), get_bloginfo('wpurl').'/wp-login.php?redirect_to='.get_permalink()),
+	"comment_label" => __('Post a comment', 'carrington'),
+	"allowed_html_attribute" => sprintf(__('You can use: %s', 'carrington'), allowed_tags()),
+	"allowed_html_message" => __('Some HTML is OK', 'carrington'),
+	"logged_in_as" => sprintf(__('Logged in as <a href="%s">%s</a>.', 'carrington'), get_bloginfo('wpurl').'/wp-admin/profile.php', $user_identity),
+	"log_out_attribute" => __('Log out of this account', 'carrington'),
+	"log_out_message" => __('Logout &rarr;', 'carrington'),
+	"author_label" => __('Name', 'carrington'),
+	"author_value" => $comment_author,
+	"required" => ($req) ? 1 : 0,
+	"required_message" => __('(required)', 'carrington'),
+	"email_label" => __('Email', 'carrington'),
+	"email_value" => $comment_author_email,
+	"required_email_message" => __('(required, but never shared)', 'carrington'),
+	"email_message" => __('(never shared)', 'carrington'),
+	"url_attribute" => __('Your website address', 'carrington'),
+	"url_label" => __('Web', 'carrington'),
+	"url_value" => $comment_author_url,
+	"submit_text" => __('Post comment', 'carrington'),
+	"trackback_message" => sprintf(__('or, reply to this post via <a rel="trackback" href="%s">trackback</a>.', 'carrington'), get_trackback_url()),
+	"post_id" => $post->ID
+);
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/forms/search.php b/wp-content/themes/vanilla/blog-set/forms/search.php
new file mode 100644
index 0000000000000000000000000000000000000000..f715c298002996b8c2570eb3592bc6e1f38c51cb
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/forms/search.php
@@ -0,0 +1,30 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $tpl;
+
+$tpl["search"] = array(
+	"tpl_file" => "search-form.html",
+	"action" => get_bloginfo('home'),
+	"submit_text" => __('Search', 'carrington'),
+	"query" => wp_specialchars(stripslashes($_GET['s']), true)
+);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/header/README.txt b/wp-content/themes/vanilla/blog-set/header/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..65bbea7854416f57daa423889516fb2d3b48b616
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/header/README.txt
@@ -0,0 +1,36 @@
+## header/
+
+### Overview
+
+The standard _header.php_ file in Carrington is set up to call the `cfct_header()` function, which will choose the appropriate header file from this directory - based on the context of the given page. This can be useful if you want to have pages to have a custom header, or perhaps a certain category to have a custom header.
+
+A "default" template is required, and will be used when there are no other templates that match a given context. This could be because no other templates have been created, or because the context doesn't match the templates that are available.
+
+
+### Supported Override Filenames
+
+- header-default.php (or default.php)
+- archive.php
+- author.php
+- author-{username}.php
+- category.php
+- cat-{slug}.php
+- home.php
+- page.php
+- role-{rolename}.php
+- search.php
+- single.php
+- tag.php
+- tag-{slug}.php
+
+
+### File Descriptions
+
+Standard context file naming will work for files in this directory. Here are some specific examples.
+
+- *header-default.php* - Used when there are no other templates that match for a given page/post.
+- *author-{username}.php* - Used when the post/page is authored by a specific user. For example, a template with a file name of _author-jsmith.php_ would be used for a post/page by user _jsmith_. Any WordPress username can take the place of {username} in the file name.
+- *cat-{slug}.php* - Used when a post is in a given category. The category is matched by the "slug" - for example a post in category "General" (with a category slug of "general") could use a template of _cat-general.php_.
+- *home.php* - Used for the home page.
+- *page.php* - Used for pages that do not match any other contextual templates.
+
diff --git a/wp-content/themes/vanilla/blog-set/header/header-default.html b/wp-content/themes/vanilla/blog-set/header/header-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..e90553cb959c0564f5ac4e5567e7c235d93c3b97
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/header/header-default.html
@@ -0,0 +1,54 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="head" tal:omit-tag="">
+	<title tal:content="php:hybrid_document_title()">Title</title>
+	<meta http-equiv="Content-Type" content="${vanilla/header/content_type}" />
+	<link rel="stylesheet" type="text/css" media="screen" href="${vanilla/header/stylesheet_url}" />
+	<link rel="stylesheet" type="text/css" media="screen, print, handheld" href="${vanilla/header/template_url}css/typography.css" />
+	${structure vanilla/header/ie_cond_stylesheet}
+	<span metal:define-slot="hybrid_head" />
+	<span metal:define-slot="wp_head" />
+</div>
+
+
+<div metal:fill-slot="hd" tal:omit-tag="">
+		<div id="hd" class="yui-d0">
+			<div class="wrapper">
+				<span metal:define-slot="header_nav" />
+				<span metal:define-slot="header" />
+				<span metal:define-slot="main_menu" />
+			</div><!-- .wrapper -->
+		</div><!-- #hd -->
+</div>
+
+
+<div metal:fill-slot="sub_header" tal:omit-tag="">
+		<div id="sub-header" class="yui-d0">
+			<div class="wrapper">
+				<span metal:define-slot="sub_menu" />
+			</div><!-- .wrapper -->
+		</div><!--#sub-header-->
+</div>
+		
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/header/header-default.php b/wp-content/themes/vanilla/blog-set/header/header-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..63f43a20e71a963e47b999488150f1c7d623fa72
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/header/header-default.php
@@ -0,0 +1,52 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+// Default YUI Grid settings
+global $vnl_width, $vnl_nesting, $vnl_template, $vnl_utility, $tpl;
+$vnl_width = get_option("vnl_grid_width");
+$vnl_nesting = get_option("vnl_grid_nesting");
+$vnl_template = get_option("vnl_grid_template");
+$vnl_utility = get_option("vnl_utility_nesting");
+
+$language_attributes = "";
+function redir_language_attributes($out){
+	global $language_attributes;
+	$language_attributes = $out;
+	return "";
+}
+add_filter('language_attributes', 'redir_language_attributes');
+language_attributes();
+
+$set = vanilla_get_option('vnl_tpl_set').'-set/';
+
+$ie_cond_stylesheet = "<!--[if lt IE 8]>\n" .
+	'<link rel="stylesheet" href="'.get_bloginfo('template_url').'/'.$set.'ie.css" type="text/css" media="screen" charset="utf-8" />' . "\n" .
+	"<![endif]-->\n";
+
+$tpl["header"] = array(
+	"tpl_file" => "header-default.html",
+	"language_attributes" => "", //$language_attributes,
+	"content_type" => get_bloginfo('html_type')."; charset=".get_bloginfo('charset'),
+	"stylesheet_url" => str_replace("style.css", "", get_bloginfo('stylesheet_url')).$set.'style.css',
+	"template_url" => get_bloginfo('template_url').'/'.$set,
+	"ie_cond_stylesheet" => $ie_cond_stylesheet
+);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/hooks.html b/wp-content/themes/vanilla/blog-set/hooks.html
new file mode 100644
index 0000000000000000000000000000000000000000..9912982b662fe664b0da615ef998425bd8a3f783
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/hooks.html
@@ -0,0 +1,172 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<metal:block define-macro="loader">
+	<metal:block fill-slot="hybrid_head">
+		<!-- hook: hybrid_head -->
+		${php:hybrid_head()}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="wp_head">
+		<!-- hook: wp_head -->
+		${php:wp_head()}
+	</metal:block>
+
+
+	<metal:block fill-slot="before_page">
+		<!-- hook: before_page -->
+		${php:vanilla_before_page()}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="before_hd">
+		<!-- hook: before_hd -->
+		${php:vanilla_before_hd()}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="before_bd">
+		<!-- hook: before_bd -->
+		${php:vanilla_before_bd()}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="before_ft">
+		<!-- hook: before_ft -->
+		${php:vanilla_before_ft()}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="after_ft">
+		<!-- hook: after_ft -->
+		${php:vanilla_after_ft()}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="after_page">
+		<!-- hook: after_page -->
+		${php:vanilla_after_page()}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="wp_footer">
+		<!-- hook: wp_footer -->
+		${php:wp_footer()}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="header_nav">
+		<!-- hook: header_nav -->
+		${php:vanilla_widget_block('Header Nav')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="header">
+		<!-- hook: header -->
+		${php:vanilla_widget_block('Header')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="main_menu">
+		<!-- hook: main_menu -->
+		${php:vanilla_widget_block('Main Menu')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="sub_menu">
+		<!-- hook: main_menu -->
+		${php:vanilla_widget_block('Sub Menu')}
+	</metal:block>
+
+
+	<metal:block fill-slot="breadcrumbs">
+		<!-- hook: breadcrumbs -->
+		${php:vanilla_widget_block('Breadcrumbs')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="content_top">
+		<!-- hook: content_top -->
+		${php:vanilla_widget_block('Content Top')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="content_middle">
+		<!-- hook: content_middle -->
+		${php:vanilla_widget_block('Content Middle')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="content_bottom">
+		<!-- hook: content_bottom -->
+		${php:vanilla_widget_block('Content Bottom')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="primary_sidebar">
+		<!-- hook: primary_sidebar -->
+		${php:vanilla_widget_block('Primary Sidebar')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="secondary_sidebar">
+		<!-- hook: secondary_sidebar -->
+		${php:vanilla_widget_block('Secondary Sidebar')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="footer_nav">
+		<!-- hook: footer_nav -->
+		${php:vanilla_widget_block('Footer Nav')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="footer">
+		<!-- hook: footer -->
+		${php:vanilla_widget_block('Footer')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="utility_1">
+		<!-- hook: utility_1 -->
+		${php:vanilla_widget_block('Utility 1')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="utility_2">
+		<!-- hook: utility_2 -->
+		${php:vanilla_widget_block('Utility 2')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="utility_3">
+		<!-- hook: utility_3 -->
+		${php:vanilla_widget_block('Utility 3')}
+	</metal:block>
+	
+	
+	<metal:block fill-slot="utility_4">
+		<!-- hook: utility_4 -->
+		${php:vanilla_widget_block('Utility 4')}
+	</metal:block>
+	
+</metal:block>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/loop/README.txt b/wp-content/themes/vanilla/blog-set/loop/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..364a500667e246b9e95eaaa6b787fc0d2995abc7
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/README.txt
@@ -0,0 +1,35 @@
+## loop/
+
+### Overview
+
+This directory contains files that do "the loop". Generally the files in this directory will be included in a file from the _posts/_ or _pages/_ directory, and they will in turn include templates from the _content/_ or _excerpt/_ directories.
+
+For example, you might want posts on a search results page to display differently that posts on an archive page. Here is how that page would be built:
+
+1. A page is identified as a search page - Carrington looks for a _posts/search.php_ file and will fall back on a _posts/default.php_ file if none is found.
+2. The _posts/search.php_ file will include the header, footer and sidebar - and will also include a call to `cfct_loop()` to include a loop.
+3. Since we don't want to show the full posts in search results, the _posts/search.php_ explicitly asks for a file from the _excerpt/_ directory to display the posts in the search results. It will use _excerpt/search.php_ if that file exists, or fall back on _excerpt/default.php_ if the custom file does not exist.
+
+
+### Supported Override Filenames
+
+- loop-default.php (or default.php)
+- archive.php
+- author.php
+- author-{username}.php
+- category.php
+- cat-{slug}.php
+- home.php
+- page.php
+- role-{rolename}.php
+- search.php
+- single.php
+- tag.php
+- tag-{slug}.php
+
+
+### File Descriptions
+
+Standard context file naming will work for files in this directory. Here are some specific examples.
+
+Included is the "default" loop (_default.php_) and the "search" loop (_search.php_). Create as many loops as you like to create custom displays for various pages.
diff --git a/wp-content/themes/vanilla/blog-set/loop/archive.html b/wp-content/themes/vanilla/blog-set/loop/archive.html
new file mode 100644
index 0000000000000000000000000000000000000000..d838798da22b18ebcf047af7190b5ff3ca101b10
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/archive.html
@@ -0,0 +1,35 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="loop" tal:omit-tag="">
+	<ol class="archive">
+		<li tal:repeat="entry vanilla/entries">
+			<span tal:define="file php:vanilla_get_template('excerpt/' . vanilla['excerpt']['tpl_file'])"
+				  metal:use-macro="${file}/loader" tal:comment="The excerpt slot." />
+			<span metal:define-slot="excerpt" />
+			<div id="post-content-${entry/id}-target"></div>
+		</li>
+	</ol><!-- .archive -->
+</div>
+
+</div>
diff --git a/wp-content/themes/vanilla/blog-set/loop/archive.php b/wp-content/themes/vanilla/blog-set/loop/archive.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c91700ad9fa20f43417c680337cc48158df4e9f
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/archive.php
@@ -0,0 +1,34 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $tpl;
+
+$tpl["loop"] = array(
+	"tpl_file" => "archive.html"
+);
+
+if (have_posts()) {
+	while (have_posts()) {
+		the_post();
+		cfct_excerpt();
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/loop/home.html b/wp-content/themes/vanilla/blog-set/loop/home.html
new file mode 100644
index 0000000000000000000000000000000000000000..ecafb0117fa9d06724bcab62e9e23f91eb3f9455
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/home.html
@@ -0,0 +1,48 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="loop" tal:omit-tag="">
+	<!-- hook: loop -->
+	<span tal:repeat="entry vanilla/entries" tal:omit-tag="">
+		<span tal:condition="php: repeat.entry.number == '1'" tal:omit-tag="">
+			<span tal:define="file php:vanilla_get_template('content/' . vanilla['content']['tpl_file'])"
+				  metal:use-macro="${file}/loader" tal:comment="The content slot." />
+			<span metal:define-slot="content" />
+		</span>
+	</span>
+  
+	<span metal:define-slot="content_middle" />
+  
+	<ol class="archive">
+		<span tal:repeat="entry vanilla/entries" tal:omit-tag="">
+			<li tal:condition="php: repeat.entry.number GT '1'">
+				<span tal:define="file php:vanilla_get_template('excerpt/' . vanilla['excerpt']['tpl_file'])"
+					  metal:use-macro="${file}/loader" tal:comment="The excerpt slot." />
+				<span metal:define-slot="excerpt" />
+				<div id="post-content-${entry/id}-target"></div>
+			</li>
+		</span>
+	</ol><!-- .archive -->
+</div>
+
+</div>
diff --git a/wp-content/themes/vanilla/blog-set/loop/home.php b/wp-content/themes/vanilla/blog-set/loop/home.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce2f313b33a288ad2b1f4e5184510d63df7648ab
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/home.php
@@ -0,0 +1,36 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $tpl;
+$tpl["loop"] = array(
+	"tpl_file" => "home.html"
+);
+
+if (have_posts()) {
+	
+	the_post();
+	cfct_content();
+	
+	while (have_posts()) {
+		the_post();
+		cfct_excerpt();
+	}
+}
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/loop/loop-default.html b/wp-content/themes/vanilla/blog-set/loop/loop-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..d838798da22b18ebcf047af7190b5ff3ca101b10
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/loop-default.html
@@ -0,0 +1,35 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="loop" tal:omit-tag="">
+	<ol class="archive">
+		<li tal:repeat="entry vanilla/entries">
+			<span tal:define="file php:vanilla_get_template('excerpt/' . vanilla['excerpt']['tpl_file'])"
+				  metal:use-macro="${file}/loader" tal:comment="The excerpt slot." />
+			<span metal:define-slot="excerpt" />
+			<div id="post-content-${entry/id}-target"></div>
+		</li>
+	</ol><!-- .archive -->
+</div>
+
+</div>
diff --git a/wp-content/themes/vanilla/blog-set/loop/loop-default.php b/wp-content/themes/vanilla/blog-set/loop/loop-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..1f7325dcbe1ce976d987f14bb0ab04135d7a9f76
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/loop-default.php
@@ -0,0 +1,39 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+// Alister - added to handle Thematic-naming-convention of options/variables
+global $options, $tpl;
+foreach ($options as $value) {
+	$$value['id'] = (get_settings( $value['id'] ) === FALSE) ? $value['std'] : get_settings( $value['id'] );
+}
+
+$tpl["loop"] = array(
+	"tpl_file" => "loop-default.html"
+);
+
+if (have_posts()) {
+	
+	while (have_posts()) {
+		the_post();
+		cfct_content();
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/loop/search.html b/wp-content/themes/vanilla/blog-set/loop/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..7b1405a019290c0aed537871b272f198f02bfd29
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/search.html
@@ -0,0 +1,36 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="loop" tal:omit-tag="">
+	<span tal:condition="vanilla/loop/have_posts" tal:omit-tag="">
+		<span tal:repeat="entry vanilla/entries" tal:omit-tag="">
+			<span tal:define="file php:vanilla_get_template('excerpt/' . vanilla['excerpt']['tpl_file'])"
+				  metal:use-macro="${file}/loader" tal:comment="The excerpt slot." />
+			<span metal:define-slot="excerpt" />
+		</span>
+	</span>
+	
+	<span metal:define-slot="search_form" tal:condition="not: vanilla/loop/have_posts" />
+</div>
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/loop/search.php b/wp-content/themes/vanilla/blog-set/loop/search.php
new file mode 100644
index 0000000000000000000000000000000000000000..720c1d2605d5d1cb3446aef22e46459f19b93d89
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/loop/search.php
@@ -0,0 +1,46 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $tpl;
+
+$search_title = false;
+$search_message = false;
+
+if (have_posts()) {
+	while (have_posts()) {
+		the_post();
+		cfct_excerpt();
+	}
+} else {
+
+	$search_title = __('Nothing Found', 'thematic');
+	$search_message = __('Sorry, but nothing matched your search criteria. Please try again with some different keywords.', 'thematic');
+	
+	cfct_form('search');
+}
+
+$tpl["loop"] = array(
+	"tpl_file" => "search.html",
+	"have_posts" => (have_posts()) ? 1 : 0,
+	"search_title" => $search_title,
+	"search_message" =>  $search_message
+);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/misc/README.txt b/wp-content/themes/vanilla/blog-set/misc/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cf1daf1d761716a3cce5caa2e92eb33ed7480676
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/misc/README.txt
@@ -0,0 +1,23 @@
+## misc/
+
+### Overview
+
+This directory holds page fragments and snippets that you may want to use across multiple template files.
+
+These files can be included in other theme files using the following code:
+
+	<?php cfct_misc('nav-posts'); ?>
+
+Where `nav-posts.php` is the name of the file in the _misc/_ directory that you want to include.
+
+
+### Supported Override Filenames
+
+- (none)
+
+
+### File Descriptions
+
+- *banner.php* - This is used by Carrington to display a message that is passed to it.
+- *nav-posts.php* - This is standard paging for posts pages.
+
diff --git a/wp-content/themes/vanilla/blog-set/misc/banner.php b/wp-content/themes/vanilla/blog-set/misc/banner.php
new file mode 100644
index 0000000000000000000000000000000000000000..566c7b4f0c42ff43d49c970c9bbe56462f62371b
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/misc/banner.php
@@ -0,0 +1,21 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+?>
+<div class="cfct_banner"><?php echo $str; ?></div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/misc/nav-posts.html b/wp-content/themes/vanilla/blog-set/misc/nav-posts.html
new file mode 100644
index 0000000000000000000000000000000000000000..da96c79304b9249a55afdc07a8f00f37a5c2b47e
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/misc/nav-posts.html
@@ -0,0 +1,30 @@
+<tal:block replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</tal:block>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+	
+	<div class="pagination" metal:fill-slot="nav_posts">
+	<!-- hook: nav_posts -->
+		<span class="previous">${structure vanilla/nav_posts/next_posts_link}</span>
+		<span class="next">${structure vanilla/nav_posts/previous_posts_link}</span>
+	</div>
+	
+</div>
diff --git a/wp-content/themes/vanilla/blog-set/misc/nav-posts.php b/wp-content/themes/vanilla/blog-set/misc/nav-posts.php
new file mode 100644
index 0000000000000000000000000000000000000000..380bed76658eda65ded4d00ccc52d919916eeb63
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/misc/nav-posts.php
@@ -0,0 +1,24 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+global $tpl;
+$tpl["nav_posts"] = array(
+	"next_posts_link" => get_next_posts_link(__('&laquo; Older posts', 'carrington')),
+	"previous_posts_link" => get_previous_posts_link(__('Newer posts &raquo;', 'carrington'))
+);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/pages/README.txt b/wp-content/themes/vanilla/blog-set/pages/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6bbf24f7cee18923490c75fe397a19e30f479a42
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/pages/README.txt
@@ -0,0 +1,41 @@
+## pages/
+
+### Overview
+
+WP doesn't support page templates in nested folders like this one, so page organization isn't as clean as we'd like.
+
+Create a page in the theme root:
+
+File name: page-example.php
+
+**Note:** We recommend prefixing all of your page files with 'page-' so that they are easily sorted together in your theme directory.
+
+File contents:
+
+	<?php
+	
+	/*
+	Template Name: Example Template
+	*/
+	
+	if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+	if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+	
+	cfct_page('example');
+	
+	?>
+
+This will then load 'example.php' from the _pages/_ directory, keeping all of your actual page code nicely organized in one spot.
+
+You can also add your page code to the page-example.php file you create in the theme root, but we're hoping to get support for pages in a sub-directory in a future version of WordPress so we are starting with what we consider to be a "proper" organization structure now.
+
+
+### Supported Override Filenames
+
+- pages-default.php (or default.php)
+
+
+### File Descriptions
+
+A "default" template is required. You can create other templates as desired.
+
diff --git a/wp-content/themes/vanilla/blog-set/pages/pages-default.html b/wp-content/themes/vanilla/blog-set/pages/pages-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..3a3b697f8523c5e6ce09a5cf9cbb0b82f0b1195f
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/pages/pages-default.html
@@ -0,0 +1,93 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="page" tal:omit-tag="">
+
+<span tal:define="file php:vanilla_get_template('hooks.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the 'hook' slots." />
+<span tal:define="file php:vanilla_get_template('header/' . vanilla['header']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the header slots." />
+<span tal:define="file php:vanilla_get_template('vanilla-utility.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the utility block slots." />
+<span tal:define="file php:vanilla_get_template('footer/' . vanilla['footer']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the footer slots." />
+
+<!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"> <!-- have to put language back in here. -->
+<head profile="http://gmpg.org/xfn/11">
+	<span metal:define-slot="head" />
+</head>
+<body class="${vanilla/page/body_class}">
+
+	<span metal:define-slot="before_page" />
+
+	<div id="page">
+	
+		<span metal:define-slot="before_hd" />
+		<span metal:define-slot="hd" />
+		<span metal:define-slot="sub_header" />
+		<span metal:define-slot="before_bd" />
+		
+		<div id="bd" class="${vanilla/page/bd_class} hfeed">
+
+			<span metal:define-slot="breadcrumbs" />
+				
+			<div tal:define="file php:vanilla_get_template('vanilla-grid.html')"
+				 metal:use-macro="${file}/vanilla_grid" tal:omit-tag="">
+				<div metal:fill-slot="content" tal:omit-tag="">
+					<span metal:define-slot="content_top" />
+					
+					<span tal:repeat="entry vanilla/entries" tal:omit-tag="">
+						<span tal:condition="php: repeat.entry.number == '1'" tal:omit-tag="">
+							<span tal:define="file php:vanilla_get_template('content/' . vanilla['content']['tpl_file'])"
+								  metal:use-macro="${file}/loader" tal:comment="The content slot." />
+							<span tal:define="file php:vanilla_get_template('comments/' . vanilla['comments']['tpl_file'])"
+								  metal:use-macro="${file}/loader" tal:comment="The comments slot." />
+							
+							<span metal:define-slot="content" />
+							<div id="comments">
+								<span metal:define-slot="comments" />
+							</div><!--#comments-->
+						</span>
+					</span>
+	
+					<span metal:define-slot="content_bottom" />
+				</div>
+			</div>
+			
+		</div><!-- #bd-->
+		
+		<span metal:define-slot="utility" />
+		<span metal:define-slot="before_ft" />
+		<span metal:define-slot="ft" />
+		<span metal:define-slot="after_ft" />
+		
+	</div><!--#page-->
+	
+	<span metal:define-slot="after_page" />
+	<span metal:define-slot="wp_footer" />
+
+</body>
+</html>
+
+</div>
+
+<span metal:use-macro="page" comment="Don't remove this, or you get... nothing!" />
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/pages/pages-default.php b/wp-content/themes/vanilla/blog-set/pages/pages-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..21db9239f5c3d3571fdf2f21609f27f645a13e94
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/pages/pages-default.php
@@ -0,0 +1,56 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $vnl_width, $vnl_nesting, $vnl_template, $vnl_utility, $tpl;
+$vnl_width =  (isset($vnl_width))  ? $vnl_width  : vanilla_get_option("vnl_grid_width");
+$vnl_nesting =  (isset($vnl_nesting))  ? $vnl_nesting  : vanilla_get_option("vnl_grid_nesting");
+$vnl_template = (isset($vnl_template)) ? $vnl_template : vanilla_get_option("vnl_grid_template");
+$vnl_utility =  (isset($vnl_utility))  ? $vnl_utility  : vanilla_get_option("vnl_utility_nesting");
+// Page-specific overides
+//$vnl_width = "yui-d3";
+//$vnl_nesting = "yui-gf";
+//$vnl_template = "yui-t2";
+//$vnl_utility = "yui-bg";
+
+// create a new PHPTAL template object 
+$template = new PHPTAL(vanilla_get_template('pages/pages-default.html') );
+$template->cleanUpCache();
+
+$tpl["page"] = array(
+	"width" => $vnl_width,
+	"nesting" => $vnl_nesting,
+	"template" => $vnl_template,
+	"utility" => $vnl_utility,
+	"body_class" => sandbox_body_class(false),
+	"bd_class" => $vnl_width." ".$vnl_template
+);
+
+get_header();
+
+cfct_loop();
+
+cfct_comments();
+
+get_footer();
+
+// Execute the PHPTAL template
+vanilla_output_page($template);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/README.txt b/wp-content/themes/vanilla/blog-set/posts/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..66fe8dd7f9eb5059c958cb6f87ea5cb0ca5e0541
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/README.txt
@@ -0,0 +1,46 @@
+## posts/
+
+### Overview
+
+The files in this directory are "top level" templates for pages in WordPress that show multiple posts at once. These files should call `the_header()`, `the_sidebar()`, `the_footer()` and `cfct_loop()` to include the other parts of the page.
+
+The file from this directory that will be used is chosen based on the current page context.
+
+You can explicitly decide which _loop/_ to use from these templates by passing it in as so:
+
+	cfct_template_file('loop', 'example');
+
+which would use _loop/example.php_ for the loop.
+
+A "default" template is required, and will be used when there are no other templates that match a given context. This could be because no other templates have been created, or because the context doesn't match the templates that are available.
+
+
+### Supported Override Filenames
+
+- posts-default.php (or default.php)
+- archive.php
+- author.php
+- author-{username}.php
+- category.php
+- cat-{slug}.php
+- home.php
+- page.php
+- role-{rolename}.php
+- search.php
+- single.php
+- tag.php
+- tag-{slug}.php
+
+
+### File Descriptions
+
+Standard context file naming will work for files in this directory. Here are some specific examples.
+
+- *posts-default.php* - Used when there are no other templates that match for a given context.
+- *author-{username}.php* - Used to show posts authored by a specific user. For example, a template with a file name of _author-jsmith.php_ would be used posts by user _jsmith_. Any WordPress username can take the place of {username} in the file name.
+- *cat-{slug}.php* - Used to show posts in a given category. The category is matched by the "slug" - for example posts in category "General" (with a category slug of "general") could use a template of _cat-general.php_.
+- *tag-{slug}.php* - Used to show posts for a given tag. The tag is matched by the "slug" - for example a post tagged with "News" (with a tag slug of "news") could use a template of _tag-news.php_.
+- *author.php* - Used for showing posts by an author.
+- *category.php* - Used for showing posts by category.
+- *search.php* - Used for showing search results.
+- *tag.php* - Used for showing posts by tag.
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/author.php b/wp-content/themes/vanilla/blog-set/posts/author.php
new file mode 100644
index 0000000000000000000000000000000000000000..5c0599b34b20d02aa4b97f8717b5d93346f9f264
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/author.php
@@ -0,0 +1,67 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $authordata;
+
+get_header();
+?>
+<div id="content">
+<?php
+
+if (have_posts()) {
+	while (have_posts()) {
+		the_post();
+?>
+
+	<h1 class="page-title"><?php printf(__('Posts by: <a href="%s">%s</a>', 'carrington'), get_author_posts_url($authordata->ID), get_author_name($authordata->ID)); ?></h1>
+
+<?php
+		if (!empty($bio)) {
+?>
+
+	<div class="description author-bio">
+
+		<h2><?php printf(__('About %s', 'carrington'), get_author_name($authordata->ID)); ?></h2>
+	
+<?php 
+			echo apply_filters('the_content', get_the_author_description()); 
+?>
+	
+	</div>
+
+<?php
+		}
+		break;
+	}
+}
+rewind_posts();
+
+cfct_loop();
+cfct_misc('nav-posts');
+?>
+
+</div><!--#content-->
+<?php
+
+get_sidebar();
+
+get_footer();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/category.html b/wp-content/themes/vanilla/blog-set/posts/category.html
new file mode 100644
index 0000000000000000000000000000000000000000..acebb229c98c675a4acbc16379e2fd2c40ef508e
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/category.html
@@ -0,0 +1,88 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="page" tal:omit-tag="">
+
+<span tal:define="file php:vanilla_get_template('hooks.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the 'hook' slots." />
+<span tal:define="file php:vanilla_get_template('header/' . vanilla['header']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the header slots." />
+<span tal:define="file php:vanilla_get_template('loop/' . vanilla['loop']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the loop slots." />
+<span tal:define="file php:vanilla_get_template('misc/nav-posts.html')" 
+	  metal:use-macro="${file}/loader" tal:comment="The nav_posts slot." />
+<span tal:define="file php:vanilla_get_template('vanilla-utility.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the utility block slots." />
+<span tal:define="file php:vanilla_get_template('footer/' . vanilla['footer']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the footer slots." />
+
+<!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"> <!-- have to put language back in here. -->
+<head profile="http://gmpg.org/xfn/11">
+	<span metal:define-slot="head" />
+</head>
+<body class="${vanilla/page/body_class}">
+
+	<span metal:define-slot="before_page" />
+
+	<div id="page">
+	
+		<span metal:define-slot="before_hd" />
+		<span metal:define-slot="hd" />
+		<span metal:define-slot="sub_header" />
+		<span metal:define-slot="before_bd" />
+		
+		<div id="bd" class="${vanilla/page/bd_class} hfeed">
+
+			<span metal:define-slot="breadcrumbs" />
+				
+			<div tal:define="file php:vanilla_get_template('vanilla-grid.html')"
+				 metal:use-macro="${file}/vanilla_grid" tal:omit-tag="">
+				<div metal:fill-slot="content" tal:omit-tag="">
+					<span metal:define-slot="content_top" />
+					
+					<h1 class="page-title">${structure vanilla/page/cat_title}</h1>
+					<div class="description" tal:condition="vanilla/page/cat_description">${structure vanilla/page/cat_description}</div>
+					
+					<span metal:define-slot="loop" />
+					<span metal:define-slot="nav_posts" />
+					<span metal:define-slot="content_bottom" />
+				</div>
+			</div>
+			
+		</div><!-- #bd-->
+		
+		<span metal:define-slot="utility" />
+		<span metal:define-slot="before_ft" />
+		<span metal:define-slot="ft" />
+		<span metal:define-slot="after_ft" />
+		
+	</div><!--#page-->
+	
+	<span metal:define-slot="after_page" />
+	<span metal:define-slot="wp_footer" />
+
+</body>
+</html>
+
+</div>
+
+<span metal:use-macro="page" comment="Don't remove this, or you get... nothing!" />
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/category.php b/wp-content/themes/vanilla/blog-set/posts/category.php
new file mode 100644
index 0000000000000000000000000000000000000000..330e03919888b41e8ba9dfd12a6c17c3a91a0bab
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/category.php
@@ -0,0 +1,60 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $vnl_width, $vnl_nesting, $vnl_template, $vnl_utility, $tpl;
+$vnl_width =  (isset($vnl_width))  ? $vnl_width  : vanilla_get_option("vnl_grid_width");
+$vnl_nesting =  (isset($vnl_nesting))  ? $vnl_nesting  : vanilla_get_option("vnl_grid_nesting");
+$vnl_template = (isset($vnl_template)) ? $vnl_template : vanilla_get_option("vnl_grid_template");
+$vnl_utility =  (isset($vnl_utility))  ? $vnl_utility  : vanilla_get_option("vnl_utility_nesting");
+// Page-specific overides
+//$vnl_width = "yui-d3";
+//$vnl_nesting = "yui-gd";
+//$vnl_template = "yui-t2";
+//$vnl_utility = "yui-bg";
+
+// create a new PHPTAL template object 
+$template = new PHPTAL( vanilla_get_template('posts/category.html') );
+$template->cleanUpCache();
+
+$cat_title = '<a href="'.get_category_link(intval(get_query_var('cat'))).'" title="">'.single_cat_title('', false).'</a>';
+$cat_description = category_description();
+
+$tpl["page"] = array(
+	"width" => $vnl_width,
+	"nesting" => $vnl_nesting,
+	"template" => $vnl_template,
+	"utility" => $vnl_utility,
+	"body_class" => sandbox_body_class(false),
+	"bd_class" => "$vnl_width $vnl_template",
+	"cat_title" => $cat_title,
+	"cat_description" => ($cat_description) ? $cat_description : 0
+);
+
+get_header();
+
+cfct_loop();
+cfct_misc('nav-posts');
+
+get_footer();
+
+// Execute the PHPTAL template
+vanilla_output_page($template);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/home.html b/wp-content/themes/vanilla/blog-set/posts/home.html
new file mode 100644
index 0000000000000000000000000000000000000000..3263f5e76f583ff50b85a2d3499707856e292d76
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/home.html
@@ -0,0 +1,84 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="page" tal:omit-tag="">
+
+<span tal:define="file php:vanilla_get_template('hooks.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the 'hook' slots." />
+<span tal:define="file php:vanilla_get_template('header/' . vanilla['header']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the header slots." />
+<span tal:define="file php:vanilla_get_template('loop/' . vanilla['loop']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the loop slots." />
+<span tal:define="file php:vanilla_get_template('misc/nav-posts.html')" 
+	  metal:use-macro="${file}/loader" tal:comment="The nav_posts slot." />
+<span tal:define="file php:vanilla_get_template('vanilla-utility.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the utility block slots." />
+<span tal:define="file php:vanilla_get_template('footer/' . vanilla['footer']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the footer slots." />
+
+<!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"> <!-- have to put language back in here. -->
+<head profile="http://gmpg.org/xfn/11">
+	<span metal:define-slot="head" />
+</head>
+<body class="${vanilla/page/body_class}">
+
+	<span metal:define-slot="before_page" />
+
+	<div id="page">
+	
+		<span metal:define-slot="before_hd" />
+		<span metal:define-slot="hd" />
+		<span metal:define-slot="sub_header" />
+		<span metal:define-slot="before_bd" />
+		
+		<div id="bd" class="${vanilla/page/bd_class} hfeed">
+
+			<span metal:define-slot="breadcrumbs" />
+				
+			<div tal:define="file php:vanilla_get_template('vanilla-grid.html')"
+				 metal:use-macro="${file}/vanilla_grid" tal:omit-tag="">
+				<div metal:fill-slot="content" tal:omit-tag="">
+					<span metal:define-slot="content_top" />
+					<span metal:define-slot="loop" />
+					<span metal:define-slot="nav_posts" />
+					<span metal:define-slot="content_bottom" />
+				</div>
+			</div>
+			
+		</div><!-- #bd-->
+		
+		<span metal:define-slot="utility" />
+		<span metal:define-slot="before_ft" />
+		<span metal:define-slot="ft" />
+		<span metal:define-slot="after_ft" />
+		
+	</div><!--#page-->
+	
+	<span metal:define-slot="after_page" />
+	<span metal:define-slot="wp_footer" />
+
+</body>
+</html>
+
+</div>
+
+<span metal:use-macro="page" comment="Don't remove this, or you get... nothing!" />
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/home.php b/wp-content/themes/vanilla/blog-set/posts/home.php
new file mode 100644
index 0000000000000000000000000000000000000000..9079753c69ea76d8626578cbe9e8df11f4fab943
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/home.php
@@ -0,0 +1,55 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $vnl_width, $vnl_nesting, $vnl_template, $vnl_utility, $tpl;
+$vnl_width =  (isset($vnl_width))  ? $vnl_width  : vanilla_get_option("vnl_grid_width");
+$vnl_nesting =  (isset($vnl_nesting))  ? $vnl_nesting  : vanilla_get_option("vnl_grid_nesting");
+$vnl_template = (isset($vnl_template)) ? $vnl_template : vanilla_get_option("vnl_grid_template");
+$vnl_utility =  (isset($vnl_utility))  ? $vnl_utility  : vanilla_get_option("vnl_utility_nesting");
+// Page-specific overides
+//$vnl_width = "yui-d3";
+//$vnl_nesting = "yui-gd";
+//$vnl_template = "yui-t2";
+//$vnl_utility = "yui-bg";
+
+// create a new PHPTAL template object 
+$template = new PHPTAL( vanilla_get_template('posts/home.html') );
+$template->cleanUpCache();
+
+$tpl["page"] = array(
+	"width" => $vnl_width,
+	"nesting" => $vnl_nesting,
+	"template" => $vnl_template,
+	"utility" => $vnl_utility,
+	"body_class" => sandbox_body_class(false),
+	"bd_class" => $vnl_width." ".$vnl_template
+);
+
+get_header();
+
+cfct_loop();
+cfct_misc('nav-posts');
+
+get_footer();
+
+// Execute the PHPTAL template
+vanilla_output_page($template);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/posts-default.php b/wp-content/themes/vanilla/blog-set/posts/posts-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..92f8ede34631474d8a73abd2b7c30565ccc9a50b
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/posts-default.php
@@ -0,0 +1,54 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+get_header();
+
+global $vnl_width, $vnl_nesting, $vnl_template, $vnl_utility;
+// Page-specific overides
+//$vnl_width = "yui-d3";
+//$vnl_nesting = "yui-gd";
+//$vnl_template = "yui-t2";
+//$vnl_utility = "yui-bg";
+
+?>
+		<div id="bd" class="<?php echo($vnl_width." ".$vnl_template) ?> hfeed">
+<?php
+
+vanilla_widget_block("Breadcrumbs");
+
+vanilla_yui_grid('Top');
+vanilla_widget_block('Content Top');
+
+?>
+
+<div id="content">
+<?php
+	cfct_loop();
+	cfct_misc('nav-posts');
+?>
+</div><!--#content-->
+
+<?php
+
+vanilla_widget_block('Content Bottom');
+vanilla_yui_grid('Bottom');
+get_footer();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/search.html b/wp-content/themes/vanilla/blog-set/posts/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..d71a2f336e50e14b874003c87574fdbc63e1cc4a
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/search.html
@@ -0,0 +1,90 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="page" tal:omit-tag="">
+
+<span tal:define="file php:vanilla_get_template('hooks.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the 'hook' slots." />
+<span tal:define="file php:vanilla_get_template('header/' . vanilla['header']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the header slots." />
+<span tal:define="file php:vanilla_get_template('loop/' . vanilla['loop']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the loop slots." />
+<span tal:define="file php:vanilla_get_template('misc/nav-posts.html')" 
+	  metal:use-macro="${file}/loader" tal:comment="The nav_posts slot." />
+<span tal:define="file php:vanilla_get_template('vanilla-utility.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the utility block slots." />
+<span tal:define="file php:vanilla_get_template('footer/' . vanilla['footer']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the footer slots." />
+<span tal:define="file php:vanilla_get_template('widgets/' . vanilla['search']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="The search form slot." />
+
+<!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"> <!-- have to put language back in here. -->
+<head profile="http://gmpg.org/xfn/11">
+	<span metal:define-slot="head" />
+</head>
+<body class="${vanilla/page/body_class}">
+
+	<span metal:define-slot="before_page" />
+
+	<div id="page">
+	
+		<span metal:define-slot="before_hd" />
+		<span metal:define-slot="hd" />
+		<span metal:define-slot="sub_header" />
+		<span metal:define-slot="before_bd" />
+		
+		<div id="bd" class="${vanilla/page/bd_class} hfeed">
+
+			<span metal:define-slot="breadcrumbs" />
+				
+			<div tal:define="file php:vanilla_get_template('vanilla-grid.html')"
+				 metal:use-macro="${file}/vanilla_grid" tal:omit-tag="">
+				<div metal:fill-slot="content" tal:omit-tag="">
+					<span metal:define-slot="content_top" />
+					
+					<h1 class="page-title">${structure vanilla/loop/search_title | vanilla/page/search_title}</h1>
+					<p tal:condition="vanilla/loop/search_message">${vanilla/loop/search_message}</p>
+					
+					<span metal:define-slot="loop" />
+					<span metal:define-slot="nav_posts" />
+					<span metal:define-slot="content_bottom" />
+				</div>
+			</div>
+			
+		</div><!-- #bd-->
+		
+		<span metal:define-slot="utility" />
+		<span metal:define-slot="before_ft" />
+		<span metal:define-slot="ft" />
+		<span metal:define-slot="after_ft" />
+		
+	</div><!--#page-->
+	
+	<span metal:define-slot="after_page" />
+	<span metal:define-slot="wp_footer" />
+
+</body>
+</html>
+
+</div>
+
+<span metal:use-macro="page" comment="Don't remove this, or you get... nothing!" />
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/search.php b/wp-content/themes/vanilla/blog-set/posts/search.php
new file mode 100644
index 0000000000000000000000000000000000000000..046d934ef332d477722a4788df41c8fadb307ec3
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/search.php
@@ -0,0 +1,63 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $vnl_width, $vnl_nesting, $vnl_template, $vnl_utility, $tpl;
+$vnl_width =  (isset($vnl_width))  ? $vnl_width  : vanilla_get_option("vnl_grid_width");
+$vnl_nesting =  (isset($vnl_nesting))  ? $vnl_nesting  : vanilla_get_option("vnl_grid_nesting");
+$vnl_template = (isset($vnl_template)) ? $vnl_template : vanilla_get_option("vnl_grid_template");
+$vnl_utility =  (isset($vnl_utility))  ? $vnl_utility  : vanilla_get_option("vnl_utility_nesting");
+// Page-specific overides
+//$vnl_width = "yui-d3";
+//$vnl_nesting = "yui-gd";
+//$vnl_template = "yui-t2";
+//$vnl_utility = "yui-bg";
+
+// create a new PHPTAL template object 
+$template = new PHPTAL(vanilla_get_template('posts/search.html') );
+$template->cleanUpCache();
+
+$s = get_query_var('s');
+
+$search_title = '<a href="'.get_bloginfo('url').'/?s='.attribute_escape($s).'" title="">'.htmlspecialchars($s).'</a>';
+
+$tpl["page"] = array(
+	"base_path" => CFCT_PATH,
+	"width" => $vnl_width,
+	"nesting" => $vnl_nesting,
+	"template" => $vnl_template,
+	"utility" => $vnl_utility,
+	"body_class" => sandbox_body_class(false),
+	"bd_class" => $vnl_width." ".$vnl_template,
+	"search_title" => sprintf(__('Search Results for: %s', 'carrington'), $search_title)
+);
+
+get_header();
+
+cfct_form('search');
+
+cfct_loop();
+cfct_misc('nav-posts');
+
+get_footer();
+
+// Execute the PHPTAL template
+vanilla_output_page($template);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/style.css b/wp-content/themes/vanilla/blog-set/posts/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..ff59ecd4b3c93f4e2485362f994f7866c141bfba
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/style.css
@@ -0,0 +1,72 @@
+/*
+
+Theme Name: Vanilla Theme
+Theme URI: http://www.vanillatheme.com
+Description: A base theme for themers who really mean business.
+Version: 0.5 beta
+Author: Alister Cameron, Australis Media
+Author URI: http://www.alistercameron.com
+Tags: widgets, customizable, 3-column, 2-column, 1-column, framework, semantic, white, red, gray, carrington, hybrid, sandbox, tarski
+
+// This file is part of the Vanilla Theme for WordPress
+// http://www.vanillatheme.com
+//
+// Copyright (c) 2008 Australis Media Pty Ltd. All rights reserved.
+// http://www.australismedia.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+*/
+
+/* Reset browser defaults */
+@import url('http://yui.yahooapis.com/3.0.0pr1/build/cssreset/reset.css');
+@import url('http://yui.yahooapis.com/3.0.0pr1/build/cssfonts/fonts.css');
+@import url('http://yui.yahooapis.com/3.0.0pr1/build/cssgrids/grids.css');
+
+/* including for compatibility */
+
+.alignleft {
+	float:left;
+	margin-right:1em;
+	margin-bottom:1em;
+}
+.alignright {
+	float:right;
+	margin-left:1em;
+	margin-bottom:1em;
+}
+.aligncenter {
+	display: block;
+	margin-left: auto;
+	margin-right: auto;
+}
+.wp-caption {
+	border: 1px solid #ddd;
+	text-align: center;
+	background-color: #f3f3f3;
+	padding-top: 4px;
+	margin: 10px;
+	/* optional rounded corners for browsers that support it */
+	-moz-border-radius: 3px;
+	-khtml-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+}
+.wp-caption img {
+	margin: 0;
+	padding: 0;
+	border: 0 none;
+}
+.wp-caption p.wp-caption-text {
+	font-size: 11px;
+	line-height: 17px;
+	padding: 0 4px 5px;
+	margin: 0;
+}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/posts/tag.php b/wp-content/themes/vanilla/blog-set/posts/tag.php
new file mode 100644
index 0000000000000000000000000000000000000000..17f0a92a235209761cd895204b0e96d61eaad795
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/posts/tag.php
@@ -0,0 +1,41 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+get_header();
+
+$tag_title = '<a href="'.get_tag_link(intval(get_query_var('tag_id'))).'" title="">'.single_tag_title('', false).'</a>';
+
+
+?>
+
+<div id="content">
+	<h1 class="page-title"><?php printf(__('Tag Archives: %s', 'carrington'), $tag_title); ?></h1>
+
+<?php
+	cfct_loop();
+	cfct_misc('nav-posts');
+?>
+</div><!--#content-->
+<?php 
+get_sidebar();
+
+get_footer();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/single/README.txt b/wp-content/themes/vanilla/blog-set/single/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d9e9d2dbb71af2628da0ef0204f02b9c9d7dd715
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/single/README.txt
@@ -0,0 +1,27 @@
+## single/
+
+### Overview
+
+This directory holds top level templates for "single" post pages. These files should call `the_header()`, `the_sidebar()`, `the_footer()`, `cfct_loop()` and `cfct_comments()` to include the other parts of the page.
+
+A "default" template is required, and will be used when there are no other templates that match a given comment. This could be because no other templates have been created, or because the context doesn't match the templates that are available.
+
+
+### Supported Override Filenames
+
+- single-default.php (or default.php)
+- author-{username}.php
+- cat-{slug}.php
+- role-{rolename}.php
+- tag-{slug}.php
+
+
+### File Descriptions
+
+Standard context file naming will work for files in this directory. Here are some specific examples.
+
+- *default.php* - Used when there are no other templates that match for a given context.
+- *author-{username}.php* - Used to show a post authored by a specific user. For example, a template with a file name of _author-jsmith.php_ would be used posts by user _jsmith_. Any WordPress username can take the place of {username} in the file name.
+- *cat-{slug}.php* - Used to show a post in a given category. The category is matched by the "slug" - for example posts in category "General" (with a category slug of "general") could use a template of _cat-general.php_.
+- *tag-{slug}.php* - Used when a post has a given tag. The tag is matched by the "slug" - for example a post tagged with "News" (with a tag slug of "news") could use a template of _tag-news.php_.
+
diff --git a/wp-content/themes/vanilla/blog-set/single/single-default.html b/wp-content/themes/vanilla/blog-set/single/single-default.html
new file mode 100644
index 0000000000000000000000000000000000000000..333ad0283502541e76ca700fa6fb925c5ff7e22b
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/single/single-default.html
@@ -0,0 +1,111 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="page" tal:omit-tag="">
+
+<span tal:define="file php:vanilla_get_template('hooks.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the 'hook' slots." />
+<span tal:define="file php:vanilla_get_template('header/' . vanilla['header']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the header slots." />
+<span tal:define="file php:vanilla_get_template('vanilla-utility.html')"
+	  metal:use-macro="${file}/loader" tal:comment="All the utility block slots." />
+<span tal:define="file php:vanilla_get_template('footer/' . vanilla['footer']['tpl_file'])"
+	  metal:use-macro="${file}/loader" tal:comment="All the footer slots." />
+
+<!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"> <!-- have to put language back in here. -->
+<head profile="http://gmpg.org/xfn/11">
+	<span metal:define-slot="head" />
+	
+	<style type="text/css">
+	/* Style overides for this specific page */
+	#sidebar-top{
+		width: 27.67em; *width: 26.9em;
+		margin-left: 0;
+	}
+	.sidebar-inner{
+		background-position: right top;
+		margin-left: -1em;
+		width: 195px !important;
+	}
+	.sidebar-outer{
+		background-position: left top;
+		margin-left: 0;
+		width: 170px !important;
+	}
+	</style>
+</head>
+<body class="${vanilla/page/body_class}">
+
+	<span metal:define-slot="before_page" />
+
+	<div id="page">
+	
+		<span metal:define-slot="before_hd" />
+		<span metal:define-slot="hd" />
+		<span metal:define-slot="sub_header" />
+		<span metal:define-slot="before_bd" />
+		
+		<div id="bd" class="${vanilla/page/bd_class} hfeed">
+
+			<span metal:define-slot="breadcrumbs" />
+				
+			<div tal:define="file php:vanilla_get_template('vanilla-grid.html')"
+				 metal:use-macro="${file}/vanilla_grid" tal:omit-tag="">
+				<div metal:fill-slot="content" tal:omit-tag="">
+					<span metal:define-slot="content_top" />
+					
+					<span tal:repeat="entry vanilla/entries" tal:omit-tag="">
+						<span tal:condition="php: repeat.entry.number == '1'" tal:omit-tag="">
+							<span tal:define="file php:vanilla_get_template('content/' . vanilla['content']['tpl_file'])"
+								  metal:use-macro="${file}/loader" tal:comment="The content slot." />
+							<span tal:define="file php:vanilla_get_template('comments/' . vanilla['comments']['tpl_file'])"
+								  metal:use-macro="${file}/loader" tal:comment="The comments slot." />
+							
+							<span metal:define-slot="content" />
+							<div id="comments">
+								<span metal:define-slot="comments" />
+							</div><!--#comments-->
+						</span>
+					</span>
+	
+					<span metal:define-slot="content_bottom" />
+				</div>
+			</div>
+			
+		</div><!-- #bd-->
+		
+		<span metal:define-slot="utility" />
+		<span metal:define-slot="before_ft" />
+		<span metal:define-slot="ft" />
+		<span metal:define-slot="after_ft" />
+		
+	</div><!--#page-->
+	
+	<span metal:define-slot="after_page" />
+	<span metal:define-slot="wp_footer" />
+
+</body>
+</html>
+
+</div>
+
+<span metal:use-macro="page" comment="Don't remove this, or you get... nothing!" />
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/single/single-default.php b/wp-content/themes/vanilla/blog-set/single/single-default.php
new file mode 100644
index 0000000000000000000000000000000000000000..df7e194b37e8931944871a9a90e0eac74c2566ba
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/single/single-default.php
@@ -0,0 +1,57 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+global $vnl_width, $vnl_nesting, $vnl_template, $vnl_utility, $tpl;
+$vnl_width =  (isset($vnl_width))  ? $vnl_width  : vanilla_get_option("vnl_grid_width");
+$vnl_nesting =  (isset($vnl_nesting))  ? $vnl_nesting  : vanilla_get_option("vnl_grid_nesting");
+$vnl_template = (isset($vnl_template)) ? $vnl_template : vanilla_get_option("vnl_grid_template");
+$vnl_utility =  (isset($vnl_utility))  ? $vnl_utility  : vanilla_get_option("vnl_utility_nesting");
+// Page-specific overides
+//$vnl_width = "yui-d3";
+$vnl_nesting = "yui-gf";
+$vnl_template = "yui-t2";
+//$vnl_utility = "yui-bg";
+
+// create a new PHPTAL template object 
+$template = new PHPTAL(vanilla_get_template('single/single-default.html') );
+$template->cleanUpCache();
+
+$tpl["page"] = array(
+	"width" => $vnl_width,
+	"nesting" => $vnl_nesting,
+	"template" => $vnl_template,
+	"utility" => $vnl_utility,
+	"body_class" => sandbox_body_class(false),
+	"bd_class" => $vnl_width." ".$vnl_template
+);
+
+get_header();
+
+the_post();
+cfct_content();
+	
+comments_template();
+
+get_footer();
+
+// Execute the PHPTAL template
+vanilla_output_page($template);
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/vanilla-grid.html b/wp-content/themes/vanilla/blog-set/vanilla-grid.html
new file mode 100644
index 0000000000000000000000000000000000000000..13a00d1480a4e8faf7327246d2f6604a2acfea20
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/vanilla-grid.html
@@ -0,0 +1,162 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<metal:block define-macro="vanilla_grid">
+	<!-- macro: vanilla_grid -->
+	<tal:block condition="php: vanilla['page']['template'] != 'yui-t7'">
+		<tal:block condition="php: vanilla['page']['nesting'] == 'yui-g'">
+			<metal:block use-macro="vanilla_grid_outer_single_col" />
+		</tal:block>
+		<tal:block condition="php: vanilla['page']['nesting'] != 'yui-g'">
+			<metal:block use-macro="vanilla_grid_outer_multi_col" />
+		</tal:block>
+	</tal:block>
+	<tal:block condition="php: vanilla['page']['template'] == 'yui-t7'">
+		<tal:block condition="php: vanilla['page']['nesting'] == 'yui-g'">
+			<metal:block use-macro="vanilla_grid_inner_single_col" />
+		</tal:block>
+		<tal:block condition="php: vanilla['page']['nesting'] != 'yui-g'">
+			<metal:block use-macro="vanilla_grid_inner_multi_col" />
+		</tal:block>
+	</tal:block>
+</metal:block>
+
+
+
+<metal:block define-macro="vanilla_grid_sidebars_top">
+	<!-- macro: vanilla_grid_sidebars_top -->
+	<tal:block condition="php: in_array(vanilla['page']['nesting'], array('yui-gd', 'yui-gf'))">
+		<tal:block condition="php: in_array(vanilla['page']['template'], array('yui-t1', 'yui-t2', 'yui-t3'))">
+			<div class="yui-u first sidebar sidebar-inner">
+				<span metal:define-slot="secondary_sidebar" />
+			</div><!-- .yui-u first -->
+		</tal:block>
+		<tal:block condition="php: NOT in_array(vanilla['page']['template'], array('yui-t1', 'yui-t2', 'yui-t3'))">
+			<div class="yui-u first sidebar sidebar-outer">
+				<span metal:define-slot="primary_sidebar" />
+			</div><!-- .yui-u first -->
+		</tal:block>
+		<tal:block condition="php: vanilla['page']['template'] == 'yui-t7'">
+			<div class="yui-u first sidebar sidebar-outer">
+				<span metal:define-slot="secondary_sidebar" />
+			</div><!-- .yui-u first -->
+		</tal:block>
+	</tal:block>
+</metal:block>
+
+
+
+<metal:block define-macro="vanilla_grid_sidebars_middle">
+	<!-- macro: vanilla_grid_sidebars_middle -->
+	<tal:block condition="php: in_array(vanilla['page']['nesting'], array('yui-gc', 'yui-ge'))">
+		<div class="yui-u sidebar sidebar-inner">
+		<tal:block condition="php: in_array(vanilla['page']['template'], array('yui-t1', 'yui-t2', 'yui-t3'))">
+			<span metal:define-slot="secondary_sidebar" />
+		</tal:block>
+		<tal:block condition="php: NOT in_array(vanilla['page']['template'], array('yui-t1', 'yui-t2', 'yui-t3'))">
+			<span metal:define-slot="primary_sidebar" />
+		</tal:block>
+		<tal:block condition="php: vanilla['page']['template'] == 'yui-t7'">
+			<span metal:define-slot="secondary_sidebar" />
+		</tal:block>
+		</div><!-- .yui-u -->
+	</tal:block>
+</metal:block>
+
+
+
+<metal:block define-macro="vanilla_grid_sidebars_bottom">
+	<!-- macro: vanilla_grid_sidebars_bottom -->
+	<tal:block condition="php: vanilla['page']['nesting'] == 'yui-g'">
+		<div class="yui-b sidebar sidebar-outer">
+			<span metal:define-slot="primary_sidebar" />
+			<span metal:define-slot="secondary_sidebar" />
+		</div><!-- .yui-b -->
+	</tal:block>
+	<tal:block condition="php: in_array(vanilla['page']['template'], array('yui-t1', 'yui-t2', 'yui-t3'))">
+		<div class="yui-b sidebar sidebar-outer">
+			<span metal:define-slot="primary_sidebar" />
+		</div><!-- .yui-b -->
+	</tal:block>
+	<tal:block condition="php: NOT in_array(vanilla['page']['template'], array('yui-t1', 'yui-t2', 'yui-t3'))">
+		<div class="yui-b sidebar sidebar-outer">
+			<tal:block tal:condition="php: vanilla['page']['nesting'] != 'yui-g'">
+				<span metal:define-slot="secondary_sidebar" />
+			</tal:block>
+		</div><!-- .yui-b -->
+	</tal:block>
+</metal:block>
+
+
+
+<metal:block define-macro="vanilla_grid_inner_single_col">
+	<!-- macro: vanilla_grid_inner_single_col -->
+	<div id="content" class="yui-g">
+		<span metal:define-slot="content" />
+		<span metal:use-macro="vanilla_grid_sidebars_middle" />
+	</div><!-- .yui-g -->			
+</metal:block>
+
+
+
+<metal:block define-macro="vanilla_grid_inner_multi_col">
+	<!-- macro: vanilla_grid_inner_multi_col -->
+	<div class="${vanilla/page/nesting}">
+		<span metal:use-macro="vanilla_grid_sidebars_top" />
+		<div id="content" class="class" tal:attributes="class php: (in_array(vanilla['page']['nesting'], array('yui-gc', 'yui-ge'))) ? 'yui-u first' : 'yui-u'">
+			<span metal:define-slot="content" />
+		</div><!-- .yui-u first -->
+		<span metal:use-macro="vanilla_grid_sidebars_middle" />
+	</div><!-- .yui-g -->
+</metal:block>
+
+
+
+<metal:block define-macro="vanilla_grid_outer_single_col">
+	<!-- macro: vanilla_grid_outer_single_col -->
+	<div class="yui-main">
+		<div class="yui-b">
+			<div id="content" class="yui-g">
+				<span metal:define-slot="content" />
+				<span metal:use-macro="vanilla_grid_sidebars_middle" />
+			</div><!-- .yui-g -->
+		</div><!-- .yui-b -->
+	</div><!-- #yui-main -->
+	<span metal:use-macro="vanilla_grid_sidebars_bottom" />
+</metal:block>
+
+
+
+<metal:block define-macro="vanilla_grid_outer_multi_col">
+	<!-- macro: vanilla_grid_outer_multi_col -->
+	<div class="yui-main">
+		<div class="yui-b">
+			<div class="${vanilla/page/nesting}">
+				<span metal:use-macro="vanilla_grid_sidebars_top" />
+				<div id="content" class="class" tal:attributes="class php: (in_array(vanilla['page']['nesting'], array('yui-gc', 'yui-ge'))) ? 'yui-u first' : 'yui-u'">
+					<span metal:define-slot="content" />
+				</div><!-- .yui-u -->
+				<span metal:use-macro="vanilla_grid_sidebars_middle" />
+			</div><!-- .yui-g -->
+		</div><!-- .yui-b -->
+	</div><!-- #yui-main -->
+	<span metal:use-macro="vanilla_grid_sidebars_bottom" />
+</metal:block>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/vanilla-utility.html b/wp-content/themes/vanilla/blog-set/vanilla-utility.html
new file mode 100644
index 0000000000000000000000000000000000000000..5e4404ac55368b562b61f5fa828c363e3ed31226
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/vanilla-utility.html
@@ -0,0 +1,68 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<metal:block define-macro="loader">
+
+	<metal:block define-macro="vanilla_utility_4_col">
+		<div class="yui-g first">
+			<div class="yui-u first">
+				<span metal:define-slot="utility_1" />
+			</div>
+			<div class="yui-u">
+				<span metal:define-slot="utility_2" />
+			</div>
+		</div>
+		<div class="yui-g">
+			<div class="yui-u first">
+				<span metal:define-slot="utility_3" />
+			</div>
+			<div class="yui-u">
+				<span metal:define-slot="utility_4" />
+			</div>
+		</div>
+	</metal:block>
+	
+	
+	<metal:block fill-slot="utility">
+		${php: do_action('vanilla_before_utility_grid')}
+		<tal:block define="global utl_class php: str_replace('gg','g', vanilla['utility'])" />
+		<tal:block condition="php: vanilla['utility'] != 'yui-ga'">
+			<div id="utility" class="yui-d3 ${utl_class}">
+				<tal:block use-macro="vanilla_utility_4_col" condition="php: vanilla['utility'] == 'yui-gg'" tal:comment="4 utility columns" />
+				<tal:block condition="php: vanilla['utility'] != 'yui-gg'">
+					<div class="yui-u first">
+						<span metal:define-slot="utility_1" />
+					</div>
+					<div class="yui-u">
+						<span metal:define-slot="utility_2" />
+					</div>
+					<tal:block condition="php: vanilla['utility'] == 'yui-gb'" tal:comment="3 utility columns">
+						<div class="yui-u">
+							<span metal:define-slot="utility_3" />
+						</div>
+					</tal:block>
+				</tal:block>
+			</div><!-- #utility -->
+		</tal:block>
+		${php: do_action('vanilla_after_utility_grid')}
+	</metal:block>
+
+</metal:block>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/widgets/all-categories.html b/wp-content/themes/vanilla/blog-set/widgets/all-categories.html
new file mode 100644
index 0000000000000000000000000000000000000000..068f179ce6361ef2d2ed2ac812ce96bcb00a6b4f
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/all-categories.html
@@ -0,0 +1,40 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="all_categories">
+	<!-- slot: all-categories -->
+	<div id="all-categories">
+		<span class="heading">Categories:</span>
+		<ul>
+			${php: wp_list_categories('title_li=')}
+		</ul>
+	</div><!-- #all-categories -->
+
+</div>
+
+</div>
+
+
+
+
+
diff --git a/wp-content/themes/vanilla/blog-set/widgets/all-categories.php b/wp-content/themes/vanilla/blog-set/widgets/all-categories.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7395541ba98a61f8620a7a9770973bf40f225db
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/all-categories.php
@@ -0,0 +1,13 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function widget_all_categories() {
+	// Nothing here - the TAL template does everything.
+}
+
+function widget_all_categories_control() {}
+
+//vanilla_register_widget(function name, description);
+vanilla_register_widget('widget_all_categories', 'Categories Menu');
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/widgets/branding.html b/wp-content/themes/vanilla/blog-set/widgets/branding.html
new file mode 100644
index 0000000000000000000000000000000000000000..92bdfe5bd8a720f1440f7b6d97cf0b6e49564494
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/branding.html
@@ -0,0 +1,36 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="branding">
+	<!-- slot: branding -->
+	<strong id="blog-title"><a href="${php: bloginfo('url')}/" title="Home" rel="home">${php: bloginfo('name')}</a></strong>
+	<p id="blog-description">${php: bloginfo('description')}</p>
+
+</div>
+
+</div>
+
+
+
+
+
diff --git a/wp-content/themes/vanilla/blog-set/widgets/branding.php b/wp-content/themes/vanilla/blog-set/widgets/branding.php
new file mode 100644
index 0000000000000000000000000000000000000000..be0f90b9c6af6901968156e2d5dba9ece1ff802d
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/branding.php
@@ -0,0 +1,13 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function widget_branding() {
+	// Nothing here - the TAL template does everything.
+}
+
+function widget_branding_control() {}
+
+//vanilla_register_widget(function name, description);
+vanilla_register_widget('widget_branding', 'Site-wide branding elements');
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/widgets/navigation.html b/wp-content/themes/vanilla/blog-set/widgets/navigation.html
new file mode 100644
index 0000000000000000000000000000000000000000..a31d9c6c6745d72c2ddf797ed41e685d10405a4f
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/navigation.html
@@ -0,0 +1,55 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="navigation">
+	<!-- slot: navigation -->
+	<div id="navigation">
+		<ul>
+			${php: wp_list_pages('title_li=')}
+			<li tal:condition="vanilla/widget/navigation/user_id" class="secondary">
+				<a href="${php: site_url('wp-login.php?action=logout', 'login')}">${php: __('Log Out', 'carrington')}</a>
+			</li>
+			<li tal:condition="not: vanilla/widget/navigation/user_id" class="secondary">
+				<a href="${php: site_url('wp-login.php', 'login')}">${php: __('Log In', 'carrington')}</a>
+			</li>
+			<li class="secondary">
+				${php: wp_register('','')}
+			</li>
+			<span tal:condition="exists: vanilla/entries" tal:repeat="entry vanilla/entries" tal:omit-tag="">
+				<li class="secondary" tal:condition="php: repeat.entry.number == '1' && (is_single() || is_page())">
+					<a href="${structure entry/edit_link}">${php: __('Edit Page')}</a>
+				</li>
+			</span>
+		</ul>
+	</div><!-- #navigation -->
+</div>
+
+</div>
+
+
+
+
+
+
+
+
diff --git a/wp-content/themes/vanilla/blog-set/widgets/navigation.php b/wp-content/themes/vanilla/blog-set/widgets/navigation.php
new file mode 100644
index 0000000000000000000000000000000000000000..5f8354231dec8b4ab124ce5c7151fb6febed099f
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/navigation.php
@@ -0,0 +1,17 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function widget_navigation() {
+	global $tpl, $user_ID;
+	
+	$tpl["widget"]["navigation"] = array(
+		"user_id" => ($user_ID) ? 1 : 0
+	);
+}
+
+function widget_navigation_control() {}
+
+//vanilla_register_widget(function name, description);
+vanilla_register_widget('widget_navigation', 'Main menu/navigation');
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/widgets/search-form.html b/wp-content/themes/vanilla/blog-set/widgets/search-form.html
new file mode 100644
index 0000000000000000000000000000000000000000..46d60056e9e33435a9ad5ddf965a6ad00101db09
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/search-form.html
@@ -0,0 +1,34 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="search_form" tal:omit-tag="">
+	<!-- slot: search_form -->
+	<form method="get" id="search" action="${vanilla/search/action | vanilla/widget/search_form/action}">
+		<div>
+			<input type="text" id="search-input" name="s" value="${vanilla/search/query | vanilla/widget/search_form/query}" size="15" />
+			<input type="submit" name="submit_button" value="${vanilla/search/submit_text | vanilla/widget/search_form/submit_text}" />
+		</div>
+	</form>
+</div>
+
+</div>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/widgets/search-form.php b/wp-content/themes/vanilla/blog-set/widgets/search-form.php
new file mode 100644
index 0000000000000000000000000000000000000000..19206a5cb10d6ead0746c06aafc2d7d2b7559282
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/search-form.php
@@ -0,0 +1,18 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function widget_search_form() {
+	global $tpl;
+	$tpl["widget"]["search_form"] = array(
+		"action" => get_bloginfo('home'),
+		"submit_text" => __('Search', 'carrington'),
+		"query" => wp_specialchars(stripslashes($_GET['s']), true)
+	);
+}
+
+function widget_search_form_control() {}
+
+//vanilla_register_widget(function name, description);
+vanilla_register_widget('widget_search_form', 'Search Form');
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/blog-set/widgets/site-credits.html b/wp-content/themes/vanilla/blog-set/widgets/site-credits.html
new file mode 100644
index 0000000000000000000000000000000000000000..c9b6354771a9f4773ac9f391cf73bcb70bb5727e
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/site-credits.html
@@ -0,0 +1,31 @@
+<div tal:replace="">
+<!--
+
+Australis Media has made the contents of this file
+available under a CC-GNU-GPL license:
+
+ http://creativecommons.org/licenses/GPL/2.0/
+
+ A copy of the full license can be found as part of this
+ distribution in the file LICENSE.TXT
+
+You may use the Vanilla theme software in accordance
+with the terms of that license. You agree that you are
+solely  responsible for your use of the Vanilla theme
+software and you represent and warrant to Australis Media
+that your use of the Vanilla theme software will comply
+with the CC-GNU-GPL.
+
+-->
+</div>
+
+<div metal:define-macro="loader" tal:omit-tag="">
+
+<div metal:fill-slot="site_credits" tal:omit-tag="">
+	<!-- slot: site_credits -->
+	<p id="generator-link">${structure vanilla/widget/site_credits/generator_link}</p>
+	<p id="developer-link" tal:condition="php: cfct_get_option('cfct_credit') == 'yes'">${structure vanilla/widget/site_credits/developer_link}</p>
+</div>
+
+</div>
+
diff --git a/wp-content/themes/vanilla/blog-set/widgets/site-credits.php b/wp-content/themes/vanilla/blog-set/widgets/site-credits.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c0af66e20c3f07e979059713a8f1c5cb5c78ad4
--- /dev/null
+++ b/wp-content/themes/vanilla/blog-set/widgets/site-credits.php
@@ -0,0 +1,17 @@
+<?php
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+function widget_site_credits() {
+	global $tpl;
+	$tpl["widget"]["site_credits"] = array(
+		"generator_link" => __('Proudly powered by <a href="http://wordpress.org/" title="WordPress" rel="generator">WordPress</a></span> and <span id="theme-link"><a href="http://carringtontheme.com" title="Carrington theme for WordPress">Carrington</a></span>.', 'carrington'),
+		"developer_link" => sprintf(__('<a href="http://crowdfavorite.com" title="Custom WordPress development, design and backup services." rel="developer designer">%s</a>', 'carrington'), 'Carrington Theme by Crowd Favorite')
+	);
+}
+
+function widget_site_credits_control() {}
+
+//vanilla_register_widget(function name, description);
+vanilla_register_widget('widget_site_credits', 'Site Credits (footer)');
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/comments.php b/wp-content/themes/vanilla/comments.php
new file mode 100644
index 0000000000000000000000000000000000000000..e675e801bbae996dd0a5b2f8dc7ca9ba43822d42
--- /dev/null
+++ b/wp-content/themes/vanilla/comments.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_comments();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/footer.php b/wp-content/themes/vanilla/footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..91f4ea2341de793c778daa53c40855c87f2d5992
--- /dev/null
+++ b/wp-content/themes/vanilla/footer.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_footer();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/functions.php b/wp-content/themes/vanilla/functions.php
new file mode 100644
index 0000000000000000000000000000000000000000..016cdd1b943345f7555d3a0d9b3900ecb04fc280
--- /dev/null
+++ b/wp-content/themes/vanilla/functions.php
@@ -0,0 +1,193 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+//	ini_set('display_errors', '1');
+//	ini_set('error_reporting', E_ALL);
+
+load_theme_textdomain('carrington');
+
+define('CFCT_DEBUG', false);
+define('CFCT_PATH', trailingslashit(TEMPLATEPATH));
+define('CFCT_HOME_LIST_LENGTH', 5);
+define('CFCT_HOME_LATEST_LENGTH', 250);
+
+define('VANILLA_DEBUG', false);
+
+$cfct_options = array(
+	'cfct_home_column_1_cat'
+	, 'cfct_home_column_1_content'
+	, 'cfct_latest_limit_1'
+	, 'cfct_list_limit_1'
+	, 'cfct_home_column_2_cat'
+	, 'cfct_home_column_2_content'
+	, 'cfct_latest_limit_2'
+	, 'cfct_list_limit_2'
+	, 'cfct_home_column_3_cat'
+	, 'cfct_home_column_3_content'
+	, 'cfct_latest_limit_3'
+	, 'cfct_list_limit_3'
+	, 'cfct_about_text'
+	, 'cfct_ajax_load'
+	, 'cfct_credit'
+	, 'cfct_posts_per_archive_page'
+	, 'cfct_wp_footer'
+);
+
+// master template variable used by PHPTAL
+$tpl = array(
+	"base_path" => CFCT_PATH,
+	"child_path" => trailingslashit(STYLESHEETPATH)
+);
+
+/* ========================================
+   PHPTAL
+   ======================================== */
+
+define('PHPTAL_PHP_CODE_DESTINATION', CFCT_PATH."cache/");
+require_once(CFCT_PATH.'PHPTAL.php');
+
+/* ========================================
+   Carrington
+   ======================================== */
+
+include_once(CFCT_PATH.'_carrington/admin.php');
+include_once(CFCT_PATH.'_carrington/templates.php');
+include_once(CFCT_PATH.'_carrington/utility.php');
+include_once(CFCT_PATH.'_carrington/ajax-load.php');
+include_once(CFCT_PATH.'_carrington/sandbox.php');
+
+/* ========================================
+   Vanilla
+   ======================================== */
+   
+include_once(CFCT_PATH.'_vanilla/core.php');
+include_once(CFCT_PATH.'_vanilla/grid.php');
+include_once(CFCT_PATH.'_vanilla/blocks.php');
+include_once(CFCT_PATH.'_vanilla/widgets.php');
+include_once(CFCT_PATH.'_vanilla/hooks-filters.php');
+include_once(CFCT_PATH.'_vanilla/minify-html.php');
+include_once(CFCT_PATH.'_vanilla/phptal-custom.php');
+
+/* ========================================
+   Custom Widgets
+   ======================================== */
+
+include_once(CFCT_PATH.'_custom-widgets/custom_widgets.php');
+
+/* ========================================
+   Hybrid
+   ======================================== */
+
+define('HYBRID_IMAGES', CFCT_PATH.'images');
+define('HYBRID_CSS', CFCT_PATH.'css');
+define('HYBRID_JS', CFCT_PATH.'js');
+define('HYBRID_SWF', CFCT_PATH.'swf');
+
+include_once(CFCT_PATH.'_hybrid/breadcrumbs.php');
+include_once(CFCT_PATH.'_hybrid/comments.php');
+include_once(CFCT_PATH.'_hybrid/deprecated.php');
+include_once(CFCT_PATH.'_hybrid/filters.php');
+include_once(CFCT_PATH.'_hybrid/functions.php');
+include_once(CFCT_PATH.'_hybrid/get-the-image.php');
+include_once(CFCT_PATH.'_hybrid/get-the-video.php');
+include_once(CFCT_PATH.'_hybrid/hooks.php');
+include_once(CFCT_PATH.'_hybrid/media.php');
+include_once(CFCT_PATH.'_hybrid/primary.php');
+include_once(CFCT_PATH.'_hybrid/secondary.php');
+include_once(CFCT_PATH.'_hybrid/template-functions.php');
+include_once(CFCT_PATH.'_hybrid/widgets.php');
+
+if(is_admin()) :
+	include_once(CFCT_PATH.'_hybrid/admin/theme-settings.php');
+	include_once(CFCT_PATH.'_hybrid/admin/meta-box.php');
+endif;
+
+$hybrid_settings = get_option('hybrid_theme_settings');
+
+/* ========================================
+   Tarski
+   ======================================== */
+
+// Path constants
+define('TARSKICLASSES', CFCT_PATH.'_tarski/classes');
+define('TARSKIHELPERS', CFCT_PATH.'_tarski/helpers');
+define('TARSKIDISPLAY', CFCT_PATH.'_tarski/display');
+define('TARSKICACHE', CFCT_PATH.'_tarski/cache');
+define('TARSKIVERSIONFILE', 'http://tarskitheme.com/version.atom');
+
+// Core library files
+//require_once(CFCT_PATH.'_tarski/core.php');
+//require_once(CFCT_PATH.'_tarski/classes/options.php');
+//require_once(CFCT_PATH.'_tarski/classes/asset.php');
+
+// Admin library files
+//if (is_admin()) {
+//	require_once(CFCT_PATH.'_tarski/classes/version.php');
+//	require_once(CFCT_PATH.'_tarski/classes/page_select.php');
+//	require_once(CFCT_PATH.'_tarski/helpers/admin_helper.php');
+//}
+
+// Various helper libraries
+//require_once(CFCT_PATH.'_tarski/helpers/template_helper.php');
+//require_once(CFCT_PATH.'_tarski/helpers/content_helper.php');
+//require_once(CFCT_PATH.'_tarski/helpers/author_helper.php');
+//require_once(CFCT_PATH.'_tarski/helpers/tag_helper.php');
+//require_once(CFCT_PATH.'_tarski/helpers/widgets.php');
+
+// API files
+//require_once(CFCT_PATH.'_tarski/api/hooks.php');
+//require_once(CFCT_PATH.'_tarski/api/constants_helper.php');
+//include_once(CFCT_PATH.'_tarski/api/deprecated.php');
+
+// Launch
+//require_once(CFCT_PATH.'_tarski/launcher.php');
+
+cfct_load_plugins();
+
+function cfct_init() {
+	cfct_admin_request_handler();
+	if (cfct_get_option('cfct_ajax_load') == 'yes') {
+		cfct_ajax_load();
+	}
+}
+add_action('init', 'cfct_init');
+
+/* ========================================
+   Header JS Additions
+   ======================================== */
+
+wp_enqueue_script('jquery');
+wp_enqueue_script('carrington', get_bloginfo('template_directory').'/js/carrington.js', 'jquery', '1.0');
+
+/* ========================================
+   Footer Additions
+   ======================================== */
+
+function cfct_wp_footer() {
+	echo get_option('cfct_wp_footer');
+	cfct_get_option('cfct_ajax_load') == 'no' ? $ajax_load = 'false' : $ajax_load = 'true';
+	echo '
+<script type="text/javascript">
+var CFCT_URL = "'.get_bloginfo('url').'";
+var CFCT_AJAX_LOAD = '.$ajax_load.';
+</script>
+	';
+}
+add_action('wp_footer', 'cfct_wp_footer');
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/header.php b/wp-content/themes/vanilla/header.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ccac47637ed053a023f16df616065398a9812d7
--- /dev/null
+++ b/wp-content/themes/vanilla/header.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_header();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/image.php b/wp-content/themes/vanilla/image.php
new file mode 100644
index 0000000000000000000000000000000000000000..cfd90205b1a237ea2e66ff4499dc7f84bc15f84e
--- /dev/null
+++ b/wp-content/themes/vanilla/image.php
@@ -0,0 +1,77 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+if (CFCT_DEBUG) { cfct_banner(__FILE__); }
+
+?>
+<!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" <?php language_attributes() ?>>
+<head profile="http://gmpg.org/xfn/11">
+	<title><?php wp_title( '-', true, 'right' ); echo wp_specialchars( get_bloginfo('name'), 1 ); ?></title>
+	<meta http-equiv="content-type" content="<?php bloginfo('html_type') ?>; charset=<?php bloginfo('charset') ?>" />
+	
+	<link href="<?php bloginfo('url') ?>" rel="home" />
+	
+	<link rel="alternate" type="application/rss+xml" href="<?php bloginfo('rss2_url') ?>" title="<?php printf( __( '%s latest posts', 'sandbox' ), wp_specialchars( get_bloginfo('name'), 1 ) ) ?>" />
+	<link rel="alternate" type="application/rss+xml" href="<?php bloginfo('comments_rss2_url') ?>" title="<?php printf( __( '%s latest comments', 'sandbox' ), wp_specialchars( get_bloginfo('name'), 1 ) ) ?>" />
+	<link rel="pingback" href="<?php bloginfo('pingback_url') ?>" />
+	
+	<link rel="stylesheet" type="text/css" media="screen, print, handheld" href="<?php bloginfo('template_url') ?>/css/typography.css" />
+	<link rel="stylesheet" type="text/css" media="screen" href="<?php bloginfo('template_directory') ?>/css/image.css" />
+
+	<?php wp_head(); ?>
+</head>
+
+<body class="<?php sandbox_body_class() ?>">
+
+<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
+
+<div id="header">
+	<a href="<?php echo get_permalink($post->post_parent); ?>" rev="attachment">&larr; back to &#8220;<?php echo get_the_title($post->post_parent); ?>&#8221;</a>
+</div>
+
+<div class="previous-attachment"><?php previous_image_link() ?></div>
+
+<div id="content" class="figure">
+	<div class="entry-attachment">
+		<a href="<?php echo wp_get_attachment_url($post->ID); ?>"><?php echo wp_get_attachment_image( $post->ID, 'full' ); ?></a>
+	</div>
+ 	<div class="figure-info">
+		<div class="caption">
+			<h1 class="title"><?php the_title(); ?></h1>
+			<?php if ( !empty($post->post_excerpt) ) the_excerpt(); // this is the "caption" ?>
+		</div>
+		<div class="description">
+			<?php the_content() ?>
+		</div>
+	</div>
+</div>
+
+<div class="next-attachment"><?php next_image_link() ?></div>
+
+<div id="footer">
+	<a href="<?php echo get_permalink($post->post_parent); ?>" rev="attachment">&larr; back to &#8220;<?php echo get_the_title($post->post_parent); ?>&#8221;</a>
+</div>
+
+<?php endwhile; else: ?>
+
+		<p>Sorry, no attachments matched your criteria.</p>
+
+<?php endif; ?>
+</body>
+</html>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/images/arrow-bullet.gif b/wp-content/themes/vanilla/images/arrow-bullet.gif
new file mode 100644
index 0000000000000000000000000000000000000000..ea4db5731cb029c1434b6dfcb03355bc3cefa187
Binary files /dev/null and b/wp-content/themes/vanilla/images/arrow-bullet.gif differ
diff --git a/wp-content/themes/vanilla/images/attachment-next.png b/wp-content/themes/vanilla/images/attachment-next.png
new file mode 100644
index 0000000000000000000000000000000000000000..154beb13a4404e09ace44e033c2d6a0a14f7fb98
Binary files /dev/null and b/wp-content/themes/vanilla/images/attachment-next.png differ
diff --git a/wp-content/themes/vanilla/images/attachment-previous.png b/wp-content/themes/vanilla/images/attachment-previous.png
new file mode 100644
index 0000000000000000000000000000000000000000..59d5917aef4c09e0dd7c27d856d76de1177df515
Binary files /dev/null and b/wp-content/themes/vanilla/images/attachment-previous.png differ
diff --git a/wp-content/themes/vanilla/images/audio.png b/wp-content/themes/vanilla/images/audio.png
new file mode 100755
index 0000000000000000000000000000000000000000..7ba54e4139b151dbf1b521a72e0301385aa7a2a1
Binary files /dev/null and b/wp-content/themes/vanilla/images/audio.png differ
diff --git a/wp-content/themes/vanilla/images/author-comment.jpg b/wp-content/themes/vanilla/images/author-comment.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..63e9913872c32d6b1123cd35c80e73cd9131663a
Binary files /dev/null and b/wp-content/themes/vanilla/images/author-comment.jpg differ
diff --git a/wp-content/themes/vanilla/images/avatar.gif b/wp-content/themes/vanilla/images/avatar.gif
new file mode 100755
index 0000000000000000000000000000000000000000..e9fd2b394efa36359cd8b0c76cf4b6025b7898cc
Binary files /dev/null and b/wp-content/themes/vanilla/images/avatar.gif differ
diff --git a/wp-content/themes/vanilla/images/background.jpg b/wp-content/themes/vanilla/images/background.jpg
new file mode 100755
index 0000000000000000000000000000000000000000..48eb0565a0cc591a9374cbf40b3d569b255999d5
Binary files /dev/null and b/wp-content/themes/vanilla/images/background.jpg differ
diff --git a/wp-content/themes/vanilla/images/blank.gif b/wp-content/themes/vanilla/images/blank.gif
new file mode 100755
index 0000000000000000000000000000000000000000..e565824aafafe632011b281cba976baf8b3ba89a
Binary files /dev/null and b/wp-content/themes/vanilla/images/blank.gif differ
diff --git a/wp-content/themes/vanilla/images/bullet.gif b/wp-content/themes/vanilla/images/bullet.gif
new file mode 100755
index 0000000000000000000000000000000000000000..e8f306714ee59e05b99a03d17d08f4b298925538
Binary files /dev/null and b/wp-content/themes/vanilla/images/bullet.gif differ
diff --git a/wp-content/themes/vanilla/images/by-crowd-favorite.gif b/wp-content/themes/vanilla/images/by-crowd-favorite.gif
new file mode 100644
index 0000000000000000000000000000000000000000..09097aa949e93f975c325d08517c3ebb5892635f
Binary files /dev/null and b/wp-content/themes/vanilla/images/by-crowd-favorite.gif differ
diff --git a/wp-content/themes/vanilla/images/by-crowd-favorite.png b/wp-content/themes/vanilla/images/by-crowd-favorite.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba7d36d8a18ddc8e0c4b807c9abf0d2d23c46c9c
Binary files /dev/null and b/wp-content/themes/vanilla/images/by-crowd-favorite.png differ
diff --git a/wp-content/themes/vanilla/images/comment.gif b/wp-content/themes/vanilla/images/comment.gif
new file mode 100644
index 0000000000000000000000000000000000000000..1a84c4e646404cb6b60b98df309f570e746e7ceb
Binary files /dev/null and b/wp-content/themes/vanilla/images/comment.gif differ
diff --git a/wp-content/themes/vanilla/images/comments-divider.gif b/wp-content/themes/vanilla/images/comments-divider.gif
new file mode 100644
index 0000000000000000000000000000000000000000..bd66ad2d2dce6d86ee3971cbcf2000c739985f6b
Binary files /dev/null and b/wp-content/themes/vanilla/images/comments-divider.gif differ
diff --git a/wp-content/themes/vanilla/images/css.png b/wp-content/themes/vanilla/images/css.png
new file mode 100755
index 0000000000000000000000000000000000000000..bbf7d57d0d0429574284d41a3bcdc662d9690881
Binary files /dev/null and b/wp-content/themes/vanilla/images/css.png differ
diff --git a/wp-content/themes/vanilla/images/default.png b/wp-content/themes/vanilla/images/default.png
new file mode 100755
index 0000000000000000000000000000000000000000..72ea539317a1074daee29a5a4d4775949180846e
Binary files /dev/null and b/wp-content/themes/vanilla/images/default.png differ
diff --git a/wp-content/themes/vanilla/images/divider-ornament-wide-dark.gif b/wp-content/themes/vanilla/images/divider-ornament-wide-dark.gif
new file mode 100644
index 0000000000000000000000000000000000000000..9ac3e5cad8f1240e19ffe80b73732900c7c1051b
Binary files /dev/null and b/wp-content/themes/vanilla/images/divider-ornament-wide-dark.gif differ
diff --git a/wp-content/themes/vanilla/images/divider-ornament-wide.gif b/wp-content/themes/vanilla/images/divider-ornament-wide.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a1653d68b5e787b9192f3382ee326401ec613edc
Binary files /dev/null and b/wp-content/themes/vanilla/images/divider-ornament-wide.gif differ
diff --git a/wp-content/themes/vanilla/images/divider-ornament.gif b/wp-content/themes/vanilla/images/divider-ornament.gif
new file mode 100644
index 0000000000000000000000000000000000000000..54f9a957ccb38c346f549b33cbcdbb3a54c1e0cb
Binary files /dev/null and b/wp-content/themes/vanilla/images/divider-ornament.gif differ
diff --git a/wp-content/themes/vanilla/images/doc.png b/wp-content/themes/vanilla/images/doc.png
new file mode 100755
index 0000000000000000000000000000000000000000..11c135a1df9bb4c66f2472461b1d54dd774f7d98
Binary files /dev/null and b/wp-content/themes/vanilla/images/doc.png differ
diff --git a/wp-content/themes/vanilla/images/dropdown-divider.gif b/wp-content/themes/vanilla/images/dropdown-divider.gif
new file mode 100644
index 0000000000000000000000000000000000000000..6c28dc507b7e1c4b7f7fbe39d20b8c3117c04d48
Binary files /dev/null and b/wp-content/themes/vanilla/images/dropdown-divider.gif differ
diff --git a/wp-content/themes/vanilla/images/exe.png b/wp-content/themes/vanilla/images/exe.png
new file mode 100755
index 0000000000000000000000000000000000000000..907756d609d44ef6a1cce8c0b422c5b6bc667042
Binary files /dev/null and b/wp-content/themes/vanilla/images/exe.png differ
diff --git a/wp-content/themes/vanilla/images/feed-icon.gif b/wp-content/themes/vanilla/images/feed-icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..a8a86b62a68963bd6e292f5bc281d81bd3ea3d3e
Binary files /dev/null and b/wp-content/themes/vanilla/images/feed-icon.gif differ
diff --git a/wp-content/themes/vanilla/images/footer-gradient.gif b/wp-content/themes/vanilla/images/footer-gradient.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a20829939f3b99f18137e417b210cbdfc6c10066
Binary files /dev/null and b/wp-content/themes/vanilla/images/footer-gradient.gif differ
diff --git a/wp-content/themes/vanilla/images/grey-to-white-gradient.png b/wp-content/themes/vanilla/images/grey-to-white-gradient.png
new file mode 100644
index 0000000000000000000000000000000000000000..b51819971172f24d53827e2cf8eaeaf625df9bae
Binary files /dev/null and b/wp-content/themes/vanilla/images/grey-to-white-gradient.png differ
diff --git a/wp-content/themes/vanilla/images/header-gradient.gif b/wp-content/themes/vanilla/images/header-gradient.gif
new file mode 100644
index 0000000000000000000000000000000000000000..af8185028dcfb8bdd8633f265a15016fb8a38243
Binary files /dev/null and b/wp-content/themes/vanilla/images/header-gradient.gif differ
diff --git a/wp-content/themes/vanilla/images/header-texture.jpg b/wp-content/themes/vanilla/images/header-texture.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..67351dbf114883b43a926ed3982bb3ba0164f863
Binary files /dev/null and b/wp-content/themes/vanilla/images/header-texture.jpg differ
diff --git a/wp-content/themes/vanilla/images/html.png b/wp-content/themes/vanilla/images/html.png
new file mode 100755
index 0000000000000000000000000000000000000000..8a4ebd194ecb706a7695333624a05fc5e4a207b5
Binary files /dev/null and b/wp-content/themes/vanilla/images/html.png differ
diff --git a/wp-content/themes/vanilla/images/js.png b/wp-content/themes/vanilla/images/js.png
new file mode 100755
index 0000000000000000000000000000000000000000..fd311e7d07de07dfdb27a8b82253d66a21c030c9
Binary files /dev/null and b/wp-content/themes/vanilla/images/js.png differ
diff --git a/wp-content/themes/vanilla/images/mail-icon.gif b/wp-content/themes/vanilla/images/mail-icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..ca7645edabd2d528e83ddc53b3e6aae80e675ae4
Binary files /dev/null and b/wp-content/themes/vanilla/images/mail-icon.gif differ
diff --git a/wp-content/themes/vanilla/images/ndash.gif b/wp-content/themes/vanilla/images/ndash.gif
new file mode 100644
index 0000000000000000000000000000000000000000..3707e8b14fd149fe18db4d14ca8ab5f64689e30a
Binary files /dev/null and b/wp-content/themes/vanilla/images/ndash.gif differ
diff --git a/wp-content/themes/vanilla/images/pdf.png b/wp-content/themes/vanilla/images/pdf.png
new file mode 100755
index 0000000000000000000000000000000000000000..90b7c8ec00cce9d6a32023fbc7549a63ee423e0c
Binary files /dev/null and b/wp-content/themes/vanilla/images/pdf.png differ
diff --git a/wp-content/themes/vanilla/images/pingback.jpg b/wp-content/themes/vanilla/images/pingback.jpg
new file mode 100755
index 0000000000000000000000000000000000000000..a9cf71e42b5b927a143cc70a5b9aeb0c982b667f
Binary files /dev/null and b/wp-content/themes/vanilla/images/pingback.jpg differ
diff --git a/wp-content/themes/vanilla/images/pre.png b/wp-content/themes/vanilla/images/pre.png
new file mode 100755
index 0000000000000000000000000000000000000000..176002b5e54618091846e63c2098d8acc5fb02d3
Binary files /dev/null and b/wp-content/themes/vanilla/images/pre.png differ
diff --git a/wp-content/themes/vanilla/images/quotes.gif b/wp-content/themes/vanilla/images/quotes.gif
new file mode 100755
index 0000000000000000000000000000000000000000..de9cc45cbab11b346ef5e0f38b622ee8a910a1be
Binary files /dev/null and b/wp-content/themes/vanilla/images/quotes.gif differ
diff --git a/wp-content/themes/vanilla/images/rss-button.gif b/wp-content/themes/vanilla/images/rss-button.gif
new file mode 100644
index 0000000000000000000000000000000000000000..729fbcb29aeacb1dfdf015c46684ee60eaddae28
Binary files /dev/null and b/wp-content/themes/vanilla/images/rss-button.gif differ
diff --git a/wp-content/themes/vanilla/images/rss.gif b/wp-content/themes/vanilla/images/rss.gif
new file mode 100755
index 0000000000000000000000000000000000000000..82c242b7dcca6febeff76c98c36fb4563647f16b
Binary files /dev/null and b/wp-content/themes/vanilla/images/rss.gif differ
diff --git a/wp-content/themes/vanilla/images/rss.png b/wp-content/themes/vanilla/images/rss.png
new file mode 100755
index 0000000000000000000000000000000000000000..6e7b676b345588a734dce002843a442520931170
Binary files /dev/null and b/wp-content/themes/vanilla/images/rss.png differ
diff --git a/wp-content/themes/vanilla/images/sample-ad.gif b/wp-content/themes/vanilla/images/sample-ad.gif
new file mode 100755
index 0000000000000000000000000000000000000000..55281860fcab94efc270b7d99cc5a224ab75734c
Binary files /dev/null and b/wp-content/themes/vanilla/images/sample-ad.gif differ
diff --git a/wp-content/themes/vanilla/images/sidebar-background.gif b/wp-content/themes/vanilla/images/sidebar-background.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b4d3848c658bd6c0dc73619ff97a28f4fac55faf
Binary files /dev/null and b/wp-content/themes/vanilla/images/sidebar-background.gif differ
diff --git a/wp-content/themes/vanilla/images/spinner.gif b/wp-content/themes/vanilla/images/spinner.gif
new file mode 100644
index 0000000000000000000000000000000000000000..fae79de44023f3d1484f9e19dc4dbaa8e3adfe75
Binary files /dev/null and b/wp-content/themes/vanilla/images/spinner.gif differ
diff --git a/wp-content/themes/vanilla/images/sub-header-border-bottom.gif b/wp-content/themes/vanilla/images/sub-header-border-bottom.gif
new file mode 100644
index 0000000000000000000000000000000000000000..cb5b83bd95594ed6364761ff50da0c82c273925e
Binary files /dev/null and b/wp-content/themes/vanilla/images/sub-header-border-bottom.gif differ
diff --git a/wp-content/themes/vanilla/images/subscribe.gif b/wp-content/themes/vanilla/images/subscribe.gif
new file mode 100755
index 0000000000000000000000000000000000000000..06d93d3b24e03ed425d0e02dbe1fcf71d0a4f10e
Binary files /dev/null and b/wp-content/themes/vanilla/images/subscribe.gif differ
diff --git a/wp-content/themes/vanilla/images/swf.png b/wp-content/themes/vanilla/images/swf.png
new file mode 100755
index 0000000000000000000000000000000000000000..1d12083afce29d99f1d660edfd8933767791df6b
Binary files /dev/null and b/wp-content/themes/vanilla/images/swf.png differ
diff --git a/wp-content/themes/vanilla/images/tar.png b/wp-content/themes/vanilla/images/tar.png
new file mode 100755
index 0000000000000000000000000000000000000000..78ea2f0362aa4e7b575f53154135282fe9a523b6
Binary files /dev/null and b/wp-content/themes/vanilla/images/tar.png differ
diff --git a/wp-content/themes/vanilla/images/text.png b/wp-content/themes/vanilla/images/text.png
new file mode 100755
index 0000000000000000000000000000000000000000..1213e997137115755410c330f054171534f811a8
Binary files /dev/null and b/wp-content/themes/vanilla/images/text.png differ
diff --git a/wp-content/themes/vanilla/images/trackback.jpg b/wp-content/themes/vanilla/images/trackback.jpg
new file mode 100755
index 0000000000000000000000000000000000000000..a9cf71e42b5b927a143cc70a5b9aeb0c982b667f
Binary files /dev/null and b/wp-content/themes/vanilla/images/trackback.jpg differ
diff --git a/wp-content/themes/vanilla/images/video.png b/wp-content/themes/vanilla/images/video.png
new file mode 100755
index 0000000000000000000000000000000000000000..0a489a28a0c272aeb8006c63fa40507fa3f8c795
Binary files /dev/null and b/wp-content/themes/vanilla/images/video.png differ
diff --git a/wp-content/themes/vanilla/images/watermark-light.gif b/wp-content/themes/vanilla/images/watermark-light.gif
new file mode 100644
index 0000000000000000000000000000000000000000..95b67a6e44f570d61cccd9000f7a77a028b96a64
Binary files /dev/null and b/wp-content/themes/vanilla/images/watermark-light.gif differ
diff --git a/wp-content/themes/vanilla/images/zip.png b/wp-content/themes/vanilla/images/zip.png
new file mode 100755
index 0000000000000000000000000000000000000000..f7ebd9d67d387b5a93b6dd0ab7c1ce947fdb3a21
Binary files /dev/null and b/wp-content/themes/vanilla/images/zip.png differ
diff --git a/wp-content/themes/vanilla/index.php b/wp-content/themes/vanilla/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..7ac452cea89ee37021522ae6b4b96a28d1ed3aba
--- /dev/null
+++ b/wp-content/themes/vanilla/index.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_posts();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/js/carrington.js b/wp-content/themes/vanilla/js/carrington.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ae9c894731be7092a3b260fdd9dba73c20ba920
--- /dev/null
+++ b/wp-content/themes/vanilla/js/carrington.js
@@ -0,0 +1,49 @@
+jQuery.noConflict();
+
+cfct = {}
+
+cfct.loading = function() {
+	return '<div class="loading"><span>Loading...</span></div>';
+}
+
+cfct.ajax_post_content = function() {
+	jQuery('ol.archive .excerpt .entry-title a').unbind().click(function() {
+		var post_id = jQuery(this).attr('rev').replace('post-', '');
+		jQuery('#post-excerpt-' + post_id).hide();
+		jQuery('#post-content-' + post_id + '-target').html(cfct.loading()).load(CFCT_URL + '/index.php?cfct_action=post_content&id=' + post_id, cfct.ajax_post_comments);
+		return false;
+	});
+}
+
+cfct.ajax_post_comments = function() {
+	jQuery('p.comments-link a').unbind().click(function() {
+		var post_id = jQuery(this).attr('rev').replace('post-', '');
+		jQuery(this).parent().hide();
+		jQuery('#post-comments-' + post_id + '-target').html(cfct.loading()).load(CFCT_URL + '/index.php?cfct_action=post_comments&id=' + post_id);
+		return false;
+	});
+}
+
+jQuery(document).ready(function($) {
+	// suckerfish dropdown fixes for IE
+	$('#navigation li, #all-categories li').mouseover(function() {
+		$(this).addClass('hover');
+	});
+	$('#navigation li, #all-categories li').mouseout(function() {
+		$(this).removeClass('hover');
+	});
+	// :first-child fix for IE
+	$('#navigation li li:first-child, #all-categories li li:first-child').addClass('first');
+	// :hover fix for full articles in IE
+	$('.full').mouseover(function() {
+		$(this).addClass('hover');
+	});
+	$('.full').mouseout(function() {
+		$(this).removeClass('hover');
+	});
+	if ((!$.browser.msie || $.browser.version.substr(0,1) != '6') && typeof CFCT_AJAX_LOAD != 'undefined' && CFCT_AJAX_LOAD) {
+		cfct.ajax_post_content();
+		cfct.ajax_post_comments();
+	}
+	$('#navigation li a, #all-categories li a').removeAttr('title');
+});
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/js/common.js b/wp-content/themes/vanilla/js/common.js
new file mode 100755
index 0000000000000000000000000000000000000000..9252046d868bf5dc2a6ff5c5bc9a3a6e82e808ee
--- /dev/null
+++ b/wp-content/themes/vanilla/js/common.js
@@ -0,0 +1 @@
+eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('b $j=c.d();$j(e).f(6(){$j(\'g.5\').h(6(){0=$j(1).0();0=0.i(/\\((.*)\\)/k," ");l($j(1).m(".7"))$j(1).8().9(\'<2 a="5 7"><3>&4;\'+0+\'&4;</3></2>\');n $j(1).8().9(\'<2 a="5 o"><3>&4;\'+0+\'&4;</3></2>\')})});',25,25,'text|this|blockquote|p|quot|pullquote|function|alignright|parent|before|class|var|jQuery|noConflict|document|ready|span|each|replace||gi|if|is|else|alignleft'.split('|'),0,{}))
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/js/flash-embed.js b/wp-content/themes/vanilla/js/flash-embed.js
new file mode 100755
index 0000000000000000000000000000000000000000..c340392d547234771cfbd67409f881da5c8dfe68
--- /dev/null
+++ b/wp-content/themes/vanilla/js/flash-embed.js
@@ -0,0 +1,16 @@
+/** 
+ * flashembed 0.31. Adobe Flash embedding script
+ * 
+ * http://flowplayer.org/tools/flash-embed.html
+ *
+ * Copyright (c) 2008 Tero Piirainen (tipiirai@gmail.com)
+ *
+ * Released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ * 
+ * >> Basically you can do anything you want but leave this header as is <<
+ *
+ * version 0.01 - 03/11/2008 
+ * version 0.31 - Tue Jul 22 2008 06:30:32 GMT+0200 (GMT+02:00)
+ */
+eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('8 q(f,e,m){8 12(){4 b="";3(u m==\'8\'){m=m()}3(E.Q&&E.1k&&E.1k.1h){b=\'<1M 1F="1C/x-1s-18" \';3(l.w){G(l,{R:l.w})}F(4 a B l){3(l[a]!==z){b+=[a]+\'="\'+l[a]+\'"\\n\\t\'}}3(m){b+=\'1m=\\\'\'+1d(m)+\'\\\'\'}b+=\'/>\'}y{b=\'<D 2A="2x:2s-2q-2n-2k-2i" \';b+=\'U="\'+l.U+\'" N="\'+l.N+\'"\';3(!l.w&&M.28){l.w="26"+(""+25.23()).1n(5)}3(l.w){b+=\' w="\'+l.w+\'"\'}b+=\'>\';b+=\'\\n\\t<11 R="1W" Y="\'+l.H+\'" />\';l.w=l.H=l.U=l.N=z;F(4 k B l){3(l[k]!==z){b+=\'\\n\\t<11 R="\'+k+\'" Y="\'+l[k]+\'" />\'}}3(m){b+=\'\\n\\t<11 R="1m" Y=\\\'\'+1d(m)+\'\\\' />\'}b+="</D>";3(p){1Q(b)}}9 b}8 1f(d){4 c=1I(8(){4 a=M;4 b=a.Z(d);3(b){q(b,e,m);1E(c)}y 3(a&&a.2H&&a.Z&&a.2D){1E(c)}},13);9 1B}8 G(b,a){3(a){F(O B a){3(a.16(O)){b[O]=a[O]}}}}4 l={H:\'#\',U:\'1x%\',N:\'1x%\',A:z,V:z,1b:z,1a:1t,2o:\'#2m\',2l:1B,2j:\'1q\',2h:\'2g\',1F:\'1C/x-1s-18\',1p:\'2d://2c.2b.2a/29/27\'};3(u e==\'15\'){e={H:e}}G(l,e);4 h=q.K();4 g=l.A;4 o=l.1b;4 p=l.1a;3(u f==\'15\'){4 n=M.Z(f);3(n){f=n}y{9 1f(f)}}3(!f){9}3(!g||q.14(g)){l.V=l.A=l.1b=l.1a=z;f.I=12();9 f.21}y 3(l.V){4 j=l.V.1Z(l,q.K(),m);3(j){f.I=j}}y 3(g&&o&&q.14([6,1Y])){G(l,{H:o});m={1X:1V.1j,1U:\'1T\',1S:M.1R};f.I=12()}y{3(f.I.v(/\\s/g,\'\')!==\'\'){}y{f.I="<1i>X A "+g+" 1P 1O 1g 1N</1i>"+"<1l>"+(h[0]>0?"1L A 1g "+h:"1K 1J 20 18 1H 22")+"</1l>"+"<p>1G 24 A 2J <a 1j=\'"+l.1p+"\'>2I</a></p>"}}8 1d(a){4 b="";F(4 c B a){3(a[c]){b+=[c]+\'=\'+W(a[c])+\'&\'}}9 b.1n(0,b.1h-1)}8 W(b){2C(1D(b)){T\'15\':9\'"\'+b.v(L 2B(\'(["\\\\\\\\])\',\'g\'),\'\\\\$1\')+\'"\';T\'1A\':9\'[\'+1z(b,8(a){9 W(a)}).1o(\',\')+\']\';T\'8\':9\'"8()"\';T\'D\':4 c=[];F(4 d B b){3(b.16(d)){c.1y(\'"\'+d+\'":\'+W(b[d]))}}9\'{\'+c.1o(\',\')+\'}\'}9 2y(b).v(/\\s/g," ").v(/\\\'/g,"\\"")}8 1D(a){3(a===z||a===19){9 1t}4 b=u a;9(b==\'D\'&&a.1y)?\'1A\':b}3(17.1w){17.1w("2w",8(){2v=8(){};2t=8(){}})}8 1z(c,a){4 b=[];F(4 i B c){3(c.16(i)){b[i]=a(c[i])}}9 b}9 f}3(u 1v==\'8\'){(8($){$.2r.G({q:8(b,a){9 1u.2p(8(){q(1u,b,a)})}})})(1v)}q=q||{};q.K=8(){4 d=[0,0];3(E.Q&&u E.Q["1r X"]=="D"){4 f=E.Q["1r X"].2u;3(u f!="19"){f=f.v(/^.*\\s+(\\S+\\s+\\S+$)/,"$1");4 c=J(f.v(/^(.*)\\..*$/,"$1"),10);4 a=/r/.2z(f)?J(f.v(/^.*r(.*)$/,"$1"),10):0;d=[c,a]}}y 3(17.P){1e{4 b=L P("C.C.7")}1c(e){1e{b=L P("C.C.6");d=[6,0];b.2E="1q"}1c(2F){3(d[0]==6){9}}1e{b=L P("C.C")}1c(2G){}}3(u b=="D"){f=b.2f("$A");3(u f!="19"){f=f.v(/^\\S+\\s+(.*)$/,"$1").2e(",");d=[J(f[0],10),J(f[2],10)]}}}9 d};q.14=8(c){4 a=q.K();4 b=(a[0]>c[0])||(a[0]==c[0]&&a[1]>=c[1]);9 b};',62,170,'|||if|var||||function|return|||||||||||||||||flashembed||||typeof|replace|id||else|null|version|in|ShockwaveFlash|object|navigator|for|extend|src|innerHTML|parseInt|getVersion|new|document|height|key|ActiveXObject|plugins|name||case|width|onFail|asString|Flash|value|getElementById||param|getHTML||isSupported|string|hasOwnProperty|window|flash|undefined|debug|expressInstall|catch|concatVars|try|init|is|length|h2|href|mimeTypes|h3|flashvars|substring|join|pluginspage|always|Shockwave|shockwave|false|this|jQuery|attachEvent|100|push|map|array|true|application|typeOf|clearInterval|type|Download|plugin|setInterval|have|You|Your|embed|required|greater|or|alert|title|MMdoctitle|PlugIn|MMplayerType|location|movie|MMredirectURL|65|call|no|firstChild|installed|random|latest|Math|_|getflashplayer|all|go|com|adobe|www|http|split|GetVariable|high|quality|444553540000|allowscriptaccess|96B8|allowfullscreen|ffffff|11cf|bgcolor|each|AE6D|fn|D27CDB6E|__flash_savedUnloadHandler|description|__flash_unloadHandler|onbeforeunload|clsid|String|test|classid|RegExp|switch|body|AllowScriptAccess|ee|eee|getElementsByTagName|here|from'.split('|'),0,{}))
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/js/iepngfix.htc b/wp-content/themes/vanilla/js/iepngfix.htc
new file mode 100755
index 0000000000000000000000000000000000000000..f294365a1aefaa04ab0074c3aa830eed3071c5ae
--- /dev/null
+++ b/wp-content/themes/vanilla/js/iepngfix.htc
@@ -0,0 +1,103 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="iePNGFix(0)" />
+
+<script type="text/javascript">
+
+// IE5.5+ PNG Alpha Fix v1.0
+// (c) 2004-2008 Angus Turnbull http://www.twinhelix.com
+
+// This is licensed under the GNU LGPL, version 2.1 or later.
+// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
+
+
+// This must be a path to a blank image, relative to the HTML document(s).
+// In production use I suggest '/images/blank.gif' or similar. That's all!
+if (typeof blankImg == 'undefined') var blankImg = 'images/blank.gif';
+
+
+
+function filt(s, b)
+{
+ var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+ var sM = (currentStyle.backgroundRepeat == 'no-repeat') ? 'crop' : 'scale';
+ s = (s || '').replace(/\(/g, '%28').replace(/\)/g, '%29');
+
+ if (s && !(/IMG|INPUT/.test(nodeName) && !b) &&
+  currentStyle.width == 'auto' && currentStyle.height == 'auto')
+ {
+  style.width = offsetWidth + 'px';
+  style.height = clientHeight + 'px';
+  if (currentStyle.display == 'inline') style.display = 'inline-block';
+ }
+
+ if (filters[f])
+ {
+  filters[f].enabled = s ? true : false;
+  if (s) with (filters[f]) { src = s }
+ }
+ else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="' + sM + '")';
+}
+
+function iePNGFix(init)
+{
+ if (!/MSIE (5\.5|6)/.test(navigator.userAgent) || typeof filters == 'unknown') return;
+ var evt = init ? { propertyName: 'src,background' } : event;
+ var isSrc = /src/.test(evt.propertyName);
+ var isBg = /background/.test(evt.propertyName);
+ var isClass = !init &&
+  ((this.className != this._png_class) && (this.className || this._png_class));
+ if (!(isSrc || isBg || isClass)) return;
+ this._png_class = this.className;
+ var blank = blankImg.match(/([^\/]+)$/)[1];
+
+ // Required for Whatever:hover support - erase any set BG if className changes.
+ if (isClass && ((style.backgroundImage.indexOf('url(') == -1) ||
+     (style.backgroundImage.indexOf(blank) > -1)))
+ {
+  setTimeout(function() { this.style.backgroundImage = '' }, 0);
+  return;
+ }
+
+ if (isSrc && this.src && /IMG|INPUT/.test(nodeName))
+ {
+  if ((/\.png/i).test(src))
+  {
+   filt(src, 1);
+   src = blankImg;
+  }
+  else if (src.indexOf(blank) == -1) filt();
+ }
+
+ var bgSrc = currentStyle.backgroundImage || style.backgroundImage;
+ if ((bgSrc + this.src).indexOf(blank) == -1)
+ {
+  var bgPNG = bgSrc.match(/^url[("']+(.*\.png[^\)"']*)[\)"']+[^\)]*$/i);
+
+  if (bgPNG)
+  {
+   style.backgroundImage = 'url("' + blankImg + '")';
+   filt(bgPNG[1], 0);
+   // Unclickable elements inside PNG backgrounds.
+   var tags = ['a', 'input', 'select', 'textarea', 'iframe', 'object'],
+    t = tags.length, tFix = [];
+   while (t--)
+   {
+    var elms = all.tags(tags[t]), e = elms.length;
+    while (e--) tFix.push(elms[e]);
+   }
+   var t = tFix.length;
+   if (t && (/relative|absolute/i).test(currentStyle.position))
+    alert('IEPNGFix: Children of positioned element are unclickable:\n\n<' +
+     nodeName + (id && ' id=' + id) + '>');
+    while (t--)
+     if (!(/relative|absolute/i).test(tFix[t].currentStyle.position))
+      tFix[t].style.position = 'relative';
+  }
+  else filt();
+ }
+}
+
+iePNGFix(1);
+
+</script>
+</public:component>
diff --git a/wp-content/themes/vanilla/js/images/blank.gif b/wp-content/themes/vanilla/js/images/blank.gif
new file mode 100755
index 0000000000000000000000000000000000000000..75b945d2553848b8b6f41fe5e24599c0687b8472
Binary files /dev/null and b/wp-content/themes/vanilla/js/images/blank.gif differ
diff --git a/wp-content/themes/vanilla/js/jquery/effects.blind.js b/wp-content/themes/vanilla/js/jquery/effects.blind.js
new file mode 100755
index 0000000000000000000000000000000000000000..932387c789c033b0c2ea07b25524a67e1f3b78ed
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.blind.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(3(A){A.2.z=3(B){y d.x(3(){1 D=A(d),C=["w","v","u"];1 H=A.2.t(D,B.6.s||"5");1 G=B.6.r||"8";A.2.q(D,C);D.7();1 J=A.2.p(D).a({o:"n"});1 E=(G=="8")?"c":"b";1 I=(G=="8")?J.c():J.b();4(H=="7"){J.a(E,0)}1 F={};F[E]=H=="7"?I:0;J.m(F,B.l,B.6.k,3(){4(H=="5"){D.5()}A.2.j(D,C);A.2.i(D);4(B.9){B.9.h(D[0],g)}D.f()})})}})(e)',46,46,'|var|effects|function|if|hide|options|show|vertical|callback|css|width|height|this|jQuery|dequeue|arguments|apply|removeWrapper|restore|easing|duration|animate|hidden|overflow|createWrapper|save|direction|mode|setMode|left|top|position|queue|return|blind||||||||||'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.bounce.js b/wp-content/themes/vanilla/js/jquery/effects.bounce.js
new file mode 100755
index 0000000000000000000000000000000000000000..e2b7d3048c094d9d566b9ff6fe5ea62bb48c28ff
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.bounce.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(a(A){A.8.16=a(B){15 e.m(a(){4 E=A(e),K=["14","i","j"];4 J=A.8.13(E,B.6.12||"11");4 M=B.6.10||"k";4 C=B.6.u||Z;4 D=B.6.Y||5;4 G=B.X||W;7(/h|d/.V(J)){K.U("g")}A.8.T(E,K);E.h();A.8.S(E);4 F=(M=="k"||M=="R")?"i":"j";4 O=(M=="k"||M=="j")?"9":"Q";4 C=B.6.u||(F=="i"?E.P({t:s})/3:E.z({t:s})/3);7(J=="h"){E.r("g",0).r(F,O=="9"?-C:C)}7(J=="d"){C=C/(D*2)}7(J!="d"){D--}7(J=="h"){4 H={g:1};H[F]=(O=="9"?"+=":"-=")+C;E.c(H,G/2,B.6.b);C=C/2;D--}y(4 I=0;I<D;I++){4 N={},L={};N[F]=(O=="9"?"-=":"+=")+C;L[F]=(O=="9"?"+=":"-=")+C;E.c(N,G/2,B.6.b).c(L,G/2,B.6.b);C=(J=="d")?C*2:C/2}7(J=="d"){4 H={g:0};H[F]=(O=="9"?"-=":"+=")+C;E.c(H,G/2,B.6.b,a(){E.d();A.8.q(E,K);A.8.p(E);7(B.f){B.f.o(e,n)}})}x{4 N={},L={};N[F]=(O=="9"?"-=":"+=")+C;L[F]=(O=="9"?"+=":"-=")+C;E.c(N,G/2,B.6.b).c(L,G/2,B.6.b,a(){A.8.q(E,K);A.8.p(E);7(B.f){B.f.o(e,n)}})}E.m("w",a(){E.l()});E.l()})}})(v)',62,69,'||||var||options|if|effects|pos|function|easing|animate|hide|this|callback|opacity|show|top|left|up|dequeue|queue|arguments|apply|removeWrapper|restore|css|true|margin|distance|jQuery|fx|else|for|outerWidth||||||||||||||||outerHeight|neg|down|createWrapper|save|push|test|250|duration|times|20|direction|effect|mode|setMode|position|return|bounce'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.clip.js b/wp-content/themes/vanilla/js/jquery/effects.clip.js
new file mode 100755
index 0000000000000000000000000000000000000000..3e068744e1d55fc0561648c0c5dcdfe1d78b6b3c
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.clip.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(4(A){A.3.Q=4(B){P l.i(4(){1 F=A(l),J=["6","k","j","e","d"];1 I=A.3.O(F,B.a.N||"9");1 K=B.a.M||"7";A.3.L(F,J);F.5();1 C=A.3.z(F).c({y:"x"});1 E=F[0].w=="v"?C:F;1 G={b:(K=="7")?"e":"d",6:(K=="7")?"k":"j"};1 D=(K=="7")?E.e():E.d();8(I=="5"){E.c(G.b,0);E.c(G.6,D/2)}1 H={};H[G.b]=I=="5"?D:0;H[G.6]=I=="5"?0:D/2;E.u(H,{i:t,h:B.h,g:B.a.g,s:4(){8(I=="9"){F.9()}A.3.r(F,J);A.3.q(F);8(B.f){B.f.p(F[0],o)}F.n()}})})}})(m)',53,53,'|var||effects|function|show|position|vertical|if|hide|options|size|css|width|height|callback|easing|duration|queue|left|top|this|jQuery|dequeue|arguments|apply|removeWrapper|restore|complete|false|animate|IMG|tagName|hidden|overflow|createWrapper||||||||||||save|direction|mode|setMode|return|clip'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.core.js b/wp-content/themes/vanilla/js/jquery/effects.core.js
new file mode 100755
index 0000000000000000000000000000000000000000..328813e8f144663ec6f90143e98f1ea23fe098b1
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.core.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(b(C){C.r=C.r||{};C.14(C.r,{52:b(F,G){1T(d E=0;E<G.1m;E++){8(G[E]!==U){C.2D(F[0],"2C.2B."+G[E],F[0].Q[G[E]])}}},51:b(F,G){1T(d E=0;E<G.1m;E++){8(G[E]!==U){F.k(G[E],C.2D(F[0],"2C.2B."+G[E]))}}},4Z:b(E,F){8(F=="t"){F=E.4Y(":4X")?"1c":"1r"}6 F},4W:b(F,G){d H,E;2A(F[0]){12"1e":H=0;S;12"4V":H=0.5;S;12"2q":H=1;S;2z:H=F[0]/G.2x}2A(F[1]){12"1f":E=0;S;12"4U":E=0.5;S;12"2p":E=1;S;2z:E=F[1]/G.2y}6{x:E,y:H}},4T:b(F){8(F.1v().W("1V")=="1U"){6 F}d E={2y:F.4S({1X:2w}),2x:F.4R({1X:2w}),"2v":F.k("2v")};F.4Q(\'<2u 1V="1U" Q="4P-4O:2c%;4N:1i;4M:4L;1X:0;4K:0"></2u>\');d I=F.1v();8(F.k("R")=="1R"){I.k({R:"1W"});F.k({R:"1W"})}m{d H=F.k("1e");8(1S(j(H))){H="2t"}d G=F.k("1f");8(1S(j(G))){G="2t"}I.k({R:F.k("R"),1e:H,1f:G,4J:F.k("z-4I")}).1c();F.k({R:"1W",1e:0,1f:0})}I.k(E);6 I},4H:b(E){8(E.1v().W("1V")=="1U"){6 E.1v().4G(E)}6 E},4F:b(F,G,E,H){H=H||{};C.1n(G,b(J,I){1u=F.2g(I);8(1u[0]>0){H[I]=1u[0]*E+1u[1]}});6 H},19:b(G,H,J,I){d E=(1d J=="b"?J:(I?I:U));d F=(1d J=="1P"?J:U);6 e.1n(b(){d O={};d M=C(e);d N=M.W("Q")||"";8(1d N=="1P"){N=N["1O"]}8(G.t){M.4E(G.t)?G.p=G.t:G.q=G.t}d K=C.14({},(1t.1s?1t.1s.2s(e,U):e.2r));8(G.q){M.1b(G.q)}8(G.p){M.1a(G.p)}d L=C.14({},(1t.1s?1t.1s.2s(e,U):e.2r));8(G.q){M.1a(G.q)}8(G.p){M.1b(G.p)}1T(d P 4D L){8(1d L[P]!="b"&&L[P]&&P.1H("4C")==-1&&P.1H("1m")==-1&&L[P]!=K[P]&&(P.1Q(/1G/i)||(!P.1Q(/1G/i)&&!1S(j(L[P],10))))&&(K.R!="1R"||(K.R=="1R"&&!P.1Q(/1f|1e|2q|2p/)))){O[P]=L[P]}}M.4B(O,H,F,b(){8(1d C(e).W("Q")=="1P"){C(e).W("Q")["1O"]="";C(e).W("Q")["1O"]=N}m{C(e).W("Q",N)}8(G.q){C(e).1b(G.q)}8(G.p){C(e).1a(G.p)}8(E){E.l(e,g)}})})}});C.V.14({2o:C.V.1c,2n:C.V.1r,2m:C.V.t,2l:C.V.1b,2k:C.V.1a,2i:C.V.2j,1q:b(E,G,F,H){6 C.r[E]?C.r[E].4A(e,{4z:E,4y:G||{},1p:F,1o:H}):U},1c:b(){8(!g[0]||(g[0].17==1N||/(1M|1L|1K)/.1J(g[0]))){6 e.2o.l(e,g)}m{d E=g[1]||{};E["1I"]="1c";6 e.1q.l(e,[g[0],E,g[2]||E.1p,g[3]||E.1o])}},1r:b(){8(!g[0]||(g[0].17==1N||/(1M|1L|1K)/.1J(g[0]))){6 e.2n.l(e,g)}m{d E=g[1]||{};E["1I"]="1r";6 e.1q.l(e,[g[0],E,g[2]||E.1p,g[3]||E.1o])}},t:b(){8(!g[0]||(g[0].17==1N||/(1M|1L|1K)/.1J(g[0]))||(g[0].17==4x)){6 e.2m.l(e,g)}m{d E=g[1]||{};E["1I"]="t";6 e.1q.l(e,[g[0],E,g[2]||E.1p,g[3]||E.1o])}},1b:b(F,E,H,G){6 E?C.r.19.l(e,[{q:F},E,H,G]):e.2l(F)},1a:b(F,E,H,G){6 E?C.r.19.l(e,[{p:F},E,H,G]):e.2k(F)},2j:b(F,E,H,G){6 E?C.r.19.l(e,[{t:F},E,H,G]):e.2i(F)},2h:b(E,G,F,I,H){6 C.r.19.l(e,[{q:G,p:E},F,I,H])},4w:b(){6 e.2h.l(e,g)},2g:b(E){d F=e.k(E),G=[];C.1n(["4v","4u","%","4t"],b(H,I){8(F.1H(I)>0){G=[1l(F),I]}});6 G}});h.1n(["2e","4s","4r","4q","4p","1G","4o"],b(F,E){h.4n.4m[E]=b(G){8(G.4l==0){G.T=D(G.2f,E);G.18=B(G.18)}G.2f.Q[E]="1C("+[c.1F(c.1E(j((G.1D*(G.18[0]-G.T[0]))+G.T[0]),f),0),c.1F(c.1E(j((G.1D*(G.18[1]-G.T[1]))+G.T[1]),f),0),c.1F(c.1E(j((G.1D*(G.18[2]-G.T[2]))+G.T[2]),f),0)].4k(",")+")"}});b B(F){d E;8(F&&F.17==4j&&F.1m==3){6 F}8(E=/1C\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.15(F)){6[j(E[1]),j(E[2]),j(E[3])]}8(E=/1C\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.15(F)){6[1l(E[1])*2.1B,1l(E[2])*2.1B,1l(E[3])*2.1B]}8(E=/#([a-11-Z-9]{2})([a-11-Z-9]{2})([a-11-Z-9]{2})/.15(F)){6[j(E[1],16),j(E[2],16),j(E[3],16)]}8(E=/#([a-11-Z-9])([a-11-Z-9])([a-11-Z-9])/.15(F)){6[j(E[1]+E[1],16),j(E[2]+E[2],16),j(E[3]+E[3],16)]}8(E=/4i\\(0, 0, 0, 0\\)/.15(F)){6 A["1i"]}6 A[h.4h(F).4g()]}b D(G,E){d F;4f{F=h.4e(G,E);8(F!=""&&F!="1i"||h.4d(G,"4c")){S}E="2e"}4b(G=G.4a);6 B(F)}d A={49:[0,f,f],48:[2a,f,f],46:[2d,2d,45],44:[0,0,0],43:[0,0,f],41:[24,42,42],40:[0,f,f],3Z:[0,0,Y],3Y:[0,Y,Y],3X:[1A,1A,1A],3W:[0,2c,0],3V:[3U,3T,2b],3S:[Y,0,Y],3R:[3Q,2b,47],3P:[f,29,0],3O:[3N,50,3M],3L:[Y,0,0],3K:[3J,3I,3H],3G:[3F,0,1k],3E:[f,0,f],3D:[f,3C,0],3B:[0,o,0],3A:[v,0,3z],3y:[2a,28,29],3x:[3w,3v,28],3u:[26,f,f],3t:[27,3s,27],3r:[1k,1k,1k],3q:[f,3p,3o],3n:[f,f,26],3m:[0,f,0],3l:[f,0,f],3k:[o,0,0],3j:[0,0,o],3i:[o,o,0],3h:[f,24,0],3g:[f,1j,3f],3e:[o,0,o],3d:[o,0,o],3c:[f,0,0],3b:[1j,1j,1j],3a:[f,f,f],39:[f,f,0],1i:[f,f,f]};h.u["38"]=h.u["23"];h.14(h.u,{22:"21",23:b(F,G,E,I,H){6 h.u[h.u.22](F,G,E,I,H)},37:b(F,G,E,I,H){6 I*(G/=H)*G+E},21:b(F,G,E,I,H){6-I*(G/=H)*(G-2)+E},36:b(F,G,E,I,H){8((G/=H/2)<1){6 I/2*G*G+E}6-I/2*((--G)*(G-2)-1)+E},35:b(F,G,E,I,H){6 I*(G/=H)*G*G+E},34:b(F,G,E,I,H){6 I*((G=G/H-1)*G*G+1)+E},33:b(F,G,E,I,H){8((G/=H/2)<1){6 I/2*G*G*G+E}6 I/2*((G-=2)*G*G+2)+E},32:b(F,G,E,I,H){6 I*(G/=H)*G*G*G+E},31:b(F,G,E,I,H){6-I*((G=G/H-1)*G*G*G-1)+E},30:b(F,G,E,I,H){8((G/=H/2)<1){6 I/2*G*G*G*G+E}6-I/2*((G-=2)*G*G*G-2)+E},2Z:b(F,G,E,I,H){6 I*(G/=H)*G*G*G*G+E},2Y:b(F,G,E,I,H){6 I*((G=G/H-1)*G*G*G*G+1)+E},2X:b(F,G,E,I,H){8((G/=H/2)<1){6 I/2*G*G*G*G*G+E}6 I/2*((G-=2)*G*G*G*G+2)+E},2W:b(F,G,E,I,H){6-I*c.20(G/H*(c.n/2))+I+E},2V:b(F,G,E,I,H){6 I*c.13(G/H*(c.n/2))+E},2U:b(F,G,E,I,H){6-I/2*(c.20(c.n*G/H)-1)+E},2T:b(F,G,E,I,H){6(G==0)?E:I*c.w(2,10*(G/H-1))+E},2S:b(F,G,E,I,H){6(G==H)?E+I:I*(-c.w(2,-10*G/H)+1)+E},2R:b(F,G,E,I,H){8(G==0){6 E}8(G==H){6 E+I}8((G/=H/2)<1){6 I/2*c.w(2,10*(G-1))+E}6 I/2*(-c.w(2,-10*--G)+2)+E},2Q:b(F,G,E,I,H){6-I*(c.1h(1-(G/=H)*G)-1)+E},2P:b(F,G,E,I,H){6 I*c.1h(1-(G=G/H-1)*G)+E},2O:b(F,G,E,I,H){8((G/=H/2)<1){6-I/2*(c.1h(1-G*G)-1)+E}6 I/2*(c.1h(1-(G-=2)*G)+1)+E},2N:b(F,H,E,L,K){d I=1.X;d J=0;d G=L;8(H==0){6 E}8((H/=K)==1){6 E+L}8(!J){J=K*0.3}8(G<c.1z(L)){G=L;d I=J/4}m{d I=J/(2*c.n)*c.1y(L/G)}6-(G*c.w(2,10*(H-=1))*c.13((H*K-I)*(2*c.n)/J))+E},2M:b(F,H,E,L,K){d I=1.X;d J=0;d G=L;8(H==0){6 E}8((H/=K)==1){6 E+L}8(!J){J=K*0.3}8(G<c.1z(L)){G=L;d I=J/4}m{d I=J/(2*c.n)*c.1y(L/G)}6 G*c.w(2,-10*H)*c.13((H*K-I)*(2*c.n)/J)+L+E},2L:b(F,H,E,L,K){d I=1.X;d J=0;d G=L;8(H==0){6 E}8((H/=K/2)==2){6 E+L}8(!J){J=K*(0.3*1.5)}8(G<c.1z(L)){G=L;d I=J/4}m{d I=J/(2*c.n)*c.1y(L/G)}8(H<1){6-0.5*(G*c.w(2,10*(H-=1))*c.13((H*K-I)*(2*c.n)/J))+E}6 G*c.w(2,-10*(H-=1))*c.13((H*K-I)*(2*c.n)/J)*0.5+L+E},2K:b(F,G,E,J,I,H){8(H==1x){H=1.X}6 J*(G/=I)*G*((H+1)*G-H)+E},2J:b(F,G,E,J,I,H){8(H==1x){H=1.X}6 J*((G=G/I-1)*G*((H+1)*G+H)+1)+E},2I:b(F,G,E,J,I,H){8(H==1x){H=1.X}8((G/=I/2)<1){6 J/2*(G*G*(((H*=(1.1Z))+1)*G-H))+E}6 J/2*((G-=2)*G*(((H*=(1.1Z))+1)*G+H)+2)+E},1Y:b(F,G,E,I,H){6 I-h.u.1w(F,H-G,0,I,H)+E},1w:b(F,G,E,I,H){8((G/=H)<(1/2.v)){6 I*(7.1g*G*G)+E}m{8(G<(2/2.v)){6 I*(7.1g*(G-=(1.5/2.v))*G+0.v)+E}m{8(G<(2.5/2.v)){6 I*(7.1g*(G-=(2.25/2.v))*G+0.2H)+E}m{6 I*(7.1g*(G-=(2.2G/2.v))*G+0.2F)+E}}}},2E:b(F,G,E,I,H){8(G<H/2){6 h.u.1Y(F,G*2,0,I,H)*0.5+E}6 h.u.1w(F,G*2-H,0,I,H)*0.5+I*0.5+E}})})(h)',62,313,'||||||return||if|||function|Math|var|this|255|arguments|jQuery||parseInt|css|apply|else|PI|128|remove|add|effects||toggle|easing|75|pow||||||||||||||||||||style|position|break|start|null|fn|attr|70158|139|F0||fA|case|sin|extend|exec||constructor|end|animateClass|removeClass|addClass|show|typeof|top|left|5625|sqrt|transparent|192|211|parseFloat|length|each|callback|duration|effect|hide|defaultView|document|unit|parent|easeOutBounce|undefined|asin|abs|169|55|rgb|pos|min|max|color|indexOf|mode|test|fast|normal|slow|Number|cssText|object|match|static|isNaN|for|fxWrapper|id|relative|margin|easeInBounce|525|cos|easeOutQuad|def|swing|165||224|144|230|140|240|107|100|245|backgroundColor|elem|cssUnit|morph|_toggleClass|toggleClass|_removeClass|_addClass|__toggle|_hide|_show|right|bottom|currentStyle|getComputedStyle|auto|div|float|true|height|width|default|switch|storage|ec|data|easeInOutBounce|984375|625|9375|easeInOutBack|easeOutBack|easeInBack|easeInOutElastic|easeOutElastic|easeInElastic|easeInOutCirc|easeOutCirc|easeInCirc|easeInOutExpo|easeOutExpo|easeInExpo|easeInOutSine|easeOutSine|easeInSine|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|easeInOutCubic|easeOutCubic|easeInCubic|easeInOutQuad|easeInQuad|jswing|yellow|white|silver|red|violet|purple|203|pink|orange|olive|navy|maroon|magenta|lime|lightyellow|193|182|lightpink|lightgrey|238|lightgreen|lightcyan|216|173|lightblue|khaki|130|indigo|green|215|gold|fuchsia|148|darkviolet|122|150|233|darksalmon|darkred|204|153|darkorchid|darkorange|85|darkolivegreen|darkmagenta|183|189|darkkhaki|darkgreen|darkgrey|darkcyan|darkblue|cyan|brown||blue|black|220|beige||azure|aqua|parentNode|while|body|nodeName|curCSS|do|toLowerCase|trim|rgba|Array|join|state|step|fx|outlineColor|borderTopColor|borderRightColor|borderLeftColor|borderBottomColor|pt|px|em|switchClass|Function|options|method|call|animate|Moz|in|hasClass|setTransition|replaceWith|removeWrapper|index|zIndex|padding|none|border|background|size|font|wrap|outerHeight|outerWidth|createWrapper|center|middle|getBaseline|hidden|is|setMode||restore|save'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.drop.js b/wp-content/themes/vanilla/js/jquery/effects.drop.js
new file mode 100755
index 0000000000000000000000000000000000000000..f3b16d2ca1417775275a0bc90a396a16431169c5
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.drop.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(5(A){A.4.S=5(B){R a.i(5(){3 E=A(a),D=["Q","e","9","d"];3 I=A.4.P(E,B.6.O||"c");3 H=B.6.N||"9";A.4.M(E,D);E.8();A.4.L(E);3 F=(H=="m"||H=="K")?"e":"9";3 C=(H=="m"||H=="9")?"7":"z";3 J=B.6.y||(F=="e"?E.x({l:k})/2:E.w({l:k})/2);b(I=="8"){E.j("d",0).j(F,C=="7"?-J:J)}3 G={d:I=="8"?1:0};G[F]=(I=="8"?(C=="7"?"+=":"-="):(C=="7"?"-=":"+="))+J;E.v(G,{i:u,h:B.h,g:B.6.g,t:5(){b(I=="c"){E.c()}A.4.s(E,D);A.4.r(E);b(B.f){B.f.q(a,p)}E.o()}})})}})(n)',55,55,'|||var|effects|function|options|pos|show|left|this|if|hide|opacity|top|callback|easing|duration|queue|css|true|margin|up|jQuery|dequeue|arguments|apply|removeWrapper|restore|complete|false|animate|outerWidth|outerHeight|distance|neg|||||||||||down|createWrapper|save|direction|mode|setMode|position|return|drop'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.explode.js b/wp-content/themes/vanilla/js/jquery/effects.explode.js
new file mode 100755
index 0000000000000000000000000000000000000000..af5ce36e60ed5a18df45c057d1ec487285ed5167
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.explode.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(e(A){A.i.h=e(B){16 j.15(e(){8 I=B.4.g?7.x(7.w(B.4.g)):3;8 E=B.4.g?7.x(7.w(B.4.g)):3;B.4.5=B.4.5=="14"?(A(j).13(":c")?"n":"6"):B.4.5;8 H=A(j).6().9("d","p");8 J=H.12();J.a-=v(H.9("11"))||0;J.b-=v(H.9("10"))||0;8 G=H.Z(u);8 C=H.Y(u);t(8 F=0;F<I;F++){t(8 D=0;D<E;D++){H.X().W("V").U("<s></s>").9({r:"q",d:"c",b:-D*(G/E),a:-F*(C/I)}).T().S("i-h").9({r:"q",R:"p",Q:G/E,P:C/I,b:J.b+D*(G/E)+(B.4.5=="6"?(D-7.f(E/2))*(G/E):0),a:J.a+F*(C/I)+(B.4.5=="6"?(F-7.f(I/2))*(C/I):0),o:B.4.5=="6"?0:1}).O({b:J.b+D*(G/E)+(B.4.5=="6"?0:(D-7.f(E/2))*(G/E)),a:J.a+F*(C/I)+(B.4.5=="6"?0:(F-7.f(I/2))*(C/I)),o:B.4.5=="6"?1:0},B.l||k)}}N(e(){B.4.5=="6"?H.9({d:"c"}):H.9({d:"c"}).n();M(B.m){B.m.L(H[0])}H.K();A(".i-h").z()},B.l||k)})}})(y)',62,69,'||||options|mode|show|Math|var|css|top|left|visible|visibility|function|floor|pieces|explode|effects|this|500|duration|callback|hide|opacity|hidden|absolute|position|div|for|true|parseInt|sqrt|round|jQuery|remove|||||||||||dequeue|apply|if|setTimeout|animate|height|width|overflow|addClass|parent|wrap|body|appendTo|clone|outerHeight|outerWidth|marginLeft|marginTop|offset|is|toggle|queue|return'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.fold.js b/wp-content/themes/vanilla/js/jquery/effects.fold.js
new file mode 100755
index 0000000000000000000000000000000000000000..18c16ddc6d39b3821e66edb719938b3234922cfb
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.fold.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(c(A){A.4.U=c(B){T i.S(c(){3 E=A(i),J=["R","Q","P"];3 G=A.4.O(E,B.7.z||"b");3 N=B.7.y||x;3 M=!(!B.7.w);A.4.v(E,J);E.8();3 D=A.4.u(E).h({t:"s"});3 H=((G=="8")!=M);3 F=H?["5","6"]:["6","5"];3 C=H?[D.5(),D.6()]:[D.6(),D.5()];3 I=/([0-9]+)%/.r(N);a(I){N=q(I[1])/p*C[G=="b"?0:1]}a(G=="8"){D.h(M?{6:0,5:N}:{6:N,5:0})}3 L={},K={};L[F[0]]=G=="8"?C[0]:N;K[F[1]]=G=="8"?C[1]:0;D.g(L,B.f/2,B.7.e).g(K,B.f/2,B.7.e,c(){a(G=="b"){E.b()}A.4.o(E,J);A.4.n(E);a(B.d){B.d.m(E[0],l)}E.k()})})}})(j)',57,57,'|||var|effects|width|height|options|show||if|hide|function|callback|easing|duration|animate|css|this|jQuery|dequeue|arguments|apply|removeWrapper|restore|100|parseInt|exec|hidden|overflow|createWrapper|save|horizFirst|15|size|mode|||||||||||||||setMode|left|top|position|queue|return|fold'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.highlight.js b/wp-content/themes/vanilla/js/jquery/effects.highlight.js
new file mode 100755
index 0000000000000000000000000000000000000000..74aff02fea526db11acf8da167bb54828cc30f20
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.highlight.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(5(A){A.4.J=5(B){I 2.e(5(){1 E=A(2),D=["g","6","f"];1 H=A.4.z(E,B.9.y||"7");1 C=B.9.x||"#w";1 G=E.h("6");A.4.v(E,D);E.7();E.h({g:"u",6:C});1 F={6:G};3(H=="8"){F["f"]=0}E.t(F,{e:s,d:B.d,c:B.9.c,r:5(){3(H=="8"){E.8()}A.4.q(E,D);3(H=="7"&&a.p.o){2.n.m("l")}3(B.b){B.b.k(2,j)}E.i()}})})}})(a)',46,46,'|var|this|if|effects|function|backgroundColor|show|hide|options|jQuery|callback|easing|duration|queue|opacity|backgroundImage|css|dequeue|arguments|apply|filter|removeAttribute|style|msie|browser|restore|complete|false|animate|none|save|ffff99|color|mode|setMode|||||||||return|highlight'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.pulsate.js b/wp-content/themes/vanilla/js/jquery/effects.pulsate.js
new file mode 100755
index 0000000000000000000000000000000000000000..74ba2671cdb26159bd14b1c82fdaf15789d50393
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.pulsate.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(7(A){A.n.z=7(B){y d.j(7(){f 3=A(d);f h=A.n.x(3,B.4.w||"m");f c=B.4.v||5;b(h=="g"){c--}b(3.u(":t")){3.s("6",0);3.m();3.a({6:1},B.9/2,B.4.8);c=c-2}r(f C=0;C<c;C++){3.a({6:0},B.9/2,B.4.8).a({6:1},B.9/2,B.4.8)}b(h=="g"){3.a({6:0},B.9/2,B.4.8,7(){3.g();b(B.e){B.e.l(d,k)}})}q{3.a({6:0},B.9/2,B.4.8).a({6:1},B.9/2,B.4.8,7(){b(B.e){B.e.l(d,k)}})}3.j("p",7(){3.i()});3.i()})}})(o)',39,39,'|||D|options||opacity|function|easing|duration|animate|if|E|this|callback|var|hide|F|dequeue|queue|arguments|apply|show|effects|jQuery|fx|else|for|css|hidden|is|times|mode|setMode|return|pulsate|||'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.scale.js b/wp-content/themes/vanilla/js/jquery/effects.scale.js
new file mode 100755
index 0000000000000000000000000000000000000000..e33b50cafa2b55586ea2f790932e7415a2510b51
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.scale.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(b(A){A.7.1y=b(B){U d.o(b(){5 F=A(d);5 C=A.13(s,{},B.9);5 H=A.7.T(F,B.9.k||"f");5 G=V(B.9.t)||1x;C.12=s;5 E={6:F.6(),4:F.4()};5 D=G/l;F.2=(H=="f")?E:{6:E.6*D,4:E.4*D};C.2=F.2;C.t=(H=="f")?G:l;C.k=H;F.j("S",C,B.h,B.m);F.u()})};A.7.S=b(B){U d.o(b(){5 G=A(d);5 D=A.13(s,{},B.9);5 J=A.7.T(G,B.9.k||"j");5 H=V(B.9.t)||(V(B.9.t)==0?0:(J=="f"?0:l));5 I=B.9.1w||"i";5 C=B.9.R;a(J!="j"){D.R=C||["1v","1u"];D.n=s}5 F={6:G.6(),4:G.4()};G.2=B.9.2||(J=="z"?{6:0,4:0}:F);5 E={y:I!="1t"?(H/l):1,x:I!="1s"?(H/l):1};G.3={6:F.6*E.y,4:F.4*E.x};a(B.9.12){a(J=="z"){G.2.g=0;G.3.g=1}a(J=="f"){G.2.g=1;G.3.g=0}}D.2=G.2;D.3=G.3;D.k=J;G.j("11",D,B.h,B.m);G.u()})};A.7.11=b(B){U d.o(b(){5 C=A(d),N=["10","r","q","4","6","p","g"];5 M=["10","r","q","p","g"];5 J=["4","6","p"];5 P=["1r"];5 K=["1q","1p","1o","1n"];5 F=["1m","1l","1k","1j"];5 G=A.7.T(C,B.9.k||"j");5 I=B.9.n||W;5 E=B.9.S||"i";5 O=B.9.R;5 D={6:C.6(),4:C.4()};C.2=B.9.2||D;C.3=B.9.3||D;a(O){5 H=A.7.1i(O,D);C.2.r=(D.6-C.2.6)*H.y;C.2.q=(D.4-C.2.4)*H.x;C.3.r=(D.6-C.3.6)*H.y;C.3.q=(D.4-C.3.4)*H.x}5 L={2:{y:C.2.6/D.6,x:C.2.4/D.4},3:{y:C.3.6/D.6,x:C.3.4/D.4}};a(E=="1h"||E=="i"){a(L.2.y!=L.3.y){N=N.e(K);C.2=A.7.c(C,K,L.2.y,C.2);C.3=A.7.c(C,K,L.3.y,C.3)}a(L.2.x!=L.3.x){N=N.e(F);C.2=A.7.c(C,F,L.2.x,C.2);C.3=A.7.c(C,F,L.3.x,C.3)}}a(E=="Z"||E=="i"){a(L.2.y!=L.3.y){N=N.e(P);C.2=A.7.c(C,P,L.2.y,C.2);C.3=A.7.c(C,P,L.3.y,C.3)}}A.7.Y(C,I?N:M);C.z();A.7.1g(C);C.w("p","1f").w(C.2);a(E=="Z"||E=="i"){K=K.e(["1e","1d"]).e(P);F=F.e(["1c","1b"]);J=N.e(K).e(F);C.1a("*[4]").19(b(){8=A(d);a(I){A.7.Y(8,J)}5 Q={6:8.6(),4:8.4()};8.2={6:Q.6*L.2.y,4:Q.4*L.2.x};8.3={6:Q.6*L.3.y,4:Q.4*L.3.x};a(L.2.y!=L.3.y){8.2=A.7.c(8,K,L.2.y,8.2);8.3=A.7.c(8,K,L.3.y,8.3)}a(L.2.x!=L.3.x){8.2=A.7.c(8,F,L.2.x,8.2);8.3=A.7.c(8,F,L.3.x,8.3)}8.w(8.2);8.X(8.3,B.h,B.9.v,b(){a(I){A.7.n(8,J)}})})}C.X(C.3,{o:W,h:B.h,v:B.9.v,18:b(){a(G=="f"){C.f()}A.7.n(C,I?N:M);A.7.17(C);a(B.m){B.m.16(d,15)}C.u()}})})}})(14)',62,97,'||from|to|width|var|height|effects|child|options|if|function|setTransition|this|concat|hide|opacity|duration|both|effect|mode|100|callback|restore|queue|overflow|left|top|true|percent|dequeue|easing|css|||show||||||||||||||||||origin|scale|setMode|return|parseInt|false|animate|save|content|position|size|fade|extend|jQuery|arguments|apply|removeWrapper|complete|each|find|marginRight|marginLeft|marginBottom|marginTop|hidden|createWrapper|box|getBaseline|paddingRight|paddingLeft|borderRightWidth|borderLeftWidth|paddingBottom|paddingTop|borderBottomWidth|borderTopWidth|fontSize|vertical|horizontal|center|middle|direction|150|puff'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.shake.js b/wp-content/themes/vanilla/js/jquery/effects.shake.js
new file mode 100755
index 0000000000000000000000000000000000000000..bd2a2dfb42a83276095794a0e376917b82747076
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.shake.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(6(A){A.5.U=6(B){T b.d(6(){4 E=A(b),K=["S","g","a"];4 J=A.5.R(E,B.0.Q||"P");4 M=B.0.z||"a";4 C=B.0.y||x;4 D=B.0.w||3;4 G=B.h||B.0.h||v;A.5.u(E,K);E.t();A.5.s(E);4 F=(M=="f"||M=="r")?"g":"a";4 O=(M=="f"||M=="a")?"9":"q";4 H={},N={},L={};H[F]=(O=="9"?"-=":"+=")+C;N[F]=(O=="9"?"+=":"-=")+C*2;L[F]=(O=="9"?"-=":"+=")+C*2;E.8(H,G,B.0.7);p(4 I=1;I<D;I++){E.8(N,G,B.0.7).8(L,G,B.0.7)}E.8(N,G,B.0.7).8(H,G/2,B.0.7,6(){A.5.o(E,K);A.5.n(E);m(B.e){B.e.l(b,k)}});E.d("j",6(){E.c()});E.c()})}})(i)',57,57,'options||||var|effects|function|easing|animate|pos|left|this|dequeue|queue|callback|up|top|duration|jQuery|fx|arguments|apply|if|removeWrapper|restore|for|neg|down|createWrapper|show|save|140|times|20|distance|direction||||||||||||||||effect|mode|setMode|position|return|shake'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.slide.js b/wp-content/themes/vanilla/js/jquery/effects.slide.js
new file mode 100755
index 0000000000000000000000000000000000000000..3fc293f61674b00060a34c833a09ceae16460491
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.slide.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(2(A){A.1.Q=2(B){P 7.e(2(){0 E=A(7),D=["O","9","6"];0 I=A.1.N(E,B.3.M||"5");0 H=B.3.L||"6";A.1.K(E,D);E.5();A.1.z(E).f({y:"x"});0 F=(H=="i"||H=="w")?"9":"6";0 C=(H=="i"||H=="6")?"4":"v";0 J=B.3.u||(F=="9"?E.t({h:g}):E.s({h:g}));8(I=="5"){E.f(F,C=="4"?-J:J)}0 G={};G[F]=(I=="5"?(C=="4"?"+=":"-="):(C=="4"?"-=":"+="))+J;E.r(G,{e:q,d:B.d,c:B.3.c,p:2(){8(I=="b"){E.b()}A.1.o(E,D);A.1.n(E);8(B.a){B.a.m(7,l)}E.k()}})})}})(j)',53,53,'var|effects|function|options|pos|show|left|this|if|top|callback|hide|easing|duration|queue|css|true|margin|up|jQuery|dequeue|arguments|apply|removeWrapper|restore|complete|false|animate|outerWidth|outerHeight|distance|neg|down|hidden|overflow|createWrapper|||||||||||save|direction|mode|setMode|position|return|slide'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/effects.transfer.js b/wp-content/themes/vanilla/js/jquery/effects.transfer.js
new file mode 100755
index 0000000000000000000000000000000000000000..91cf7dd937d1722eb8c985cc02d68755ad66eedb
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/effects.transfer.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(5(A){A.9.o=5(B){R p.Q(5(){4 E=A(p);4 G=A.9.P(E,B.3.O||"N");4 F=A(B.3.M);4 C=E.l();4 D=A(\'<n L="K-9-o"></n>\').J(I.H);b(B.3.8){D.m(B.3.8)}D.m(B.3.8);D.1({7:C.7,6:C.6,k:E.j()-2(D.1("i"))-2(D.1("h")),g:E.f()-2(D.1("e"))-2(D.1("d")),z:"y"});C=F.l();c={7:C.7,6:C.6,k:F.j()-2(D.1("i"))-2(D.1("h")),g:F.f()-2(D.1("e"))-2(D.1("d"))};D.x(c,B.w,B.3.v,5(){D.u();b(B.a){B.a.t(E[0],s)}E.r()})})}})(q)',54,54,'|css|parseInt|options|var|function|left|top|className|effects|callback|if|animation|borderRightWidth|borderLeftWidth|outerWidth|width|borderBottomWidth|borderTopWidth|outerHeight|height|offset|addClass|div|transfer|this|jQuery|dequeue|arguments|apply|remove|easing|duration|animate|absolute|position||||||||body|document|appendTo|ui|class|to|effect|mode|setMode|queue|return'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/jquery.ui.all.js b/wp-content/themes/vanilla/js/jquery/jquery.ui.all.js
new file mode 100755
index 0000000000000000000000000000000000000000..bd2c36bd2bc3e9d2a2e6665bc734107b822b4d4a
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/jquery.ui.all.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(c(C){C.l={2z:{1T:c(E,F,H){b G=C.l[E].53;1R(b D in H){G.6i[D]=G.6i[D]||[];G.6i[D].4K([F,H[D]])}},23:c(D,F,E){b H=D.6i[F];if(!H){k}1R(b G=0;G<H.1m;G++){if(D.h[H[G][0]]){H[G][1].1t(D.r,E)}}}},9T:{},q:c(D){if(C.l.9T[D]){k C.l.9T[D]}b E=C(\'<1w 2u="l-lK">\').1n(D).q({17:"1W",p:"-gl",o:"-gl",4q:"6O"}).2K("1K");C.l.9T[D]=!!((!(/46|5q/).1B(E.q("2s"))||(/^[1-9]/).1B(E.q("t"))||(/^[1-9]/).1B(E.q("u"))||!(/5n/).1B(E.q("cz"))||!(/7i|ft\\(0, 0, 0, 0\\)/).1B(E.q("7Z"))));ca{C("1K").5i(0).cU(E.5i(0))}c8(F){}k C.l.9T[D]},7G:c(D){C(D).2L("5T","gi").q("gk","5n")},lJ:c(D){C(D).2L("5T","lI").q("gk","")},9N:c(G,E){b D=/p/.1B(E||"p")?"2f":"2e",F=Z;if(G[D]>0){k 1e}G[D]=1;F=G[D]>0?1e:Z;G[D]=0;k F}};b B=C.fn.1Z;C.fn.1Z=c(){C("*",8).1T(8).2m("1Z");k B.1t(8,1A)};c A(E,F,G){b D=C[E][F].9U||[];D=(2D D=="56"?D.7D(/,?\\s+/):D);k(C.7t(G,D)!=-1)}C.4b=c(E,D){b F=E.7D(".")[0];E=E.7D(".")[1];C.fn[E]=c(J){b H=(2D J=="56"),I=8a.53.dR.23(1A,1);if(H&&A(F,E,J)){b G=C.1i(8[0],E);k(G?G[J].1t(G,I):2p)}k 8.1x(c(){b K=C.1i(8,E);if(H&&K&&C.8N(K[J])){K[J].1t(K,I)}1g{if(!H){C.1i(8,E,1M C[F][E](8,J))}}})};C[F][E]=c(I,H){b G=8;8.7p=E;8.gj=F+"-"+E;8.h=C.1Q({},C.4b.4I,C[F][E].4I,H);8.r=C(I).2V("5a."+E,c(L,J,K){k G.5a(J,K)}).2V("9x."+E,c(K,J){k G.9x(J)}).2V("1Z",c(){k G.3t()});8.5l()};C[F][E].53=C.1Q({},C.4b.53,D)};C.4b.53={5l:c(){},3t:c(){8.r.49(8.7p)},9x:c(D){k 8.h[D]},5a:c(D,E){8.h[D]=E;if(D=="1I"){8.r[E?"1n":"1J"](8.gj+"-1I")}},87:c(){8.5a("1I",Z)},6N:c(){8.5a("1I",1e)}};C.4b.4I={1I:Z};C.l.4s={8d:c(){b D=8;8.r.2V("7A."+8.7p,c(E){k D.br(E)});if(C.22.3v){8.gh=8.r.2L("5T");8.r.2L("5T","gi")}8.lH=Z},8e:c(){8.r.3o("."+8.7p);(C.22.3v&&8.r.2L("5T",8.gh))},br:c(F){(8.6H&&8.9S(F));8.bf=F;b E=8,G=(F.lG==1),D=(2D 8.h.6j=="56"?C(F.1h).58().1T(F.1h).3u(8.h.6j).1m:Z);if(!G||D||!8.93(F)){k 1e}8.be=!8.h.80;if(!8.be){8.lF=7s(c(){E.be=1e},8.h.80)}if(8.df(F)&&8.de(F)){8.6H=(8.6h(F)!==Z);if(!8.6H){F.aD();k 1e}}8.dh=c(H){k E.gg(H)};8.dg=c(H){k E.9S(H)};C(1d).2V("gf."+8.7p,8.dh).2V("bx."+8.7p,8.dg);k Z},gg:c(D){if(C.22.3v&&!D.5P){k 8.9S(D)}if(8.6H){8.5o(D);k Z}if(8.df(D)&&8.de(D)){8.6H=(8.6h(8.bf,D)!==Z);(8.6H?8.5o(D):8.9S(D))}k!8.6H},9S:c(D){C(1d).3o("gf."+8.7p,8.dh).3o("bx."+8.7p,8.dg);if(8.6H){8.6H=Z;8.6g(D)}k Z},df:c(D){k(1f.2d(1f.3T(8.bf.3b-D.3b),1f.3T(8.bf.3c-D.3c))>=8.h.4L)},de:c(D){k 8.be},6h:c(D){},5o:c(D){},6g:c(D){},93:c(D){k 1e}};C.l.4s.4I={6j:19,4L:1,80:0}})(1v);(c(A){A.4b("l.24",A.1Q({},A.l.4s,{5l:c(){b B=8.h;if(B.1c=="db"&&!(/(2b|1W|4X)/).1B(8.r.q("17"))){8.r.q("17","2b")}8.r.1n("l-24");(B.1I&&8.r.1n("l-24-1I"));8.8d()},6h:c(F){b H=8.h;if(8.1c||H.1I||A(F.1h).is(".l-1k-1G")){k Z}b C=!8.h.1G||!A(8.h.1G,8.r).1m?1e:Z;A(8.h.1G,8.r).4J("*").7W().1x(c(){if(8==F.1h){C=1e}});if(!C){k Z}if(A.l.2H){A.l.2H.4T=8}8.1c=A.8N(H.1c)?A(H.1c.1t(8.r[0],[F])):(H.1c=="6B"?8.r.6B():8.r);if(!8.1c.58("1K").1m){8.1c.2K((H.2K=="1o"?8.r[0].3R:H.2K))}if(8.1c[0]!=8.r[0]&&!(/(4X|1W)/).1B(8.1c.q("17"))){8.1c.q("17","1W")}8.30={o:(1b(8.r.q("7X"),10)||0),p:(1b(8.r.q("7Y"),10)||0)};8.4H=8.1c.q("17");8.v=8.r.v();8.v={p:8.v.p-8.30.p,o:8.v.o-8.30.o};8.v.1F={o:F.3b-8.v.o,p:F.3c-8.v.p};8.2l=8.1c.2l();b B=8.2l.v();if(8.2l[0]==1d.1K&&A.22.lE){B={p:0,o:0}}8.v.1o={p:B.p+(1b(8.2l.q("64"),10)||0),o:B.o+(1b(8.2l.q("63"),10)||0)};b E=8.r.17();8.v.2b=8.4H=="2b"?{p:E.p-(1b(8.1c.q("p"),10)||0)+8.2l[0].2f,o:E.o-(1b(8.1c.q("o"),10)||0)+8.2l[0].2e}:{p:0,o:0};8.2O=8.8M(F);8.1Y={u:8.1c.2Y(),t:8.1c.2M()};if(H.3O){if(H.3O.o!=2p){8.v.1F.o=H.3O.o+8.30.o}if(H.3O.3e!=2p){8.v.1F.o=8.1Y.u-H.3O.3e+8.30.o}if(H.3O.p!=2p){8.v.1F.p=H.3O.p+8.30.p}if(H.3O.3h!=2p){8.v.1F.p=8.1Y.t-H.3O.3h+8.30.p}}if(H.1s){if(H.1s=="1o"){H.1s=8.1c[0].3R}if(H.1s=="1d"||H.1s=="3a"){8.1s=[0-8.v.2b.o-8.v.1o.o,0-8.v.2b.p-8.v.1o.p,A(H.1s=="1d"?1d:3a).u()-8.v.2b.o-8.v.1o.o-8.1Y.u-8.30.o-(1b(8.r.q("7f"),10)||0),(A(H.1s=="1d"?1d:3a).t()||1d.1K.3R.6W)-8.v.2b.p-8.v.1o.p-8.1Y.t-8.30.p-(1b(8.r.q("7g"),10)||0)]}if(!(/^(1d|3a|1o)$/).1B(H.1s)){b D=A(H.1s)[0];b G=A(H.1s).v();8.1s=[G.o+(1b(A(D).q("63"),10)||0)-8.v.2b.o-8.v.1o.o,G.p+(1b(A(D).q("64"),10)||0)-8.v.2b.p-8.v.1o.p,G.o+1f.2d(D.94,D.4N)-(1b(A(D).q("63"),10)||0)-8.v.2b.o-8.v.1o.o-8.1Y.u-8.30.o-(1b(8.r.q("7f"),10)||0),G.p+1f.2d(D.6W,D.4O)-(1b(A(D).q("64"),10)||0)-8.v.2b.p-8.v.1o.p-8.1Y.t-8.30.p-(1b(8.r.q("7g"),10)||0)]}}8.2a("2j",F);8.1Y={u:8.1c.2Y(),t:8.1c.2M()};if(A.l.2H&&!H.aY){A.l.2H.b0(8,F)}8.1c.1n("l-24-9F");8.5o(F);k 1e},4G:c(C,D){if(!D){D=8.17}b B=C=="1W"?1:-1;k{p:(D.p+8.v.2b.p*B+8.v.1o.p*B-(8.4H=="4X"||(8.4H=="1W"&&8.2l[0]==1d.1K)?0:8.2l[0].2f)*B+(8.4H=="4X"?A(1d).2f():0)*B+8.30.p*B),o:(D.o+8.v.2b.o*B+8.v.1o.o*B-(8.4H=="4X"||(8.4H=="1W"&&8.2l[0]==1d.1K)?0:8.2l[0].2e)*B+(8.4H=="4X"?A(1d).2e():0)*B+8.30.o*B)}},8M:c(E){b F=8.h;b B={p:(E.3c-8.v.1F.p-8.v.2b.p-8.v.1o.p+(8.4H=="4X"||(8.4H=="1W"&&8.2l[0]==1d.1K)?0:8.2l[0].2f)-(8.4H=="4X"?A(1d).2f():0)),o:(E.3b-8.v.1F.o-8.v.2b.o-8.v.1o.o+(8.4H=="4X"||(8.4H=="1W"&&8.2l[0]==1d.1K)?0:8.2l[0].2e)-(8.4H=="4X"?A(1d).2e():0))};if(!8.2O){k B}if(8.1s){if(B.o<8.1s[0]){B.o=8.1s[0]}if(B.p<8.1s[1]){B.p=8.1s[1]}if(B.o>8.1s[2]){B.o=8.1s[2]}if(B.p>8.1s[3]){B.p=8.1s[3]}}if(F.2J){b D=8.2O.p+1f.3E((B.p-8.2O.p)/F.2J[1])*F.2J[1];B.p=8.1s?(!(D<8.1s[1]||D>8.1s[3])?D:(!(D<8.1s[1])?D-F.2J[1]:D+F.2J[1])):D;b C=8.2O.o+1f.3E((B.o-8.2O.o)/F.2J[0])*F.2J[0];B.o=8.1s?(!(C<8.1s[0]||C>8.1s[2])?C:(!(C<8.1s[0])?C-F.2J[0]:C+F.2J[0])):C}k B},5o:c(B){8.17=8.8M(B);8.3n=8.4G("1W");8.17=8.2a("3F",B)||8.17;if(!8.h.2B||8.h.2B!="y"){8.1c[0].2Q.o=8.17.o+"2U"}if(!8.h.2B||8.h.2B!="x"){8.1c[0].2Q.p=8.17.p+"2U"}if(A.l.2H){A.l.2H.3F(8,B)}k Z},6g:c(C){b D=Z;if(A.l.2H&&!8.h.aY){b D=A.l.2H.5C(8,C)}if((8.h.68=="lD"&&!D)||(8.h.68=="lC"&&D)||8.h.68===1e){b B=8;A(8.1c).1E(8.2O,1b(8.h.68,10)||8b,c(){B.2a("2y",C);B.4j()})}1g{8.2a("2y",C);8.4j()}k Z},4j:c(){8.1c.1J("l-24-9F");if(8.h.1c!="db"&&!8.8L){8.1c.1Z()}8.1c=19;8.8L=Z},6i:{},dc:c(B){k{1c:8.1c,17:8.17,9M:8.3n,h:8.h}},2a:c(C,B){A.l.2z.23(8,C,[B,8.dc()]);if(C=="3F"){8.3n=8.4G("1W")}k 8.r.2m(C=="3F"?C:"3F"+C,[B,8.dc()],8.h[C])},3t:c(){if(!8.r.1i("24")){k}8.r.49("24").3o(".24").1J("l-24");8.8e()}}));A.1Q(A.l.24,{4I:{2K:"1o",2B:Z,6j:":1p",80:0,4L:1,1c:"db"}});A.l.2z.1T("24","2s",{2j:c(D,C){b B=A("1K");if(B.q("2s")){C.h.8K=B.q("2s")}B.q("2s",C.h.2s)},2y:c(C,B){if(B.h.8K){A("1K").q("2s",B.h.8K)}}});A.l.2z.1T("24","2C",{2j:c(D,C){b B=A(C.1c);if(B.q("2C")){C.h.8J=B.q("2C")}B.q("2C",C.h.2C)},2y:c(C,B){if(B.h.8J){A(B.1c).q("2C",B.h.8J)}}});A.l.2z.1T("24","1O",{2j:c(D,C){b B=A(C.1c);if(B.q("1O")){C.h.8I=B.q("1O")}B.q("1O",C.h.1O)},2y:c(C,B){if(B.h.8I){A(B.1c).q("1O",B.h.8I)}}});A.l.2z.1T("24","bd",{2j:c(C,B){A(B.h.bd===1e?"9d":B.h.bd).1x(c(){A(\'<1w 2u="l-24-bd" 2Q="aX: #lB;"></1w>\').q({u:8.4N+"2U",t:8.4O+"2U",17:"1W",1O:"0.lA",2C:95}).q(A(8).v()).2K("1K")})},2y:c(C,B){A("1w.lz").1x(c(){8.3R.cU(8)})}});A.l.2z.1T("24","5D",{2j:c(D,C){b E=C.h;b B=A(8).1i("24");E.3J=E.3J||20;E.3I=E.3I||20;B.3m=c(F){do{if(/46|5D/.1B(F.q("2X"))||(/46|5D/).1B(F.q("2X-y"))){k F}F=F.1o()}5y(F[0].3R);k A(1d)}(8);B.3l=c(F){do{if(/46|5D/.1B(F.q("2X"))||(/46|5D/).1B(F.q("2X-x"))){k F}F=F.1o()}5y(F[0].3R);k A(1d)}(8);if(B.3m[0]!=1d&&B.3m[0].6C!="7j"){B.8H=B.3m.v()}if(B.3l[0]!=1d&&B.3l[0].6C!="7j"){B.8G=B.3l.v()}},3F:c(D,C){b E=C.h;b B=A(8).1i("24");if(B.3m[0]!=1d&&B.3m[0].6C!="7j"){if((B.8H.p+B.3m[0].4O)-D.3c<E.3J){B.3m[0].2f=B.3m[0].2f+E.3I}if(D.3c-B.8H.p<E.3J){B.3m[0].2f=B.3m[0].2f-E.3I}}1g{if(D.3c-A(1d).2f()<E.3J){A(1d).2f(A(1d).2f()-E.3I)}if(A(3a).t()-(D.3c-A(1d).2f())<E.3J){A(1d).2f(A(1d).2f()+E.3I)}}if(B.3l[0]!=1d&&B.3l[0].6C!="7j"){if((B.8G.o+B.3l[0].4N)-D.3b<E.3J){B.3l[0].2e=B.3l[0].2e+E.3I}if(D.3b-B.8G.o<E.3J){B.3l[0].2e=B.3l[0].2e-E.3I}}1g{if(D.3b-A(1d).2e()<E.3J){A(1d).2e(A(1d).2e()-E.3I)}if(A(3a).u()-(D.3b-A(1d).2e())<E.3J){A(1d).2e(A(1d).2e()+E.3I)}}}});A.l.2z.1T("24","da",{2j:c(D,C){b B=A(8).1i("24");B.83=[];A(C.h.da===1e?".l-24":C.h.da).1x(c(){b F=A(8);b E=F.v();if(8!=B.r[0]){B.83.4K({2I:8,u:F.2Y(),t:F.2M(),p:E.p,o:E.o})}})},3F:c(J,N){b I=A(8).1i("24");b L=N.h.ly||20;b D=N.9M.o,C=D+I.1Y.u,P=N.9M.p,O=P+I.1Y.t;1R(b H=I.83.1m-1;H>=0;H--){b E=I.83[H].o,B=E+I.83[H].u,R=I.83[H].p,M=R+I.83[H].t;if(!((E-L<D&&D<B+L&&R-L<P&&P<M+L)||(E-L<D&&D<B+L&&R-L<O&&O<M+L)||(E-L<C&&C<B+L&&R-L<P&&P<M+L)||(E-L<C&&C<B+L&&R-L<O&&O<M+L))){7l}if(N.h.ge!="lx"){b K=1f.3T(R-O)<=20;b Q=1f.3T(M-P)<=20;b G=1f.3T(E-C)<=20;b F=1f.3T(B-D)<=20;if(K){N.17.p=I.4G("2b",{p:R-I.1Y.t,o:0}).p}if(Q){N.17.p=I.4G("2b",{p:M,o:0}).p}if(G){N.17.o=I.4G("2b",{p:0,o:E-I.1Y.u}).o}if(F){N.17.o=I.4G("2b",{p:0,o:B}).o}}if(N.h.ge!="lw"){b K=1f.3T(R-P)<=20;b Q=1f.3T(M-O)<=20;b G=1f.3T(E-D)<=20;b F=1f.3T(B-C)<=20;if(K){N.17.p=I.4G("2b",{p:R,o:0}).p}if(Q){N.17.p=I.4G("2b",{p:M-I.1Y.t,o:0}).p}if(G){N.17.o=I.4G("2b",{p:0,o:E}).o}if(F){N.17.o=I.4G("2b",{p:0,o:B-I.1Y.u}).o}}}}});A.l.2z.1T("24","gd",{2j:c(D,C){b B=A(8).1i("24");B.bc=[];A(C.h.gd).1x(c(){if(A.1i(8,"2P")){b E=A.1i(8,"2P");B.bc.4K({1V:E,gc:E.h.68});E.b1();E.2a("5Z",D,B)}})},2y:c(D,C){b B=A(8).1i("24");A.1x(B.bc,c(){if(8.1V.8T){8.1V.8T=0;B.8L=1e;8.1V.8L=Z;if(8.gc){8.1V.h.68=1e}8.1V.6g(D);8.1V.r.2m("lv",[D,A.1Q(8.1V.l(),{fU:B.r})],8.1V.h["fM"]);8.1V.h.1c=8.1V.h.d9}1g{8.1V.2a("81",D,B)}})},3F:c(F,E){b D=A(8).1i("24"),B=8;b C=c(K){b H=K.o,J=H+K.u,I=K.p,G=I+K.t;k(H<(8.3n.o+8.v.1F.o)&&(8.3n.o+8.v.1F.o)<J&&I<(8.3n.p+8.v.1F.p)&&(8.3n.p+8.v.1F.p)<G)};A.1x(D.bc,c(G){if(C.23(D,8.1V.4Z)){if(!8.1V.8T){8.1V.8T=1;8.1V.1S=A(B).6B().2K(8.1V.r).1i("2P-2I",1e);8.1V.h.d9=8.1V.h.1c;8.1V.h.1c=c(){k E.1c[0]};F.1h=8.1V.1S[0];8.1V.93(F,1e);8.1V.6h(F,1e,1e);8.1V.v.1F.p=D.v.1F.p;8.1V.v.1F.o=D.v.1F.o;8.1V.v.1o.o-=D.v.1o.o-8.1V.v.1o.o;8.1V.v.1o.p-=D.v.1o.p-8.1V.v.1o.p;D.2a("lu",F)}if(8.1V.1S){8.1V.5o(F)}}1g{if(8.1V.8T){8.1V.8T=0;8.1V.8L=1e;8.1V.h.68=Z;8.1V.6g(F,1e);8.1V.h.1c=8.1V.h.d9;8.1V.1S.1Z();if(8.1V.2Z){8.1V.2Z.1Z()}D.2a("lt",F)}}})}});A.l.2z.1T("24","6X",{2j:c(D,B){b C=A.ls(A(B.h.6X.lr)).5I(c(F,E){k(1b(A(F).q("2C"),10)||B.h.6X.2q)-(1b(A(E).q("2C"),10)||B.h.6X.2q)});A(C).1x(c(E){8.2Q.2C=B.h.6X.2q+E});8[0].2Q.2C=B.h.6X.2q+C.1m}})})(1v);(c(A){A.4b("l.52",{5l:c(){8.r.1n("l-52");8.5G=0;8.7o=1;b C=8.h,B=C.6a;C=A.1Q(C,{6a:C.6a&&C.6a.3S==fD?C.6a:c(D){k A(D).is(B)}});8.bb={u:8.r[0].4N,t:8.r[0].4O};A.l.2H.8S.4K(8)},6i:{},l:c(B){k{24:(B.1S||B.r),1c:B.1c,17:B.17,9M:B.3n,h:8.h,r:8.r}},3t:c(){b B=A.l.2H.8S;1R(b C=0;C<B.1m;C++){if(B[C]==8){B.bm(C,1)}}8.r.1J("l-52 l-52-1I").49("52").3o(".52")},3r:c(C){b B=A.l.2H.4T;if(!B||(B.1S||B.r)[0]==8.r[0]){k}if(8.h.6a.23(8.r,(B.1S||B.r))){A.l.2z.23(8,"3r",[C,8.l(B)]);8.r.2m("lq",[C,8.l(B)],8.h.3r)}},7k:c(C){b B=A.l.2H.4T;if(!B||(B.1S||B.r)[0]==8.r[0]){k}if(8.h.6a.23(8.r,(B.1S||B.r))){A.l.2z.23(8,"7k",[C,8.l(B)]);8.r.2m("lp",[C,8.l(B)],8.h.7k)}},5C:c(D,C){b B=C||A.l.2H.4T;if(!B||(B.1S||B.r)[0]==8.r[0]){k Z}b E=Z;8.r.4J(".l-52").6L(".l-24-9F").1x(c(){b F=A.1i(8,"52");if(F.h.gb&&A.l.8R(B,A.1Q(F,{v:F.r.v()}),F.h.5g)){E=1e;k Z}});if(E){k Z}if(8.h.6a.23(8.r,(B.1S||B.r))){A.l.2z.23(8,"5C",[D,8.l(B)]);8.r.2m("5C",[D,8.l(B)],8.h.5C);k 1e}k Z},5Z:c(C){b B=A.l.2H.4T;A.l.2z.23(8,"5Z",[C,8.l(B)]);if(B){8.r.2m("lo",[C,8.l(B)],8.h.5Z)}},81:c(C){b B=A.l.2H.4T;A.l.2z.23(8,"81",[C,8.l(B)]);if(B){8.r.2m("ln",[C,8.l(B)],8.h.81)}}});A.1Q(A.l.52,{4I:{1I:Z,5g:"8R"}});A.l.8R=c(L,F,J){if(!F.v){k Z}b D=(L.3n||L.17.1W).o,C=D+L.1Y.u,I=(L.3n||L.17.1W).p,H=I+L.1Y.t;b E=F.v.o,B=E+F.bb.u,K=F.v.p,G=K+F.bb.t;5r(J){1u"fZ":k(E<D&&C<B&&K<I&&H<G);1D;1u"8R":k(E<D+(L.1Y.u/2)&&C-(L.1Y.u/2)<B&&K<I+(L.1Y.t/2)&&H-(L.1Y.t/2)<G);1D;1u"cO":k(E<((L.3n||L.17.1W).o+(L.7x||L.v.1F).o)&&((L.3n||L.17.1W).o+(L.7x||L.v.1F).o)<B&&K<((L.3n||L.17.1W).p+(L.7x||L.v.1F).p)&&((L.3n||L.17.1W).p+(L.7x||L.v.1F).p)<G);1D;1u"cP":k((I>=K&&I<=G)||(H>=K&&H<=G)||(I<K&&H>G))&&((D>=E&&D<=B)||(C>=E&&C<=B)||(D<E&&C>B));1D;5q:k Z;1D}};A.l.2H={4T:19,8S:[],b0:c(D,F){b B=A.l.2H.8S;b E=F?F.5H:19;1R(b C=0;C<B.1m;C++){if(B[C].h.1I||(D&&!B[C].h.6a.23(B[C].r,(D.1S||D.r)))){7l}B[C].57=B[C].r.q("4q")!="5n";if(!B[C].57){7l}B[C].v=B[C].r.v();B[C].bb={u:B[C].r[0].4N,t:B[C].r[0].4O};if(E=="lm"||E=="ll"){B[C].5Z.23(B[C],F)}}},5C:c(B,C){b D=Z;A.1x(A.l.2H.8S,c(){if(!8.h){k}if(!8.h.1I&&8.57&&A.l.8R(B,8,8.h.5g)){D=8.5C.23(8,C)}if(!8.h.1I&&8.57&&8.h.6a.23(8.r,(B.1S||B.r))){8.7o=1;8.5G=0;8.81.23(8,C)}});k D},3F:c(B,C){if(B.h.9H){A.l.2H.b0(B,C)}A.1x(A.l.2H.8S,c(){if(8.h.1I||8.ga||!8.57){k}b E=A.l.8R(B,8,8.h.5g);b G=!E&&8.5G==1?"7o":(E&&8.5G==0?"5G":19);if(!G){k}b F;if(8.h.gb){b D=8.r.58(".l-52:eq(0)");if(D.1m){F=A.1i(D[0],"52");F.ga=(G=="5G"?1:0)}}if(F&&G=="5G"){F["5G"]=0;F["7o"]=1;F.7k.23(F,C)}8[G]=1;8[G=="7o"?"5G":"7o"]=0;8[G=="5G"?"3r":"7k"].23(8,C);if(F&&G=="7o"){F["7o"]=0;F["5G"]=1;F.3r.23(F,C)}})}};A.l.2z.1T("52","ba",{5Z:c(C,B){A(8).1n(B.h.ba)},81:c(C,B){A(8).1J(B.h.ba)},5C:c(C,B){A(8).1J(B.h.ba)}});A.l.2z.1T("52","b9",{3r:c(C,B){A(8).1n(B.h.b9)},7k:c(C,B){A(8).1J(B.h.b9)},5C:c(C,B){A(8).1J(B.h.b9)}})})(1v);(c(A){A.4b("l.1k",A.1Q({},A.l.4s,{5l:c(){b M=8,N=8.h;b Q=8.r.q("17");8.d1=8.r;8.r.1n("l-1k").q({17:/6w/.1B(Q)?"2b":Q});A.1Q(N,{9O:!!(N.5F),1c:N.1c||N.51||N.1E?N.1c||"lk":19,6G:N.6G===1e?"l-1k-9R-1G":N.6G});b H="b3 g8 #lj";N.g6={"l-1k":{4q:"6O"},"l-1k-1G":{17:"1W",aX:"#g9",fc:"0.b3"},"l-1k-n":{2s:"n-2i",t:"5j",o:"31",3e:"31",d5:H},"l-1k-s":{2s:"s-2i",t:"5j",o:"31",3e:"31",d8:H},"l-1k-e":{2s:"e-2i",u:"5j",p:"31",3h:"31",d7:H},"l-1k-w":{2s:"w-2i",u:"5j",p:"31",3h:"31",d6:H},"l-1k-3X":{2s:"3X-2i",u:"5j",t:"5j",d7:H,d8:H},"l-1k-3W":{2s:"3W-2i",u:"5j",t:"5j",d8:H,d6:H},"l-1k-4d":{2s:"4d-2i",u:"5j",t:"5j",d7:H,d5:H},"l-1k-3V":{2s:"3V-2i",u:"5j",t:"5j",d6:H,d5:H}};N.d4={"l-1k-1G":{aX:"#g9",a8:"b3 g8 #lh",t:"g7",u:"g7"},"l-1k-n":{2s:"n-2i",p:"31",o:"45%"},"l-1k-s":{2s:"s-2i",3h:"31",o:"45%"},"l-1k-e":{2s:"e-2i",3e:"31",p:"45%"},"l-1k-w":{2s:"w-2i",o:"31",p:"45%"},"l-1k-3X":{2s:"3X-2i",3e:"31",3h:"31"},"l-1k-3W":{2s:"3W-2i",o:"31",3h:"31"},"l-1k-3V":{2s:"3V-2i",o:"31",p:"31"},"l-1k-4d":{2s:"4d-2i",3e:"31",p:"31"}};N.d3=8.r[0].4l;if(N.d3.3i(/lg|b4|1p|4o|5P|86/i)){b B=8.r;if(/2b/.1B(B.q("17"))&&A.22.7v){B.q({17:"2b",p:"46",o:"46"})}B.8c(A(\'<1w 2u="l-d0"	2Q="2X: 3H;"></1w>\').q({17:B.q("17"),u:B.2Y(),t:B.2M(),p:B.q("p"),o:B.q("o")}));b J=8.r;8.r=8.r.1o();8.r.1i("1k",8);8.r.q({7X:J.q("7X"),7Y:J.q("7Y"),7f:J.q("7f"),7g:J.q("7g")});J.q({7X:0,7Y:0,7f:0,7g:0});if(A.22.9Z&&N.aD){J.q("2i","5n")}N.6F=J.q({17:"6w",f4:1,4q:"6O"});8.r.q({3U:J.q("3U")});8.9Q()}if(!N.3d){N.3d=!A(".l-1k-1G",8.r).1m?"e,s,3X":{n:".l-1k-n",e:".l-1k-e",s:".l-1k-s",w:".l-1k-w",3X:".l-1k-3X",3W:".l-1k-3W",4d:".l-1k-4d",3V:".l-1k-3V"}}if(N.3d.3S==aC){N.2C=N.2C||95;if(N.3d=="lf"){N.3d="n,e,s,w,3X,3W,4d,3V"}b O=N.3d.7D(",");N.3d={};b G={1G:"17: 1W; 4q: 5n; 2X:3H;",n:"p: 7n; u:2T%;",e:"3e: 7n; t:2T%;",s:"3h: 7n; u:2T%;",w:"o: 7n; t:2T%;",3X:"3h: 7n; 3e: 31;",3W:"3h: 7n; o: 31;",4d:"p: 7n; 3e: 31;",3V:"p: 7n; o: 31;"};1R(b R=0;R<O.1m;R++){b S=A.fs(O[R]),L=N.g6,F="l-1k-"+S,C=!A.l.q(F)&&!N.6G,P=A.l.q("l-1k-9R-1G"),T=A.1Q(L[F],L["l-1k-1G"]),D=A.1Q(N.d4[F],!P?N.d4["l-1k-1G"]:{});b K=/3W|3X|4d|3V/.1B(S)?{2C:++N.2C}:{};b I=(C?G[S]:""),E=A([\'<1w 2u="l-1k-1G \',F,\'" 2Q="\',I,G.1G,\'"></1w>\'].7r("")).q(K);N.3d[S]=".l-1k-"+S;8.r.5s(E.q(C?T:{}).q(N.6G?D:{}).1n(N.6G?"l-1k-9R-1G":"").1n(N.6G))}if(N.6G){8.r.1n("l-1k-9R").q(!A.l.q("l-1k-9R")?{}:{})}}8.g5=c(Y){Y=Y||8.r;1R(b V in N.3d){if(N.3d[V].3S==aC){N.3d[V]=A(N.3d[V],8.r).1y()}if(N.7i){N.3d[V].q({1O:0})}if(8.r.is(".l-d0")&&N.d3.3i(/b4|1p|4o|5P/i)){b W=A(N.3d[V],8.r),X=0;X=/3W|4d|3V|3X|n|s/.1B(V)?W.2M():W.2Y();b U=["bv",/4d|3V|n/.1B(V)?"le":/3X|3W|s/.1B(V)?"ld":/^e$/.1B(V)?"lc":"lb"].7r("");if(!N.7i){Y.q(U,X)}8.9Q()}if(!A(N.3d[V]).1m){7l}}};8.g5(8.r);N.8Q=A(".l-1k-1G",M.r);if(N.7G){N.8Q.1x(c(U,V){A.l.7G(V)})}N.8Q.la(c(){if(!N.b8){if(8.8g){b U=8.8g.3i(/l-1k-(3X|3W|4d|3V|n|e|s|w)/i)}M.2B=N.2B=U&&U[1]?U[1]:"3X"}});if(N.g0){N.8Q.1C();A(M.r).1n("l-1k-d2").ae(c(){A(8).1J("l-1k-d2");N.8Q.1y()},c(){if(!N.b8){A(8).1n("l-1k-d2");N.8Q.1C()}})}8.8d()},6i:{},l:c(){k{d1:8.d1,r:8.r,1c:8.1c,17:8.17,1r:8.1r,h:8.h,5h:8.5h,2O:8.2O}},2a:c(C,B){A.l.2z.23(8,C,[B,8.l()]);if(C!="2i"){8.r.2m(["2i",C].7r(""),[B,8.l()],8.h[C])}},3t:c(){b D=8.r,C=D.l9(".l-1k").5i(0);8.8e();b B=c(E){A(E).1J("l-1k l-1k-1I").49("1k").3o(".1k").4J(".l-1k-1G").1Z()};B(D);if(D.is(".l-d0")&&C){D.1o().5s(A(C).q({17:D.q("17"),u:D.2Y(),t:D.2M(),p:D.q("p"),o:D.q("o")})).4R().1Z();B(C)}},6h:c(K){if(8.h.1I){k Z}b J=Z;1R(b H in 8.h.3d){if(A(8.h.3d[H])[0]==K.1h){J=1e}}if(!J){k Z}b C=8.h,B=8.r.17(),D=8.r,I=c(O){k 1b(O,10)||0},G=A.22.3v&&A.22.6V<7;C.b8=1e;C.cZ={p:A(1d).2f(),o:A(1d).2e()};if(D.is(".l-24")||(/1W/).1B(D.q("17"))){b M=A.22.3v&&!C.1s&&(/1W/).1B(D.q("17"))&&!(/2b/).1B(D.1o().q("17"));b L=M?C.cZ.p:0,F=M?C.cZ.o:0;D.q({17:"1W",p:(B.p+L),o:(B.o+F)})}if(A.22.7v&&/2b/.1B(D.q("17"))){D.q({17:"2b",p:"46",o:"46"})}8.g1();b N=I(8.1c.q("o")),E=I(8.1c.q("p"));if(C.1s){N+=A(C.1s).2e()||0;E+=A(C.1s).2f()||0}8.v=8.1c.v();8.17={o:N,p:E};8.1r=C.1c||G?{u:D.2Y(),t:D.2M()}:{u:D.u(),t:D.t()};8.5h=C.1c||G?{u:D.2Y(),t:D.2M()}:{u:D.u(),t:D.t()};8.2O={o:N,p:E};8.7m={u:D.2Y()-D.u(),t:D.2M()-D.t()};8.g4={o:K.3b,p:K.3c};C.5F=(2D C.5F=="8l")?C.5F:((8.5h.t/8.5h.u)||1);if(C.cX){A("1K").q("2s",8.2B+"-2i")}8.2a("2j",K);k 1e},5o:c(I){b D=8.1c,C=8.h,J={},M=8,F=8.g4,K=8.2B;b N=(I.3b-F.o)||0,L=(I.3c-F.p)||0;b E=8.69[K];if(!E){k Z}b H=E.1t(8,[I,N,L]),G=A.22.3v&&A.22.6V<7,B=8.7m;if(C.9O||I.b5){H=8.g3(H,I)}H=8.g2(H,I);8.2a("2i",I);D.q({p:8.17.p+"2U",o:8.17.o+"2U",u:8.1r.u+"2U",t:8.1r.t+"2U"});if(!C.1c&&C.6F){8.9Q()}8.cV(H);8.r.2m("2i",[I,8.l()],8.h["2i"]);k Z},6g:c(I){8.h.b8=Z;b E=8.h,H=c(M){k 1b(M,10)||0},K=8;if(E.1c){b D=E.6F,B=D&&(/b4/i).1B(D.5i(0).4l),C=B&&A.l.9N(D.5i(0),"o")?0:K.7m.t,G=B?0:K.7m.u;b L={u:(K.1r.u-G),t:(K.1r.t-C)},F=(1b(K.r.q("o"),10)+(K.17.o-K.2O.o))||19,J=(1b(K.r.q("p"),10)+(K.17.p-K.2O.p))||19;if(!E.1E){8.r.q(A.1Q(L,{p:J,o:F}))}if(E.1c&&!E.1E){8.9Q()}}if(E.cX){A("1K").q("2s","46")}8.2a("2y",I);if(E.1c){8.1c.1Z()}k Z},cV:c(B){b C=8.h;8.v=8.1c.v();if(B.o){8.17.o=B.o}if(B.p){8.17.p=B.p}if(B.t){8.1r.t=B.t}if(B.u){8.1r.u=B.u}},g3:c(D,E){b F=8.h,G=8.17,C=8.1r,B=8.2B;if(D.t){D.u=(C.t/F.5F)}1g{if(D.u){D.t=(C.u*F.5F)}}if(B=="3W"){D.o=G.o+(C.u-D.u);D.p=19}if(B=="3V"){D.p=G.p+(C.t-D.t);D.o=G.o+(C.u-D.u)}k D},g2:c(H,I){b F=8.1c,E=8.h,N=E.9O||I.b5,M=8.2B,P=H.u&&E.6Z&&E.6Z<H.u,J=H.t&&E.6Y&&E.6Y<H.t,D=H.u&&E.5N&&E.5N>H.u,O=H.t&&E.5O&&E.5O>H.t;if(D){H.u=E.5N}if(O){H.t=E.5O}if(P){H.u=E.6Z}if(J){H.t=E.6Y}b C=8.2O.o+8.5h.u,L=8.17.p+8.1r.t;b G=/3W|3V|w/.1B(M),B=/3V|4d|n/.1B(M);if(D&&G){H.o=C-E.5N}if(P&&G){H.o=C-E.6Z}if(O&&B){H.p=L-E.5O}if(J&&B){H.p=L-E.6Y}b K=!H.u&&!H.t;if(K&&!H.o&&H.p){H.p=19}1g{if(K&&!H.p&&H.o){H.o=19}}k H},9Q:c(){b F=8.h;if(!F.6F){k}b D=F.6F,C=8.1c||8.r;if(!F.8P){b B=[D.q("64"),D.q("aK"),D.q("aL"),D.q("63")],E=[D.q("fb"),D.q("f8"),D.q("fa"),D.q("f9")];F.8P=A.6d(B,c(G,I){b H=1b(G,10)||0,J=1b(E[I],10)||0;k H+J})}D.q({t:(C.t()-F.8P[0]-F.8P[2])+"2U",u:(C.u()-F.8P[1]-F.8P[3])+"2U"})},g1:c(){b C=8.r,F=8.h;8.cY=C.v();if(F.1c){8.1c=8.1c||A(\'<1w 2Q="2X:3H;"></1w>\');b B=A.22.3v&&A.22.6V<7,D=(B?1:0),E=(B?2:-1);8.1c.1n(F.1c).q({u:C.2Y()+E,t:C.2M()+E,17:"1W",o:8.cY.o-D+"2U",p:8.cY.p-D+"2U",2C:++F.2C});8.1c.2K("1K");if(F.7G){A.l.7G(8.1c.5i(0))}}1g{8.1c=C}},69:{e:c(D,C,B){k{u:8.5h.u+C}},w:c(F,C,B){b G=8.h,D=8.5h,E=8.2O;k{o:E.o+C,u:D.u-C}},n:c(F,C,B){b G=8.h,D=8.5h,E=8.2O;k{p:E.p+B,t:D.t-B}},s:c(D,C,B){k{t:8.5h.t+B}},3X:c(D,C,B){k A.1Q(8.69.s.1t(8,1A),8.69.e.1t(8,[D,C,B]))},3W:c(D,C,B){k A.1Q(8.69.s.1t(8,1A),8.69.w.1t(8,[D,C,B]))},4d:c(D,C,B){k A.1Q(8.69.n.1t(8,1A),8.69.e.1t(8,[D,C,B]))},3V:c(D,C,B){k A.1Q(8.69.n.1t(8,1A),8.69.w.1t(8,[D,C,B]))}}}));A.1Q(A.l.1k,{4I:{6j:":1p",4L:1,80:0,aD:1e,7i:Z,5N:10,5O:10,5F:Z,7G:1e,cX:1e,g0:Z,6G:Z}});A.l.2z.1T("1k","1s",{2j:c(I,K){b E=K.h,M=A(8).1i("1k"),G=M.r;b C=E.1s,F=(C l8 A)?C.5i(0):(/1o/.1B(C))?G.1o().5i(0):C;if(!F){k}M.cW=A(F);if(/1d/.1B(C)||C==1d){M.9P={o:0,p:0};M.b6={o:0,p:0};M.8O={r:A(1d),o:0,p:0,u:A(1d).u(),t:A(1d).t()||1d.1K.3R.6W}}1g{M.9P=A(F).v();M.b6=A(F).17();M.b7={t:A(F).9v(),u:A(F).aB()};b J=M.9P,B=M.b7.t,H=M.b7.u,D=(A.l.9N(F,"o")?F.94:H),L=(A.l.9N(F)?F.6W:B);M.8O={r:F,o:J.o,p:J.p,u:D,t:L}}},2i:c(H,K){b E=K.h,N=A(8).1i("1k"),C=N.b7,J=N.9P,G=N.1r,I=N.17,L=E.9O||H.b5,B={p:0,o:0},D=N.cW;if(D[0]!=1d&&/6w/.1B(D.q("17"))){B=N.b6}if(I.o<(E.1c?J.o:B.o)){N.1r.u=N.1r.u+(E.1c?(N.17.o-J.o):(N.17.o-B.o));if(L){N.1r.t=N.1r.u*E.5F}N.17.o=E.1c?J.o:B.o}if(I.p<(E.1c?J.p:0)){N.1r.t=N.1r.t+(E.1c?(N.17.p-J.p):N.17.p);if(L){N.1r.u=N.1r.t/E.5F}N.17.p=E.1c?J.p:0}b F=(E.1c?N.v.o-J.o:(N.17.o-B.o))+N.7m.u,M=(E.1c?N.v.p-J.p:N.17.p)+N.7m.t;if(F+N.1r.u>=N.8O.u){N.1r.u=N.8O.u-F;if(L){N.1r.t=N.1r.u*E.5F}}if(M+N.1r.t>=N.8O.t){N.1r.t=N.8O.t-M;if(L){N.1r.u=N.1r.t/E.5F}}},2y:c(G,J){b C=J.h,L=A(8).1i("1k"),H=L.17,I=L.9P,B=L.b6,D=L.cW;b E=A(L.1c),M=E.v(),K=E.aB(),F=E.9v();if(C.1c&&!C.1E&&/2b/.1B(D.q("17"))){A(8).q({o:(M.o-I.o),p:(M.p-I.p),u:K,t:F})}if(C.1c&&!C.1E&&/6w/.1B(D.q("17"))){A(8).q({o:B.o+(M.o-I.o),p:B.p+(M.p-I.p),u:K,t:F})}}});A.l.2z.1T("1k","2J",{2i:c(H,J){b D=J.h,L=A(8).1i("1k"),G=L.1r,E=L.5h,F=L.2O,K=L.2B,I=D.9O||H.b5;D.2J=2D D.2J=="8l"?[D.2J,D.2J]:D.2J;b C=1f.3E((G.u-E.u)/(D.2J[0]||1))*(D.2J[0]||1),B=1f.3E((G.t-E.t)/(D.2J[1]||1))*(D.2J[1]||1);if(/^(3X|s|e)$/.1B(K)){L.1r.u=E.u+C;L.1r.t=E.t+B}1g{if(/^(4d)$/.1B(K)){L.1r.u=E.u+C;L.1r.t=E.t+B;L.17.p=F.p-B}1g{if(/^(3W)$/.1B(K)){L.1r.u=E.u+C;L.1r.t=E.t+B;L.17.o=F.o-C}1g{L.1r.u=E.u+C;L.1r.t=E.t+B;L.17.p=F.p-B;L.17.o=F.o-C}}}}});A.l.2z.1T("1k","1E",{2y:c(I,K){b F=K.h,L=A(8).1i("1k");b E=F.6F,B=E&&(/b4/i).1B(E.5i(0).4l),C=B&&A.l.9N(E.5i(0),"o")?0:L.7m.t,H=B?0:L.7m.u;b D={u:(L.1r.u-H),t:(L.1r.t-C)},G=(1b(L.r.q("o"),10)+(L.17.o-L.2O.o))||19,J=(1b(L.r.q("p"),10)+(L.17.p-L.2O.p))||19;L.r.1E(A.1Q(D,J&&G?{p:J,o:G}:{}),{1z:F.l7||"aU",1N:F.l6||"9B",ct:c(){b M={u:1b(L.r.q("u"),10),t:1b(L.r.q("t"),10),p:1b(L.r.q("p"),10),o:1b(L.r.q("o"),10)};if(E){E.q({u:M.u,t:M.t})}L.cV(M);L.2a("1E",I)}})}});A.l.2z.1T("1k","51",{2j:c(E,D){b F=D.h,B=A(8).1i("1k"),G=F.6F,C=B.1r;if(!G){B.51=B.r.6B()}1g{B.51=G.6B()}B.51.q({1O:0.25,4q:"6O",17:"2b",t:C.t,u:C.u,3U:0,o:0,p:0}).1n("l-1k-51").1n(2D F.51=="56"?F.51:"");B.51.2K(B.1c)},2i:c(D,C){b E=C.h,B=A(8).1i("1k"),F=E.6F;if(B.51){B.51.q({17:"2b",t:B.1r.t,u:B.1r.u})}},2y:c(D,C){b E=C.h,B=A(8).1i("1k"),F=E.6F;if(B.51&&B.1c){B.1c.5i(0).cU(B.51.5i(0))}}});A.l.2z.1T("1k","5E",{2j:c(E,C){b F=C.h,B=A(8).1i("1k"),D=c(G){A(G).1x(c(){A(8).1i("1k-cT",{u:1b(A(8).u(),10),t:1b(A(8).t(),10),o:1b(A(8).q("o"),10),p:1b(A(8).q("p"),10)})})};if(2D(F.5E)=="6k"){if(F.5E.1m){F.5E=F.5E[0];D(F.5E)}1g{A.1x(F.5E,c(G,H){D(G)})}}1g{D(F.5E)}},2i:c(F,E){b G=E.h,C=A(8).1i("1k"),D=C.5h,I=C.2O;b H={t:(C.1r.t-D.t)||0,u:(C.1r.u-D.u)||0,p:(C.17.p-I.p)||0,o:(C.17.o-I.o)||0},B=c(J,K){A(J).1x(c(){b N=A(8).1i("1k-cT"),M={},L=K&&K.1m?K:["u","t","p","o"];A.1x(L||["u","t","p","o"],c(O,Q){b P=(N[Q]||0)+(H[Q]||0);if(P&&P>=0){M[Q]=P||19}});A(8).q(M)})};if(2D(G.5E)=="6k"){A.1x(G.5E,c(J,K){B(J,K)})}1g{B(G.5E)}},2y:c(C,B){A(8).49("1k-cT-2j")}})})(1v);(c(A){A.4b("l.3s",A.1Q({},A.l.4s,{5l:c(){b B=8;8.r.1n("l-3s");8.cQ=Z;b C;8.9L=c(){C=A(B.h.3u,B.r[0]);C.1x(c(){b D=A(8);b E=D.v();A.1i(8,"3s-2I",{r:8,$r:D,o:E.o,p:E.p,3e:E.o+D.u(),3h:E.p+D.t(),82:Z,1L:D.4a("l-1L"),4n:D.4a("l-4n"),3B:D.4a("l-3B")})})};8.9L();8.b2=C.1n("l-l5");8.8d();8.1c=A(1d.l4("1w")).q({a8:"b3 l3 fq"})},5e:c(){if(8.h.1I){8.87()}1g{8.6N()}},3t:c(){8.r.1J("l-3s l-3s-1I").49("3s").3o(".3s");8.8e()},6h:c(E){b C=8;8.cS=[E.3b,E.3c];if(8.h.1I){k}b D=8.h;8.b2=A(D.3u,8.r[0]);8.r.2m("l2",[E,{"3s":8.r[0],"h":D}],D.2j);A("1K").5s(8.1c);8.1c.q({"z-3D":2T,"17":"1W","o":E.di,"p":E.l1,"u":0,"t":0});if(D.fX){8.9L()}8.b2.3u(".l-1L").1x(c(){b F=A.1i(8,"3s-2I");F.82=1e;if(!E.4m){F.$r.1J("l-1L");F.1L=Z;F.$r.1n("l-3B");F.3B=1e;C.r.2m("cR",[E,{3s:C.r[0],3B:F.r,h:D}],D.3B)}});b B=Z;A(E.1h).58().7W().1x(c(){if(A.1i(8,"3s-2I")){B=1e}});k 8.h.l0?!B:1e},5o:c(I){b C=8;8.cQ=1e;if(8.h.1I){k}b E=8.h;b D=8.cS[0],H=8.cS[1],B=I.3b,G=I.3c;if(D>B){b F=B;B=D;D=F}if(H>G){b F=G;G=H;H=F}8.1c.q({o:D,p:H,u:B-D,t:G-H});8.b2.1x(c(){b J=A.1i(8,"3s-2I");if(!J||J.r==C.r[0]){k}b K=Z;if(E.5g=="cP"){K=(!(J.o>B||J.3e<D||J.p>G||J.3h<H))}1g{if(E.5g=="fZ"){K=(J.o>D&&J.3e<B&&J.p>H&&J.3h<G)}}if(K){if(J.1L){J.$r.1J("l-1L");J.1L=Z}if(J.3B){J.$r.1J("l-3B");J.3B=Z}if(!J.4n){J.$r.1n("l-4n");J.4n=1e;C.r.2m("kZ",[I,{3s:C.r[0],4n:J.r,h:E}],E.4n)}}1g{if(J.4n){if(I.4m&&J.82){J.$r.1J("l-4n");J.4n=Z;J.$r.1n("l-1L");J.1L=1e}1g{J.$r.1J("l-4n");J.4n=Z;if(J.82){J.$r.1n("l-3B");J.3B=1e}C.r.2m("cR",[I,{3s:C.r[0],3B:J.r,h:E}],E.3B)}}if(J.1L){if(!I.4m&&!J.82){J.$r.1J("l-1L");J.1L=Z;J.$r.1n("l-3B");J.3B=1e;C.r.2m("cR",[I,{3s:C.r[0],3B:J.r,h:E}],E.3B)}}}});k Z},6g:c(D){b B=8;8.cQ=Z;b C=8.h;A(".l-3B",8.r[0]).1x(c(){b E=A.1i(8,"3s-2I");E.$r.1J("l-3B");E.3B=Z;E.82=Z;B.r.2m("kY",[D,{3s:B.r[0],fY:E.r,h:C}],C.fY)});A(".l-4n",8.r[0]).1x(c(){b E=A.1i(8,"3s-2I");E.$r.1J("l-4n").1n("l-1L");E.4n=Z;E.1L=1e;E.82=1e;B.r.2m("kX",[D,{3s:B.r[0],1L:E.r,h:C}],C.1L)});8.r.2m("kW",[D,{3s:B.r[0],h:8.h}],8.h.2y);8.1c.1Z();k Z}}));A.1Q(A.l.3s,{4I:{4L:1,80:0,6j:":1p",2K:"1K",fX:1e,3u:"*",5g:"cP"}})})(1v);(c(B){c A(E,D){b C=B.22.9Z&&B.22.6V<kV;if(E.fW&&!C){k E.fW(D)}if(E.fV){k!!(E.fV(D)&16)}5y(D=D.3R){if(D==E){k 1e}}k Z}B.4b("l.2P",B.1Q({},B.l.4s,{5l:c(){b C=8.h;8.4Z={};8.r.1n("l-2P");8.9L();8.6E=8.2c.1m?(/o|3e/).1B(8.2c[0].2I.q("cI")):Z;if(!(/(2b|1W|4X)/).1B(8.r.q("17"))){8.r.q("17","2b")}8.v=8.r.v();8.8d()},6i:{},l:c(C){k{1c:(C||8)["1c"],2Z:(C||8)["2Z"]||B([]),17:(C||8)["17"],9M:(C||8)["3n"],h:8.h,r:8.r,2I:(C||8)["1S"],fU:C?C.r:19}},2a:c(F,E,C,D){B.l.2z.23(8,F,[E,8.l(C)]);if(!D){8.r.2m(F=="5I"?F:"5I"+F,[E,8.l(C)],8.h[F])}},fL:c(E){b C=(B.8N(8.h.2c)?8.h.2c.23(8.r):B(8.h.2c,8.r)).6L(".l-2P-1c");b D=[];E=E||{};C.1x(c(){b F=(B(8).2L(E.kU||"id")||"").3i(E.fT||(/(.+)[-=8Y](.+)/));if(F){D.4K((E.5Y||F[1])+"[]="+(E.5Y&&E.fT?F[1]:F[2]))}});k D.7r("&")},fK:c(C){b D=(B.8N(8.h.2c)?8.h.2c.23(8.r):B(8.h.2c,8.r)).6L(".l-2P-1c");b E=[];D.1x(c(){E.4K(B(8).2L(C||"id"))});k E},fQ:c(J){b E=8.3n.o,D=E+8.1Y.u,I=8.3n.p,H=I+8.1Y.t;b F=J.o,C=F+J.u,K=J.p,G=K+J.t;if(8.h.5g=="cO"||8.h.kT||(8.h.5g=="cJ"&&8.1Y[8.6E?"u":"t"]>J[8.6E?"u":"t"])){k(I+8.v.1F.p>K&&I+8.v.1F.p<G&&E+8.v.1F.o>F&&E+8.v.1F.o<C)}1g{k(F<E+(8.1Y.u/2)&&D-(8.1Y.u/2)<C&&K<I+(8.1Y.t/2)&&H-(8.1Y.t/2)<G)}},fP:c(J){b E=8.3n.o,D=E+8.1Y.u,I=8.3n.p,H=I+8.1Y.t;b F=J.o,C=F+J.u,K=J.p,G=K+J.t;if(8.h.5g=="cO"||(8.h.5g=="cJ"&&8.1Y[8.6E?"u":"t"]>J[8.6E?"u":"t"])){if(!(I+8.v.1F.p>K&&I+8.v.1F.p<G&&E+8.v.1F.o>F&&E+8.v.1F.o<C)){k Z}if(8.6E){if(E+8.v.1F.o>F&&E+8.v.1F.o<F+J.u/2){k 2}if(E+8.v.1F.o>F+J.u/2&&E+8.v.1F.o<C){k 1}}1g{if(I+8.v.1F.p>K&&I+8.v.1F.p<K+J.t/2){k 2}if(I+8.v.1F.p>K+J.t/2&&I+8.v.1F.p<G){k 1}}}1g{if(!(F<E+(8.1Y.u/2)&&D-(8.1Y.u/2)<C&&K<I+(8.1Y.t/2)&&H-(8.1Y.t/2)<G)){k Z}if(8.6E){if(D>F&&E<F){k 2}if(E<C&&D>C){k 1}}1g{if(H>K&&I<K){k 1}if(I<G&&H>G){k 2}}}k Z},9L:c(){8.b1();8.9H()},b1:c(){8.2c=[];8.2g=[8];b D=8.2c;b C=8;b F=[[B.8N(8.h.2c)?8.h.2c.23(8.r,19,{h:8.h,2I:8.1S}):B(8.h.2c,8.r),8]];if(8.h.cN){1R(b G=8.h.cN.1m-1;G>=0;G--){b I=B(8.h.cN[G]);1R(b E=I.1m-1;E>=0;E--){b H=B.1i(I[E],"2P");if(H&&!H.h.1I){F.4K([B.8N(H.h.2c)?H.h.2c.23(H.r):B(H.h.2c,H.r),H]);8.2g.4K(H)}}}}1R(b G=F.1m-1;G>=0;G--){F[G][0].1x(c(){B.1i(8,"2P-2I",F[G][1]);D.4K({2I:B(8),1V:F[G][1],u:0,t:0,o:0,p:0})})}},9H:c(D){if(8.2l){b C=8.2l.v();8.v.1o={p:C.p+8.9J.p,o:C.o+8.9J.o}}1R(b F=8.2c.1m-1;F>=0;F--){if(8.2c[F].1V!=8.9K&&8.9K&&8.2c[F].2I[0]!=8.1S[0]){7l}b E=8.h.fS?B(8.h.fS,8.2c[F].2I):8.2c[F].2I;if(!D){8.2c[F].u=E[0].4N;8.2c[F].t=E[0].4O}b G=E.v();8.2c[F].o=G.o;8.2c[F].p=G.p}if(8.h.cM&&8.h.cM.fR){8.h.cM.fR.23(8)}1g{1R(b F=8.2g.1m-1;F>=0;F--){b G=8.2g[F].r.v();8.2g[F].4Z.o=G.o;8.2g[F].4Z.p=G.p;8.2g[F].4Z.u=8.2g[F].r.2Y();8.2g[F].4Z.t=8.2g[F].r.2M()}}},3t:c(){8.r.1J("l-2P l-2P-1I").49("2P").3o(".2P");8.8e();1R(b C=8.2c.1m-1;C>=0;C--){8.2c[C].2I.49("2P-2I")}},cL:c(E){b C=E||8,F=C.h;if(F.2Z.3S==aC){b D=F.2Z;F.2Z={r:c(){k B("<1w></1w>").1n(D)[0]},9G:c(G,H){H.q(G.v()).q({u:G.2Y(),t:G.2M()})}}}C.2Z=B(F.2Z.r.23(C.r,C.1S)).2K("1K").q({17:"1W"});F.2Z.9G.23(C.r,C.1S,C.2Z)},fO:c(F){1R(b D=8.2g.1m-1;D>=0;D--){if(8.fQ(8.2g[D].4Z)){if(!8.2g[D].4Z.3r){if(8.9K!=8.2g[D]){b I=kS;b H=19;b E=8.3n[8.2g[D].6E?"o":"p"];1R(b C=8.2c.1m-1;C>=0;C--){if(!A(8.2g[D].r[0],8.2c[C].2I[0])){7l}b G=8.2c[C][8.2g[D].6E?"o":"p"];if(1f.3T(G-E)<I){I=1f.3T(G-E);H=8.2c[C]}}if(!H&&!8.h.fJ){7l}if(8.2Z){8.2Z.1Z()}if(8.2g[D].h.2Z){8.2g[D].cL(8)}1g{8.2Z=19}8.9K=8.2g[D];H?8.aZ(F,H,19,1e):8.aZ(F,19,8.2g[D].r,1e);8.2a("6Q",F);8.2g[D].2a("6Q",F,8)}8.2g[D].2a("3r",F,8);8.2g[D].4Z.3r=1}}1g{if(8.2g[D].4Z.3r){8.2g[D].2a("7k",F,8);8.2g[D].4Z.3r=0}}}},93:c(G,F){if(8.h.1I||8.h.5H=="6w"){k Z}8.b1();b E=19,D=8,C=B(G.1h).58().1x(c(){if(B.1i(8,"2P-2I")==D){E=B(8);k Z}});if(B.1i(G.1h,"2P-2I")==D){E=B(G.1h)}if(!E){k Z}if(8.h.1G&&!F){b H=Z;B(8.h.1G,E).4J("*").7W().1x(c(){if(8==G.1h){H=1e}});if(!H){k Z}}8.1S=E;k 1e},6h:c(H,F,C){b J=8.h;8.9K=8;8.9H();8.1c=2D J.1c=="c"?B(J.1c.1t(8.r[0],[H,8.1S])):8.1S.6B();if(!8.1c.58("1K").1m){B(J.2K!="1o"?J.2K:8.1S[0].3R)[0].fN(8.1c[0])}8.1c.q({17:"1W",4j:"5p"}).1n("l-2P-1c");8.30={o:(1b(8.1S.q("7X"),10)||0),p:(1b(8.1S.q("7Y"),10)||0)};8.v=8.1S.v();8.v={p:8.v.p-8.30.p,o:8.v.o-8.30.o};8.v.1F={o:H.3b-8.v.o,p:H.3c-8.v.p};8.2l=8.1c.2l();b D=8.2l.v();8.9J={p:(1b(8.2l.q("64"),10)||0),o:(1b(8.2l.q("63"),10)||0)};8.v.1o={p:D.p+8.9J.p,o:D.o+8.9J.o};8.2O=8.8M(H);8.cK={5V:8.1S.5V()[0],1o:8.1S.1o()[0]};8.1Y={u:8.1c.2Y(),t:8.1c.2M()};if(J.2Z){8.cL()}8.2a("2j",H);8.1Y={u:8.1c.2Y(),t:8.1c.2M()};if(J.3O){if(J.3O.o!=2p){8.v.1F.o=J.3O.o}if(J.3O.3e!=2p){8.v.1F.o=8.1Y.u-J.3O.3e}if(J.3O.p!=2p){8.v.1F.p=J.3O.p}if(J.3O.3h!=2p){8.v.1F.p=8.1Y.t-J.3O.3h}}if(J.1s){if(J.1s=="1o"){J.1s=8.1c[0].3R}if(J.1s=="1d"||J.1s=="3a"){8.1s=[0-8.v.1o.o,0-8.v.1o.p,B(J.1s=="1d"?1d:3a).u()-8.v.1o.o-8.1Y.u-8.30.o-(1b(8.r.q("7f"),10)||0),(B(J.1s=="1d"?1d:3a).t()||1d.1K.3R.6W)-8.v.1o.p-8.1Y.t-8.30.p-(1b(8.r.q("7g"),10)||0)]}if(!(/^(1d|3a|1o)$/).1B(J.1s)){b G=B(J.1s)[0];b I=B(J.1s).v();8.1s=[I.o+(1b(B(G).q("63"),10)||0)-8.v.1o.o,I.p+(1b(B(G).q("64"),10)||0)-8.v.1o.p,I.o+1f.2d(G.94,G.4N)-(1b(B(G).q("63"),10)||0)-8.v.1o.o-8.1Y.u-8.30.o-(1b(8.1S.q("7f"),10)||0),I.p+1f.2d(G.6W,G.4O)-(1b(B(G).q("64"),10)||0)-8.v.1o.p-8.1Y.t-8.30.p-(1b(8.1S.q("7g"),10)||0)]}}if(8.h.2Z!="6B"){8.1S.q("8B","3H")}if(!C){1R(b E=8.2g.1m-1;E>=0;E--){8.2g[E].2a("5Z",H,8)}}if(B.l.2H){B.l.2H.4T=8}if(B.l.2H&&!J.aY){B.l.2H.b0(8,H)}8.9F=1e;8.5o(H);k 1e},4G:c(D,E){if(!E){E=8.17}b C=D=="1W"?1:-1;k{p:(E.p+8.v.1o.p*C-(8.2l[0]==1d.1K?0:8.2l[0].2f)*C+8.30.p*C),o:(E.o+8.v.1o.o*C-(8.2l[0]==1d.1K?0:8.2l[0].2e)*C+8.30.o*C)}},8M:c(F){b G=8.h;b C={p:(F.3c-8.v.1F.p-8.v.1o.p+(8.2l[0]==1d.1K?0:8.2l[0].2f)),o:(F.3b-8.v.1F.o-8.v.1o.o+(8.2l[0]==1d.1K?0:8.2l[0].2e))};if(!8.2O){k C}if(8.1s){if(C.o<8.1s[0]){C.o=8.1s[0]}if(C.p<8.1s[1]){C.p=8.1s[1]}if(C.o>8.1s[2]){C.o=8.1s[2]}if(C.p>8.1s[3]){C.p=8.1s[3]}}if(G.2J){b E=8.2O.p+1f.3E((C.p-8.2O.p)/G.2J[1])*G.2J[1];C.p=8.1s?(!(E<8.1s[1]||E>8.1s[3])?E:(!(E<8.1s[1])?E-G.2J[1]:E+G.2J[1])):E;b D=8.2O.o+1f.3E((C.o-8.2O.o)/G.2J[0])*G.2J[0];C.o=8.1s?(!(D<8.1s[0]||D>8.1s[2])?D:(!(D<8.1s[0])?D-G.2J[0]:D+G.2J[0])):D}k C},5o:c(D){8.17=8.8M(D);8.3n=8.4G("1W");B.l.2z.23(8,"5I",[D,8.l()]);8.3n=8.4G("1W");8.1c[0].2Q.o=8.17.o+"2U";8.1c[0].2Q.p=8.17.p+"2U";1R(b C=8.2c.1m-1;C>=0;C--){b E=8.fP(8.2c[C]);if(!E){7l}if(8.2c[C].2I[0]!=8.1S[0]&&8.1S[E==1?"4g":"5V"]()[0]!=8.2c[C].2I[0]&&!A(8.1S[0],8.2c[C].2I[0])&&(8.h.5H=="kR-kQ"?!A(8.r[0],8.2c[C].2I[0]):1e)){8.6A=E==1?"61":"66";8.aZ(D,8.2c[C]);8.2a("6Q",D);1D}}8.fO(D);if(B.l.2H){B.l.2H.3F(8,D)}8.r.2m("5I",[D,8.l()],8.h["5I"]);k Z},aZ:c(H,G,D,F){D?D[0].fN(8.1S[0]):G.2I[0].3R.a0(8.1S[0],(8.6A=="61"?G.2I[0]:G.2I[0].eG));8.9I=8.9I?++8.9I:1;b E=8,C=8.9I;3a.7s(c(){if(C==E.9I){E.9H(!F)}},0);if(8.h.2Z){8.h.2Z.9G.23(8.r,8.1S,8.2Z)}},6g:c(E,D){if(B.l.2H&&!8.h.aY){B.l.2H.5C(8,E)}if(8.h.68){b C=8;b F=C.1S.v();if(C.2Z){C.2Z.1E({1O:"1C"},(1b(8.h.68,10)||8b)-50)}B(8.1c).1E({o:F.o-8.v.1o.o-C.30.o+(8.2l[0]==1d.1K?0:8.2l[0].2e),p:F.p-8.v.1o.p-C.30.p+(8.2l[0]==1d.1K?0:8.2l[0].2f)},1b(8.h.68,10)||8b,c(){C.4j(E)})}1g{8.4j(E,D)}k Z},4j:c(E,D){if(8.cK.5V!=8.1S.5V().6L(".l-2P-1c")[0]||8.cK.1o!=8.1S.1o()[0]){8.2a("9G",E,19,D)}if(!A(8.r[0],8.1S[0])){8.2a("1Z",E,19,D);1R(b C=8.2g.1m-1;C>=0;C--){if(A(8.2g[C].r[0],8.1S[0])){8.2g[C].2a("9G",E,8,D);8.2g[C].2a("fM",E,8,D)}}}1R(b C=8.2g.1m-1;C>=0;C--){8.2g[C].2a("81",E,8,D);if(8.2g[C].4Z.3r){8.2g[C].2a("7k",E,8);8.2g[C].4Z.3r=0}}8.9F=Z;if(8.8L){8.2a("2y",E,19,D);k Z}B(8.1S).q("8B","");if(8.2Z){8.2Z.1Z()}8.1c.1Z();8.1c=19;8.2a("2y",E,19,D);k 1e}}));B.1Q(B.l.2P,{9U:"fL fK",4I:{1c:"6B",5g:"cJ",4L:1,80:0,5D:1e,3J:20,3I:20,6j:":1p",2c:"> *",2C:95,fJ:1e,2K:"1o"}});B.l.2z.1T("2P","2s",{2j:c(E,D){b C=B("1K");if(C.q("2s")){D.h.8K=C.q("2s")}C.q("2s",D.h.2s)},2y:c(D,C){if(C.h.8K){B("1K").q("2s",C.h.8K)}}});B.l.2z.1T("2P","2C",{2j:c(E,D){b C=D.1c;if(C.q("2C")){D.h.8J=C.q("2C")}C.q("2C",D.h.2C)},2y:c(D,C){if(C.h.8J){B(C.1c).q("2C",C.h.8J)}}});B.l.2z.1T("2P","1O",{2j:c(E,D){b C=D.1c;if(C.q("1O")){D.h.8I=C.q("1O")}C.q("1O",D.h.1O)},2y:c(D,C){if(C.h.8I){B(C.1c).q("1O",C.h.8I)}}});B.l.2z.1T("2P","5D",{2j:c(E,D){b F=D.h;b C=B(8).1i("2P");C.3m=c(G){do{if(/46|5D/.1B(G.q("2X"))||(/46|5D/).1B(G.q("2X-y"))){k G}G=G.1o()}5y(G[0].3R);k B(1d)}(C.1S);C.3l=c(G){do{if(/46|5D/.1B(G.q("2X"))||(/46|5D/).1B(G.q("2X-x"))){k G}G=G.1o()}5y(G[0].3R);k B(1d)}(C.1S);if(C.3m[0]!=1d&&C.3m[0].6C!="7j"){C.8H=C.3m.v()}if(C.3l[0]!=1d&&C.3l[0].6C!="7j"){C.8G=C.3l.v()}},5I:c(E,D){b F=D.h;b C=B(8).1i("2P");if(C.3m[0]!=1d&&C.3m[0].6C!="7j"){if((C.8H.p+C.3m[0].4O)-E.3c<F.3J){C.3m[0].2f=C.3m[0].2f+F.3I}if(E.3c-C.8H.p<F.3J){C.3m[0].2f=C.3m[0].2f-F.3I}}1g{if(E.3c-B(1d).2f()<F.3J){B(1d).2f(B(1d).2f()-F.3I)}if(B(3a).t()-(E.3c-B(1d).2f())<F.3J){B(1d).2f(B(1d).2f()+F.3I)}}if(C.3l[0]!=1d&&C.3l[0].6C!="7j"){if((C.8G.o+C.3l[0].4N)-E.3b<F.3J){C.3l[0].2e=C.3l[0].2e+F.3I}if(E.3b-C.8G.o<F.3J){C.3l[0].2e=C.3l[0].2e-F.3I}}1g{if(E.3b-B(1d).2e()<F.3J){B(1d).2e(B(1d).2e()-F.3I)}if(B(3a).u()-(E.3b-B(1d).2e())<F.3J){B(1d).2e(B(1d).2e()+F.3I)}}}});B.l.2z.1T("2P","2B",{5I:c(E,D){b C=B(8).1i("2P");if(D.h.2B=="y"){C.17.o=C.2O.o}if(D.h.2B=="x"){C.17.p=C.2O.p}}})})(1v);(c(C){C.1j=C.1j||{};C.1Q(C.1j,{5A:c(F,G){1R(b E=0;E<G.1m;E++){if(G[E]!==19){C.1i(F[0],"ec.fI."+G[E],F[0].2Q[G[E]])}}},4F:c(F,G){1R(b E=0;E<G.1m;E++){if(G[E]!==19){F.q(G[E],C.1i(F[0],"ec.fI."+G[E]))}}},4E:c(E,F){if(F=="5e"){F=E.is(":3H")?"1y":"1C"}k F},f7:c(F,G){b H,E;5r(F[0]){1u"p":H=0;1D;1u"98":H=0.5;1D;1u"3h":H=1;1D;5q:H=F[0]/G.t}5r(F[1]){1u"o":E=0;1D;1u"7E":E=0.5;1D;1u"3e":E=1;1D;5q:E=F[1]/G.u}k{x:E,y:H}},6z:c(F){if(F.1o().2L("id")=="cH"){k F}b E={u:F.2Y({3U:1e}),t:F.2M({3U:1e}),"cI":F.q("cI")};F.8c(\'<1w id="cH" 2Q="kP-1r:2T%;aX:7i;a8:5n;3U:0;bv:0"></1w>\');b I=F.1o();if(F.q("17")=="6w"){I.q({17:"2b"});F.q({17:"2b"})}1g{b H=F.q("p");if(5L(1b(H))){H="46"}b G=F.q("o");if(5L(1b(G))){G="46"}I.q({17:F.q("17"),p:H,o:G,2C:F.q("z-3D")}).1y();F.q({17:"2b",p:0,o:0})}I.q(E);k I},65:c(E){if(E.1o().2L("id")=="cH"){k E.1o().kO(E)}k E},5B:c(F,G,E,H){H=H||{};C.1x(G,c(J,I){aW=F.fv(I);if(aW[0]>0){H[I]=aW[0]*E+aW[1]}});k H},9E:c(G,H,J,I){b E=(2D J=="c"?J:(I?I:19));b F=(2D J=="6k"?J:19);k 8.1x(c(){b O={};b M=C(8);b N=M.2L("2Q")||"";if(2D N=="6k"){N=N["cG"]}if(G.5e){M.4a(G.5e)?G.1Z=G.5e:G.1T=G.5e}b K=C.1Q({},(1d.aV?1d.aV.fH(8,19):8.fG));if(G.1T){M.1n(G.1T)}if(G.1Z){M.1J(G.1Z)}b L=C.1Q({},(1d.aV?1d.aV.fH(8,19):8.fG));if(G.1T){M.1J(G.1T)}if(G.1Z){M.1n(G.1Z)}1R(b P in L){if(2D L[P]!="c"&&L[P]&&P.88("kN")==-1&&P.88("1m")==-1&&L[P]!=K[P]&&(P.3i(/aO/i)||(!P.3i(/aO/i)&&!5L(1b(L[P],10))))&&(K.17!="6w"||(K.17=="6w"&&!P.3i(/o|p|3h|3e/)))){O[P]=L[P]}}M.1E(O,H,F,c(){if(2D C(8).2L("2Q")=="6k"){C(8).2L("2Q")["cG"]="";C(8).2L("2Q")["cG"]=N}1g{C(8).2L("2Q",N)}if(G.1T){C(8).1n(G.1T)}if(G.1Z){C(8).1J(G.1Z)}if(E){E.1t(8,1A)}})})}});C.fn.1Q({fF:C.fn.1y,fE:C.fn.1C,fC:C.fn.5e,fB:C.fn.1n,fz:C.fn.1J,fy:C.fn.aJ,5f:c(E,G,F,H){k C.1j[E]?C.1j[E].23(8,{kM:E,h:G||{},1z:F,2o:H}):19},1y:c(){if(!1A[0]||(1A[0].3S==7w||/(aU|8X|cF)/.1B(1A[0]))){k 8.fF.1t(8,1A)}1g{b E=1A[1]||{};E["2G"]="1y";k 8.5f.1t(8,[1A[0],E,1A[2]||E.1z,1A[3]||E.2o])}},1C:c(){if(!1A[0]||(1A[0].3S==7w||/(aU|8X|cF)/.1B(1A[0]))){k 8.fE.1t(8,1A)}1g{b E=1A[1]||{};E["2G"]="1C";k 8.5f.1t(8,[1A[0],E,1A[2]||E.1z,1A[3]||E.2o])}},5e:c(){if(!1A[0]||(1A[0].3S==7w||/(aU|8X|cF)/.1B(1A[0]))||(1A[0].3S==fD)){k 8.fC.1t(8,1A)}1g{b E=1A[1]||{};E["2G"]="5e";k 8.5f.1t(8,[1A[0],E,1A[2]||E.1z,1A[3]||E.2o])}},1n:c(F,E,H,G){k E?C.1j.9E.1t(8,[{1T:F},E,H,G]):8.fB(F)},1J:c(F,E,H,G){k E?C.1j.9E.1t(8,[{1Z:F},E,H,G]):8.fz(F)},aJ:c(F,E,H,G){k E?C.1j.9E.1t(8,[{5e:F},E,H,G]):8.fy(F)},fw:c(E,G,F,I,H){k C.1j.9E.1t(8,[{1T:G,1Z:E},F,I,H])},kL:c(){k 8.fw.1t(8,1A)},fv:c(E){b F=8.q(E),G=[];C.1x(["em","2U","%","kK"],c(H,I){if(F.88(I)>0){G=[aT(F),I]}});k G}});1v.1x(["7Z","kJ","kI","kH","kG","aO","kF"],c(F,E){1v.fx.ct[E]=c(G){if(G.kE==0){G.2j=D(G.fu,E);G.4R=B(G.4R)}G.fu.2Q[E]="cE("+[1f.2d(1f.2q(1b((G.2w*(G.4R[0]-G.2j[0]))+G.2j[0]),2t),0),1f.2d(1f.2q(1b((G.2w*(G.4R[1]-G.2j[1]))+G.2j[1]),2t),0),1f.2d(1f.2q(1b((G.2w*(G.4R[2]-G.2j[2]))+G.2j[2]),2t),0)].7r(",")+")"}});c B(F){b E;if(F&&F.3S==8a&&F.1m==3){k F}if(E=/cE\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.78(F)){k[1b(E[1]),1b(E[2]),1b(E[3])]}if(E=/cE\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.78(F)){k[aT(E[1])*2.55,aT(E[2])*2.55,aT(E[3])*2.55]}if(E=/#([a-fA-8F-9]{2})([a-fA-8F-9]{2})([a-fA-8F-9]{2})/.78(F)){k[1b(E[1],16),1b(E[2],16),1b(E[3],16)]}if(E=/#([a-fA-8F-9])([a-fA-8F-9])([a-fA-8F-9])/.78(F)){k[1b(E[1]+E[1],16),1b(E[2]+E[2],16),1b(E[3]+E[3],16)]}if(E=/ft\\(0, 0, 0, 0\\)/.78(F)){k A["7i"]}k A[1v.fs(F).8w()]}c D(G,E){b F;do{F=1v.kD(G,E);if(F!=""&&F!="7i"||1v.4l(G,"1K")){1D}E="7Z"}5y(G=G.3R);k B(F)}b A={kC:[0,2t,2t],kB:[fo,2t,2t],kA:[fr,fr,kz],fq:[0,0,0],ky:[0,0,2t],kx:[fj,42,42],kw:[0,2t,2t],kv:[0,0,8E],ku:[0,8E,8E],kt:[cD,cD,cD],ks:[0,2T,0],kr:[kq,kp,fp],ko:[8E,0,8E],kn:[85,fp,47],km:[2t,cv,0],kl:[kk,50,kj],ki:[8E,0,0],kh:[kg,aa,kf],ke:[kd,0,aS],kc:[2t,0,2t],kb:[2t,ka,0],k9:[0,6D,0],k8:[75,0,k7],k6:[fo,fm,cv],k5:[k4,k3,fm],k2:[fk,2t,2t],k1:[fl,k0,fl],jZ:[aS,aS,aS],jY:[2t,jX,jW],jV:[2t,2t,fk],jU:[0,2t,0],jT:[2t,0,2t],jS:[6D,0,0],jR:[0,0,6D],jQ:[6D,6D,0],jP:[2t,fj,0],jO:[2t,aR,jN],jM:[6D,0,6D],jL:[6D,0,6D],jK:[2t,0,0],jJ:[aR,aR,aR],jI:[2t,2t,2t],jH:[2t,2t,0],7i:[2t,2t,2t]};1v.1N["jG"]=1v.1N["9B"];1v.1Q(1v.1N,{fi:"fh",9B:c(F,G,E,I,H){k 1v.1N[1v.1N.fi](F,G,E,I,H)},jF:c(F,G,E,I,H){k I*(G/=H)*G+E},fh:c(F,G,E,I,H){k-I*(G/=H)*(G-2)+E},jE:c(F,G,E,I,H){if((G/=H/2)<1){k I/2*G*G+E}k-I/2*((--G)*(G-2)-1)+E},jD:c(F,G,E,I,H){k I*(G/=H)*G*G+E},jC:c(F,G,E,I,H){k I*((G=G/H-1)*G*G+1)+E},jB:c(F,G,E,I,H){if((G/=H/2)<1){k I/2*G*G*G+E}k I/2*((G-=2)*G*G+2)+E},jA:c(F,G,E,I,H){k I*(G/=H)*G*G*G+E},jz:c(F,G,E,I,H){k-I*((G=G/H-1)*G*G*G-1)+E},jy:c(F,G,E,I,H){if((G/=H/2)<1){k I/2*G*G*G*G+E}k-I/2*((G-=2)*G*G*G-2)+E},jx:c(F,G,E,I,H){k I*(G/=H)*G*G*G*G+E},jw:c(F,G,E,I,H){k I*((G=G/H-1)*G*G*G*G+1)+E},jv:c(F,G,E,I,H){if((G/=H/2)<1){k I/2*G*G*G*G*G+E}k I/2*((G-=2)*G*G*G*G+2)+E},ju:c(F,G,E,I,H){k-I*1f.fg(G/H*(1f.67/2))+I+E},jt:c(F,G,E,I,H){k I*1f.9D(G/H*(1f.67/2))+E},js:c(F,G,E,I,H){k-I/2*(1f.fg(1f.67*G/H)-1)+E},jr:c(F,G,E,I,H){k(G==0)?E:I*1f.7h(2,10*(G/H-1))+E},jq:c(F,G,E,I,H){k(G==H)?E+I:I*(-1f.7h(2,-10*G/H)+1)+E},jp:c(F,G,E,I,H){if(G==0){k E}if(G==H){k E+I}if((G/=H/2)<1){k I/2*1f.7h(2,10*(G-1))+E}k I/2*(-1f.7h(2,-10*--G)+2)+E},jo:c(F,G,E,I,H){k-I*(1f.8C(1-(G/=H)*G)-1)+E},jn:c(F,G,E,I,H){k I*1f.8C(1-(G=G/H-1)*G)+E},jm:c(F,G,E,I,H){if((G/=H/2)<1){k-I/2*(1f.8C(1-G*G)-1)+E}k I/2*(1f.8C(1-(G-=2)*G)+1)+E},jl:c(F,H,E,L,K){b I=1.8D;b J=0;b G=L;if(H==0){k E}if((H/=K)==1){k E+L}if(!J){J=K*0.3}if(G<1f.3T(L)){G=L;b I=J/4}1g{b I=J/(2*1f.67)*1f.cC(L/G)}k-(G*1f.7h(2,10*(H-=1))*1f.9D((H*K-I)*(2*1f.67)/J))+E},jk:c(F,H,E,L,K){b I=1.8D;b J=0;b G=L;if(H==0){k E}if((H/=K)==1){k E+L}if(!J){J=K*0.3}if(G<1f.3T(L)){G=L;b I=J/4}1g{b I=J/(2*1f.67)*1f.cC(L/G)}k G*1f.7h(2,-10*H)*1f.9D((H*K-I)*(2*1f.67)/J)+L+E},jj:c(F,H,E,L,K){b I=1.8D;b J=0;b G=L;if(H==0){k E}if((H/=K/2)==2){k E+L}if(!J){J=K*(0.3*1.5)}if(G<1f.3T(L)){G=L;b I=J/4}1g{b I=J/(2*1f.67)*1f.cC(L/G)}if(H<1){k-0.5*(G*1f.7h(2,10*(H-=1))*1f.9D((H*K-I)*(2*1f.67)/J))+E}k G*1f.7h(2,-10*(H-=1))*1f.9D((H*K-I)*(2*1f.67)/J)*0.5+L+E},ji:c(F,G,E,J,I,H){if(H==2p){H=1.8D}k J*(G/=I)*G*((H+1)*G-H)+E},jh:c(F,G,E,J,I,H){if(H==2p){H=1.8D}k J*((G=G/I-1)*G*((H+1)*G+H)+1)+E},jg:c(F,G,E,J,I,H){if(H==2p){H=1.8D}if((G/=I/2)<1){k J/2*(G*G*(((H*=(1.ff))+1)*G-H))+E}k J/2*((G-=2)*G*(((H*=(1.ff))+1)*G+H)+2)+E},fe:c(F,G,E,I,H){k I-1v.1N.cB(F,H-G,0,I,H)+E},cB:c(F,G,E,I,H){if((G/=H)<(1/2.75)){k I*(7.aQ*G*G)+E}1g{if(G<(2/2.75)){k I*(7.aQ*(G-=(1.5/2.75))*G+0.75)+E}1g{if(G<(2.5/2.75)){k I*(7.aQ*(G-=(2.25/2.75))*G+0.jf)+E}1g{k I*(7.aQ*(G-=(2.je/2.75))*G+0.jd)+E}}}},jc:c(F,G,E,I,H){if(G<H/2){k 1v.1N.fe(F,G*2,0,I,H)*0.5+E}k 1v.1N.cB(F,G*2-H,0,I,H)*0.5+I*0.5+E}})})(1v);(c(A){A.1j.jb=c(B){k 8.3k(c(){b D=A(8),C=["17","p","o"];b H=A.1j.4E(D,B.h.2G||"1C");b G=B.h.6A||"3K";A.1j.5A(D,C);D.1y();b J=A.1j.6z(D).q({2X:"3H"});b E=(G=="3K")?"t":"u";b I=(G=="3K")?J.t():J.u();if(H=="1y"){J.q(E,0)}b F={};F[E]=H=="1y"?I:0;J.1E(F,B.1z,B.h.1N,c(){if(H=="1C"){D.1C()}A.1j.4F(D,C);A.1j.65(D);if(B.2o){B.2o.1t(D[0],1A)}D.48()})})}})(1v);(c(A){A.1j.ja=c(B){k 8.3k(c(){b E=A(8),K=["17","p","o"];b J=A.1j.4E(E,B.h.2G||"5f");b M=B.h.6A||"66";b C=B.h.4L||20;b D=B.h.cw||5;b G=B.1z||j9;if(/1y|1C/.1B(J)){K.4K("1O")}A.1j.5A(E,K);E.1y();A.1j.6z(E);b F=(M=="66"||M=="61")?"p":"o";b O=(M=="66"||M=="o")?"2w":"aM";b C=B.h.4L||(F=="p"?E.2M({3U:1e})/3:E.2Y({3U:1e})/3);if(J=="1y"){E.q("1O",0).q(F,O=="2w"?-C:C)}if(J=="1C"){C=C/(D*2)}if(J!="1C"){D--}if(J=="1y"){b H={1O:1};H[F]=(O=="2w"?"+=":"-=")+C;E.1E(H,G/2,B.h.1N);C=C/2;D--}1R(b I=0;I<D;I++){b N={},L={};N[F]=(O=="2w"?"-=":"+=")+C;L[F]=(O=="2w"?"+=":"-=")+C;E.1E(N,G/2,B.h.1N).1E(L,G/2,B.h.1N);C=(J=="1C")?C*2:C/2}if(J=="1C"){b H={1O:0};H[F]=(O=="2w"?"-=":"+=")+C;E.1E(H,G/2,B.h.1N,c(){E.1C();A.1j.4F(E,K);A.1j.65(E);if(B.2o){B.2o.1t(8,1A)}})}1g{b N={},L={};N[F]=(O=="2w"?"-=":"+=")+C;L[F]=(O=="2w"?"+=":"-=")+C;E.1E(N,G/2,B.h.1N).1E(L,G/2,B.h.1N,c(){A.1j.4F(E,K);A.1j.65(E);if(B.2o){B.2o.1t(8,1A)}})}E.3k("fx",c(){E.48()});E.48()})}})(1v);(c(A){A.1j.j8=c(B){k 8.3k(c(){b F=A(8),J=["17","p","o","t","u"];b I=A.1j.4E(F,B.h.2G||"1C");b K=B.h.6A||"3K";A.1j.5A(F,J);F.1y();b C=A.1j.6z(F).q({2X:"3H"});b E=F[0].6C=="j7"?C:F;b G={1r:(K=="3K")?"t":"u",17:(K=="3K")?"p":"o"};b D=(K=="3K")?E.t():E.u();if(I=="1y"){E.q(G.1r,0);E.q(G.17,D/2)}b H={};H[G.1r]=I=="1y"?D:0;H[G.17]=I=="1y"?0:D/2;E.1E(H,{3k:Z,1z:B.1z,1N:B.h.1N,62:c(){if(I=="1C"){F.1C()}A.1j.4F(F,J);A.1j.65(F);if(B.2o){B.2o.1t(F[0],1A)}F.48()}})})}})(1v);(c(A){A.1j.5C=c(B){k 8.3k(c(){b E=A(8),D=["17","p","o","1O"];b I=A.1j.4E(E,B.h.2G||"1C");b H=B.h.6A||"o";A.1j.5A(E,D);E.1y();A.1j.6z(E);b F=(H=="66"||H=="61")?"p":"o";b C=(H=="66"||H=="o")?"2w":"aM";b J=B.h.4L||(F=="p"?E.2M({3U:1e})/2:E.2Y({3U:1e})/2);if(I=="1y"){E.q("1O",0).q(F,C=="2w"?-J:J)}b G={1O:I=="1y"?1:0};G[F]=(I=="1y"?(C=="2w"?"+=":"-="):(C=="2w"?"-=":"+="))+J;E.1E(G,{3k:Z,1z:B.1z,1N:B.h.1N,62:c(){if(I=="1C"){E.1C()}A.1j.4F(E,D);A.1j.65(E);if(B.2o){B.2o.1t(8,1A)}E.48()}})})}})(1v);(c(A){A.1j.cA=c(B){k 8.3k(c(){b I=B.h.aP?1f.3E(1f.8C(B.h.aP)):3;b E=B.h.aP?1f.3E(1f.8C(B.h.aP)):3;B.h.2G=B.h.2G=="5e"?(A(8).is(":57")?"1C":"1y"):B.h.2G;b H=A(8).1y().q("8B","3H");b J=H.v();J.p-=1b(H.q("7Y"))||0;J.o-=1b(H.q("7X"))||0;b G=H.2Y(1e);b C=H.2M(1e);1R(b F=0;F<I;F++){1R(b D=0;D<E;D++){H.6B().2K("1K").8c("<1w></1w>").q({17:"1W",8B:"57",o:-D*(G/E),p:-F*(C/I)}).1o().1n("1j-cA").q({17:"1W",2X:"3H",u:G/E,t:C/I,o:J.o+D*(G/E)+(B.h.2G=="1y"?(D-1f.9q(E/2))*(G/E):0),p:J.p+F*(C/I)+(B.h.2G=="1y"?(F-1f.9q(I/2))*(C/I):0),1O:B.h.2G=="1y"?0:1}).1E({o:J.o+D*(G/E)+(B.h.2G=="1y"?0:(D-1f.9q(E/2))*(G/E)),p:J.p+F*(C/I)+(B.h.2G=="1y"?0:(F-1f.9q(I/2))*(C/I)),1O:B.h.2G=="1y"?1:0},B.1z||8b)}}7s(c(){B.h.2G=="1y"?H.q({8B:"57"}):H.q({8B:"57"}).1C();if(B.2o){B.2o.1t(H[0])}H.48();A(".1j-cA").1Z()},B.1z||8b)})}})(1v);(c(A){A.1j.j6=c(B){k 8.3k(c(){b E=A(8),J=["17","p","o"];b G=A.1j.4E(E,B.h.2G||"1C");b N=B.h.1r||15;b M=!(!B.h.j5);A.1j.5A(E,J);E.1y();b D=A.1j.6z(E).q({2X:"3H"});b H=((G=="1y")!=M);b F=H?["u","t"]:["t","u"];b C=H?[D.u(),D.t()]:[D.t(),D.u()];b I=/([0-9]+)%/.78(N);if(I){N=1b(I[1])/2T*C[G=="1C"?0:1]}if(G=="1y"){D.q(M?{t:0,u:N}:{t:N,u:0})}b L={},K={};L[F[0]]=G=="1y"?C[0]:N;K[F[1]]=G=="1y"?C[1]:0;D.1E(L,B.1z/2,B.h.1N).1E(K,B.1z/2,B.h.1N,c(){if(G=="1C"){E.1C()}A.1j.4F(E,J);A.1j.65(E);if(B.2o){B.2o.1t(E[0],1A)}E.48()})})}})(1v);(c(A){A.1j.j4=c(B){k 8.3k(c(){b E=A(8),D=["cz","7Z","1O"];b H=A.1j.4E(E,B.h.2G||"1y");b C=B.h.aO||"#j3";b G=E.q("7Z");A.1j.5A(E,D);E.1y();E.q({cz:"5n",7Z:C});b F={7Z:G};if(H=="1C"){F["1O"]=0}E.1E(F,{3k:Z,1z:B.1z,1N:B.h.1N,62:c(){if(H=="1C"){E.1C()}A.1j.4F(E,D);if(H=="1y"&&1v.22.3v){8.2Q.j2("3u")}if(B.2o){B.2o.1t(8,1A)}E.48()}})})}})(1v);(c(A){A.1j.j1=c(B){k 8.3k(c(){b D=A(8);b F=A.1j.4E(D,B.h.2G||"1y");b E=B.h.cw||5;if(F=="1C"){E--}if(D.is(":3H")){D.q("1O",0);D.1y();D.1E({1O:1},B.1z/2,B.h.1N);E=E-2}1R(b C=0;C<E;C++){D.1E({1O:0},B.1z/2,B.h.1N).1E({1O:1},B.1z/2,B.h.1N)}if(F=="1C"){D.1E({1O:0},B.1z/2,B.h.1N,c(){D.1C();if(B.2o){B.2o.1t(8,1A)}})}1g{D.1E({1O:0},B.1z/2,B.h.1N).1E({1O:1},B.1z/2,B.h.1N,c(){if(B.2o){B.2o.1t(8,1A)}})}D.3k("fx",c(){D.48()});D.48()})}})(1v);(c(A){A.1j.j0=c(B){k 8.3k(c(){b F=A(8);b C=A.1Q(1e,{},B.h);b H=A.1j.4E(F,B.h.2G||"1C");b G=1b(B.h.aN)||aa;C.fd=1e;b E={t:F.t(),u:F.u()};b D=G/2T;F.1U=(H=="1C")?E:{t:E.t*D,u:E.u*D};C.1U=F.1U;C.aN=(H=="1C")?G:2T;C.2G=H;F.5f("cy",C,B.1z,B.2o);F.48()})};A.1j.cy=c(B){k 8.3k(c(){b G=A(8);b D=A.1Q(1e,{},B.h);b J=A.1j.4E(G,B.h.2G||"5f");b H=1b(B.h.aN)||(1b(B.h.aN)==0?0:(J=="1C"?0:2T));b I=B.h.6A||"5p";b C=B.h.cx;if(J!="5f"){D.cx=C||["98","7E"];D.4F=1e}b F={t:G.t(),u:G.u()};G.1U=B.h.1U||(J=="1y"?{t:0,u:0}:F);b E={y:I!="a5"?(H/2T):1,x:I!="3K"?(H/2T):1};G.29={t:F.t*E.y,u:F.u*E.x};if(B.h.fd){if(J=="1y"){G.1U.1O=0;G.29.1O=1}if(J=="1C"){G.1U.1O=1;G.29.1O=0}}D.1U=G.1U;D.29=G.29;D.2G=J;G.5f("1r",D,B.1z,B.2o);G.48()})};A.1j.1r=c(B){k 8.3k(c(){b C=A(8),N=["17","p","o","u","t","2X","1O"];b M=["17","p","o","2X","1O"];b J=["u","t","2X"];b P=["fc"];b K=["64","aL","fb","fa"];b F=["63","aK","f9","f8"];b G=A.1j.4E(C,B.h.2G||"5f");b I=B.h.4F||Z;b E=B.h.cy||"5p";b O=B.h.cx;b D={t:C.t(),u:C.u()};C.1U=B.h.1U||D;C.29=B.h.29||D;if(O){b H=A.1j.f7(O,D);C.1U.p=(D.t-C.1U.t)*H.y;C.1U.o=(D.u-C.1U.u)*H.x;C.29.p=(D.t-C.29.t)*H.y;C.29.o=(D.u-C.29.u)*H.x}b L={1U:{y:C.1U.t/D.t,x:C.1U.u/D.u},29:{y:C.29.t/D.t,x:C.29.u/D.u}};if(E=="iZ"||E=="5p"){if(L.1U.y!=L.29.y){N=N.5k(K);C.1U=A.1j.5B(C,K,L.1U.y,C.1U);C.29=A.1j.5B(C,K,L.29.y,C.29)}if(L.1U.x!=L.29.x){N=N.5k(F);C.1U=A.1j.5B(C,F,L.1U.x,C.1U);C.29=A.1j.5B(C,F,L.29.x,C.29)}}if(E=="7F"||E=="5p"){if(L.1U.y!=L.29.y){N=N.5k(P);C.1U=A.1j.5B(C,P,L.1U.y,C.1U);C.29=A.1j.5B(C,P,L.29.y,C.29)}}A.1j.5A(C,I?N:M);C.1y();A.1j.6z(C);C.q("2X","3H").q(C.1U);if(E=="7F"||E=="5p"){K=K.5k(["7Y","7g"]).5k(P);F=F.5k(["7X","7f"]);J=N.5k(K).5k(F);C.4J("*[u]").1x(c(){2W=A(8);if(I){A.1j.5A(2W,J)}b Q={t:2W.t(),u:2W.u()};2W.1U={t:Q.t*L.1U.y,u:Q.u*L.1U.x};2W.29={t:Q.t*L.29.y,u:Q.u*L.29.x};if(L.1U.y!=L.29.y){2W.1U=A.1j.5B(2W,K,L.1U.y,2W.1U);2W.29=A.1j.5B(2W,K,L.29.y,2W.29)}if(L.1U.x!=L.29.x){2W.1U=A.1j.5B(2W,F,L.1U.x,2W.1U);2W.29=A.1j.5B(2W,F,L.29.x,2W.29)}2W.q(2W.1U);2W.1E(2W.29,B.1z,B.h.1N,c(){if(I){A.1j.4F(2W,J)}})})}C.1E(C.29,{3k:Z,1z:B.1z,1N:B.h.1N,62:c(){if(G=="1C"){C.1C()}A.1j.4F(C,I?N:M);A.1j.65(C);if(B.2o){B.2o.1t(8,1A)}C.48()}})})}})(1v);(c(A){A.1j.iY=c(B){k 8.3k(c(){b E=A(8),K=["17","p","o"];b J=A.1j.4E(E,B.h.2G||"5f");b M=B.h.6A||"o";b C=B.h.4L||20;b D=B.h.cw||3;b G=B.1z||B.h.1z||cv;A.1j.5A(E,K);E.1y();A.1j.6z(E);b F=(M=="66"||M=="61")?"p":"o";b O=(M=="66"||M=="o")?"2w":"aM";b H={},N={},L={};H[F]=(O=="2w"?"-=":"+=")+C;N[F]=(O=="2w"?"+=":"-=")+C*2;L[F]=(O=="2w"?"-=":"+=")+C*2;E.1E(H,G,B.h.1N);1R(b I=1;I<D;I++){E.1E(N,G,B.h.1N).1E(L,G,B.h.1N)}E.1E(N,G,B.h.1N).1E(H,G/2,B.h.1N,c(){A.1j.4F(E,K);A.1j.65(E);if(B.2o){B.2o.1t(8,1A)}});E.3k("fx",c(){E.48()});E.48()})}})(1v);(c(A){A.1j.6e=c(B){k 8.3k(c(){b E=A(8),D=["17","p","o"];b I=A.1j.4E(E,B.h.2G||"1y");b H=B.h.6A||"o";A.1j.5A(E,D);E.1y();A.1j.6z(E).q({2X:"3H"});b F=(H=="66"||H=="61")?"p":"o";b C=(H=="66"||H=="o")?"2w":"aM";b J=B.h.4L||(F=="p"?E.2M({3U:1e}):E.2Y({3U:1e}));if(I=="1y"){E.q(F,C=="2w"?-J:J)}b G={};G[F]=(I=="1y"?(C=="2w"?"+=":"-="):(C=="2w"?"-=":"+="))+J;E.1E(G,{3k:Z,1z:B.1z,1N:B.h.1N,62:c(){if(I=="1C"){E.1C()}A.1j.4F(E,D);A.1j.65(E);if(B.2o){B.2o.1t(8,1A)}E.48()}})})}})(1v);(c(A){A.1j.f6=c(B){k 8.3k(c(){b E=A(8);b G=A.1j.4E(E,B.h.2G||"5f");b F=A(B.h.29);b C=E.v();b D=A(\'<1w 2u="l-1j-f6"></1w>\').2K(1d.1K);if(B.h.8g){D.1n(B.h.8g)}D.1n(B.h.8g);D.q({p:C.p,o:C.o,t:E.2M()-1b(D.q("64"))-1b(D.q("aL")),u:E.2Y()-1b(D.q("63"))-1b(D.q("aK")),17:"1W"});C=F.v();f5={p:C.p,o:C.o,t:F.2M()-1b(D.q("64"))-1b(D.q("aL")),u:F.2Y()-1b(D.q("63"))-1b(D.q("aK"))};D.1E(f5,B.1z,B.h.1N,c(){D.1Z();if(B.2o){B.2o.1t(E[0],1A)}E.48()})})}})(1v);(c(E){E.4b("l.3N",{5l:c(){b G=8.h;if(G.iX){b J=8.r.4J("a").3u(G.eX);if(J.1m){if(J.3u(G.7J).1m){G.3L=J}1g{G.3L=J.1o().1o().5V();J.1n("4T")}}}G.4D=8.r.4J(G.7J);G.3L=C(G.4D,G.3L);if(E.22.3v){8.r.4J("a").q("f4","1")}if(!8.r.4a("l-3N")){8.r.1n("l-3N");E("<4p 2u=\'l-3N-o\'/>").a0(G.4D);E("<4p 2u=\'l-3N-3e\'/>").2K(G.4D);G.4D.1n("l-3N-7J").2L("iW","0")}b I;if(G.f3){I=8.r.1o().t();G.4D.1x(c(){I-=E(8).2M()});b H=0;G.4D.4g().1x(c(){H=1f.2d(H,E(8).9v()-E(8).t())}).t(I-H)}1g{if(G.7e){I=0;G.4D.4g().1x(c(){I=1f.2d(I,E(8).2M())}).t(I)}}G.4D.6L(G.3L||"").4g().1C();G.3L.1o().7W().1n(G.3p);if(G.3C){8.r.2V((G.3C)+".3N",F)}},5Z:c(G){F.23(8.r[0],{1h:C(8.h.4D,G)[0]})},3t:c(){8.h.4D.4g().q("4q","");if(8.h.f3||8.h.7e){8.h.4D.4g().q("t","")}E.49(8.r[0],"3N");8.r.1J("l-3N").3o(".3N")}});c B(H,G){k c(){k H.1t(G,1A)}}c D(I){if(!E.1i(8,"3N")){k}b G=E.1i(8,"3N");b H=G.h;H.8A=I?0:--H.8A;if(H.8A){k}if(H.iV){H.6y.1T(H.7V).q({t:"",2X:""})}E(8).2m("f2",[E.3C.dm({5H:"f2",1h:G.r[0]}),H.1i],H.6Q)}c A(G,K,L,J,M){b I=E.1i(8,"3N").h;I.6y=G;I.7V=K;I.1i=L;b H=B(D,8);I.8A=K.1r()===0?G.1r():K.1r();if(I.aI){if(!I.9C&&J){E.l.3N.cu[I.aI]({6y:1v([]),7V:K,62:H,61:M,7e:I.7e})}1g{E.l.3N.cu[I.aI]({6y:G,7V:K,62:H,61:M,7e:I.7e})}}1g{if(!I.9C&&J){G.5e()}1g{K.1C();G.1y()}H(1e)}}c F(L){b J=E.1i(8,"3N").h;if(J.1I){k Z}if(!L.1h&&!J.9C){J.3L.1o().7W().aJ(J.3p);b I=J.3L.4g(),M={h:J,f1:1v([]),f0:J.3L,eZ:1v([]),eY:I},G=(J.3L=E([]));A.23(8,G,I,M);k Z}b K=E(L.1h);K=E(K.58(J.7J)[0]||K);b H=K[0]==J.3L[0];if(J.8A||(J.9C&&H)){k Z}if(!K.is(J.7J)){k}J.3L.1o().7W().aJ(J.3p);if(!H){K.1o().7W().1n(J.3p)}b G=K.4g(),I=J.3L.4g(),M={h:J,f1:K,f0:J.3L,eZ:G,eY:I},N=J.4D.3D(J.3L[0])>J.4D.3D(K[0]);J.3L=H?E([]):K;A.23(8,G,I,M,H,N);k Z}c C(H,G){k G!=2p?2D G=="8l"?H.3u(":eq("+G+")"):H.6L(H.6L(G)):G===Z?E([]):H.3u(":eq(0)")}E.1Q(E.l.3N,{4I:{3p:"1L",9C:1e,aI:"6e",3C:"1F",7J:"a",7e:1e,8A:0,eX:c(){k 8.3P.8w()==a2.3P.8w()}},cu:{6e:c(G,I){G=E.1Q({1N:"9B",1z:dG},G,I);if(!G.7V.1r()){G.6y.1E({t:"1y"},G);k}b H=G.7V.t(),J=G.6y.t(),K=J/H;G.6y.q({t:0,2X:"3H"}).1y();G.7V.3u(":3H").1x(G.62).4R().3u(":57").1E({t:"1C"},{ct:c(L){b M=(H-L)*K;if(E.22.3v||E.22.7v){M=1f.eh(M)}G.6y.t(M)},1z:G.1z,1N:G.1N,62:c(){if(!G.7e){G.6y.q("t","46")}G.62()}})},iU:c(G){8.6e(G,{1N:G.61?"iT":"9B",1z:G.61?95:dH})},iS:c(G){8.6e(G,{1N:"iR",1z:iQ})}}});E.fn.5Z=c(G){k 8.3N("5Z",G)}})(1v);(c($){b 3A="18";c 99(){8.eS=Z;8.9t=19;8.6x=[];8.7P=Z;8.7b=Z;8.cg="l-18-1w";8.cq="l-18-5s";8.6v="l-18-6M";8.ch="l-18-1X";8.bZ="l-18-8q";8.bT="l-18-5T";8.ak="l-18-4T-2n";8.cs=[];8.cs[""]={ev:"iP",ew:"iO 9z 4T 1a",et:"eW",eu:"eW iN 6Q",74:"&#iM;iL",es:"9A 9z iK 2k",73:"iJ&#iI;",er:"9A 9z 4g 2k",7N:"iH",ep:"9A 9z 4T 2k",41:["iG","iF","iE","iD","eV","iC","iB","iA","iz","iy","ix","iw"],5t:["iv","iu","it","ir","eV","iq","ip","io","im","il","ik","ij"],e7:"9A a eU 2k",e1:"9A a eU 26",en:"ii",ih:"ig ie 9z 26",4i:["ic","ib","ia","i9","i8","i7","i6"],4w:["i5","i4","i3","i2","i1","i0","hZ"],an:["hY","hX","hW","hV","hU","hT","hS"],ao:"hR 9j as dw 72 2n",7L:"eT 9j, M d",7H:"au/dd/7O",4z:0,ea:"eT a 1a",4S:Z};8.4B={7U:"3q",5d:"1y",cj:{},77:19,9y:"",7d:"...",8y:"",eQ:Z,9e:1e,c1:Z,9l:Z,8r:Z,bY:Z,e8:1e,e4:1e,e3:"-10:+10",9i:1e,8n:Z,71:Z,9h:Z,am:8.9k,4Q:"+10",44:Z,eo:8.7L,2F:19,2R:19,1z:"8X",9g:19,9w:19,7a:19,e0:19,9u:19,dZ:1,6s:1,4U:Z,9n:" - ",9r:"",8u:""};$.1Q(8.4B,8.cs[""]);8.2v=$(\'<1w id="\'+8.cg+\'" 2Q="4q: 5n;"></1w>\')}$.1Q(99.53,{7c:"hQ",c7:c(){if(8.eS){hP.c7.1t("",1A)}},hO:c(1P){9a(8.4B,1P||{});k 8},dQ:c(1h,1P){b 8z=19;1R(aH in 8.4B){b aG=1h.hN("1a:"+aH);if(aG){8z=8z||{};ca{8z[aH]=hM(aG)}c8(hL){8z[aH]=aG}}}b 4l=1h.4l.8w();b 4f=(4l=="1w"||4l=="4p");if(!1h.id){1h.id="dp"+1M 21().5u()}b f=8.cr($(1h),4f);f.1P=$.1Q({},1P||{},8z||{});if(4l=="1p"){8.eR(1h,f)}1g{if(4f){8.eN(1h,f)}}},cr:c(1h,4f){k{id:1h[0].id,1p:1h,4v:0,4u:0,4P:0,2r:0,2A:0,4f:4f,2v:(!4f?8.2v:$(\'<1w 2u="l-18-4f"></1w>\'))}},eR:c(1h,f){b 1p=$(1h);if(1p.4a(8.7c)){k}b 9y=8.1l(f,"9y");b 4S=8.1l(f,"4S");if(9y){1p[4S?"eO":"bu"](\'<4p 2u="\'+8.cq+\'">\'+9y+"</4p>")}b 7U=8.1l(f,"7U");if(7U=="3q"||7U=="5p"){1p.3q(8.8x)}if(7U=="5P"||7U=="5p"){b 7d=8.1l(f,"7d");b 8y=8.1l(f,"8y");b 6M=$(8.1l(f,"eQ")?$("<86/>").1n(8.6v).2L({bQ:8y,eP:7d,59:7d}):$(\'<5P 5H="5P"></5P>\').1n(8.6v).2x(8y==""?7d:$("<86/>").2L({bQ:8y,eP:7d,59:7d})));1p[4S?"eO":"bu"](6M);6M.1F(c(){if($.18.7P&&$.18.8v==1h){$.18.76()}1g{$.18.8x(1h)}k Z})}1p.1n(8.7c).6f(8.aF).bw(8.cp).2V("5a.18",c(3C,5Y,1H){f.1P[5Y]=1H}).2V("9x.18",c(3C,5Y){k 8.1l(f,5Y)});$.1i(1h,3A,f)},eN:c(1h,f){b 1p=$(1h);if(1p.4a(8.7c)){k}1p.1n(8.7c).5s(f.2v).2V("5a.18",c(3C,5Y,1H){f.1P[5Y]=1H}).2V("9x.18",c(3C,5Y){k 8.1l(f,5Y)});$.1i(1h,3A,f);8.c3(f,8.c6(f));8.5W(f)},hK:c(f){b 3M=8.8j(f);f.2v.u(3M[1]*$(".l-18",f.2v[0]).u())},hJ:c(1p,eL,7a,1P,2w){b f=8.eM;if(!f){b id="dp"+1M 21().5u();8.5X=$(\'<1p 5H="96" id="\'+id+\'" 1r="1" 2Q="17: 1W; p: -eF;"/>\');8.5X.6f(8.aF);$("1K").5s(8.5X);f=8.eM=8.cr(8.5X,Z);f.1P={};$.1i(8.5X[0],3A,f)}9a(f.1P,1P||{});8.5X.8s(eL);8.4Y=(2w?(2w.1m?2w:[2w.3b,2w.3c]):19);if(!8.4Y){b aA=3a.aB||1d.4c.cm||1d.1K.cm;b az=3a.9v||1d.4c.cl||1d.1K.cl;b 7T=1d.4c.2e||1d.1K.2e;b 7S=1d.4c.2f||1d.1K.2f;8.4Y=[(aA/2)-2T+7T,(az/2)-aa+7S]}8.5X.q("o",8.4Y[0]+"2U").q("p",8.4Y[1]+"2U");f.1P.7a=7a;8.7b=1e;8.2v.1n(8.ch);8.8x(8.5X[0]);if($.9s){$.9s(8.2v)}$.1i(8.5X[0],3A,f);k 8},hI:c(1h){b 4l=1h.4l.8w();b $1h=$(1h);$.49(1h,3A);if(4l=="1p"){$1h.7u("."+8.cq).1Z().4R().7u("."+8.6v).1Z().4R().1J(8.7c).3o("3q",8.8x).3o("6f",8.aF).3o("bw",8.cp)}1g{if(4l=="1w"||4l=="4p"){$1h.1J(8.7c).bz()}}},hH:c(1h){1h.1I=Z;$(1h).7u("5P."+8.6v).1x(c(){8.1I=Z}).4R().7u("86."+8.6v).q({1O:"1.0",2s:""});8.6x=$.6d(8.6x,c(1H){k(1H==1h?19:1H)})},hG:c(1h){1h.1I=1e;$(1h).7u("5P."+8.6v).1x(c(){8.1I=1e}).4R().7u("86."+8.6v).q({1O:"0.5",2s:"5q"});8.6x=$.6d(8.6x,c(1H){k(1H==1h?19:1H)});8.6x[8.6x.1m]=1h},eJ:c(1h){if(!1h){k Z}1R(b i=0;i<8.6x.1m;i++){if(8.6x[i]==1h){k 1e}}k Z},hF:c(1h,3Y,1H){b 1P=3Y||{};if(2D 3Y=="56"){1P={};1P[3Y]=1H}if(f=$.1i(1h,3A)){9a(f.1P,1P);8.5W(f)}},hE:c(1h,1a,5v){b f=$.1i(1h,3A);if(f){8.c3(f,1a,5v);8.5W(f)}},hD:c(1h){b f=$.1i(1h,3A);if(f){8.cb(f)}k(f?8.ap(f):19)},aF:c(e){b f=$.1i(e.1h,3A);b aE=1e;if($.18.7P){5r(e.6U){1u 9:$.18.76(19,"");1D;1u 13:$.18.bS(e.1h,f.4u,f.4P,$("4y.l-18-8o-7K-3r",f.2v)[0]);k Z;1D;1u 27:$.18.76(19,$.18.1l(f,"1z"));1D;1u 33:$.18.5x(e.1h,(e.4m?-1:-$.18.1l(f,"6s")),(e.4m?"Y":"M"));1D;1u 34:$.18.5x(e.1h,(e.4m?+1:+$.18.1l(f,"6s")),(e.4m?"Y":"M"));1D;1u 35:if(e.4m){$.18.c0(e.1h)}1D;1u 36:if(e.4m){$.18.bX(e.1h)}1D;1u 37:if(e.4m){$.18.5x(e.1h,-1,"D")}1D;1u 38:if(e.4m){$.18.5x(e.1h,-7,"D")}1D;1u 39:if(e.4m){$.18.5x(e.1h,+1,"D")}1D;1u 40:if(e.4m){$.18.5x(e.1h,+7,"D")}1D;5q:aE=Z}}1g{if(e.6U==36&&e.4m){$.18.8x(8)}1g{aE=Z}}if(aE){e.aD();e.dO()}},cp:c(e){b f=$.1i(e.1h,3A);b 6t=$.18.eA($.18.1l(f,"7H"));b co=aC.hC(e.eK==2p?e.6U:e.eK);k e.4m||(co<" "||!6t||6t.88(co)>-1)},8x:c(1p){1p=1p.1h||1p;if(1p.4l.8w()!="1p"){1p=$("1p",1p.3R)[0]}if($.18.eJ(1p)||$.18.8v==1p){k}b f=$.1i(1p,3A);b 9w=$.18.1l(f,"9w");9a(f.1P,(9w?9w.1t(1p,[1p,f]):{}));$.18.76(19,"");$.18.8v=1p;$.18.cb(f);if($.18.7b){1p.1H=""}if(!$.18.4Y){$.18.4Y=$.18.ck(1p);$.18.4Y[1]+=1p.4O}b 4k=Z;$(1p).58().1x(c(){4k|=$(8).q("17")=="4X";k!4k});if(4k&&$.22.7v){$.18.4Y[0]-=1d.4c.2e;$.18.4Y[1]-=1d.4c.2f}b v={o:$.18.4Y[0],p:$.18.4Y[1]};$.18.4Y=19;f.43=19;f.2v.q({17:"1W",4q:"6O",p:"-hB"});$.18.5W(f);f.2v.u($.18.8j(f)[1]*$(".l-18",f.2v[0])[0].4N);v=$.18.eH(f,v,4k);f.2v.q({17:($.18.7b&&$.9s?"6w":(4k?"4X":"1W")),4q:"5n",o:v.o+"2U",p:v.p+"2U"});if(!f.4f){b 5d=$.18.1l(f,"5d")||"1y";b 1z=$.18.1l(f,"1z");b 7Q=c(){$.18.7P=1e;if($.22.3v&&1b($.22.6V)<7){$("9d.l-18-bP").q({u:f.2v.u()+4,t:f.2v.t()+4})}};if($.1j&&$.1j[5d]){f.2v.1y(5d,$.18.1l(f,"cj"),1z,7Q)}1g{f.2v[5d](1z,7Q)}if(1z==""){7Q()}if(f.1p[0].5H!="3H"){f.1p[0].3q()}$.18.9t=f}},5W:c(f){b cn={u:f.2v.u()+4,t:f.2v.t()+4};f.2v.bz().5s(8.ex(f)).4J("9d.l-18-bP").q({u:cn.u,t:cn.t});b 3M=8.8j(f);f.2v[(3M[0]!=1||3M[1]!=1?"1T":"1Z")+"eI"]("l-18-hA");f.2v[(8.1l(f,"4S")?"1T":"1Z")+"eI"]("l-18-hz");if(f.1p&&f.1p[0].5H!="3H"){$(f.1p[0]).3q()}},eH:c(f,v,4k){b 2w=f.1p?8.ck(f.1p[0]):19;b aA=3a.aB||1d.4c.cm;b az=3a.9v||1d.4c.cl;b 7T=1d.4c.2e||1d.1K.2e;b 7S=1d.4c.2f||1d.1K.2f;if(8.1l(f,"4S")||(v.o+f.2v.u()-7T)>aA){v.o=1f.2d((4k?0:7T),2w[0]+(f.1p?f.1p.u():0)-(4k?7T:0)-f.2v.u()-(4k&&$.22.7v?1d.4c.2e:0))}1g{v.o-=(4k?7T:0)}if((v.p+f.2v.t()-7S)>az){v.p=1f.2d((4k?0:7S),2w[1]-(4k?7S:0)-(8.7b?0:f.2v.t())-(4k&&$.22.7v?1d.4c.2f:0))}1g{v.p-=(4k?7S:0)}k v},ck:c(7R){5y(7R&&(7R.5H=="3H"||7R.hy!=1)){7R=7R.eG}b 17=$(7R).v();k[17.o,17.p]},76:c(1p,1z){b f=8.9t;if(!f){k}b 4U=8.1l(f,"4U");if(4U&&8.6u){8.ax("#"+f.id,8.7I(f,f.3Z,f.4t,f.4h))}8.6u=Z;if(8.7P){1z=(1z!=19?1z:8.1l(f,"1z"));b 5d=8.1l(f,"5d");b 7Q=c(){$.18.ci(f)};if(1z!=""&&$.1j&&$.1j[5d]){f.2v.1C(5d,$.18.1l(f,"cj"),1z,7Q)}1g{f.2v[(1z==""?"1C":(5d=="hx"?"hw":(5d=="hv"?"hu":"1C")))](1z,7Q)}if(1z==""){8.ci(f)}b 9u=8.1l(f,"9u");if(9u){9u.1t((f.1p?f.1p[0]:19),[8.ap(f),f])}8.7P=Z;8.8v=19;f.1P.8q=19;if(8.7b){8.5X.q({17:"1W",o:"0",p:"-eF"});if($.9s){$.ht();$("1K").5s(8.2v)}}8.7b=Z}8.9t=19},ci:c(f){f.2v.1J(8.ch).3o(".l-18");$("."+8.bZ,f.2v).1Z()},dP:c(3C){if(!$.18.9t){k}b $1h=$(3C.1h);if(($1h.58("#"+$.18.cg).1m==0)&&!$1h.4a($.18.7c)&&!$1h.4a($.18.6v)&&$.18.7P&&!($.18.7b&&$.9s)){$.18.76(19,"")}},5x:c(id,v,5R){b 1h=$(id);b f=$.1i(1h[0],3A);8.ah(f,v,5R);8.5W(f)},bX:c(id){b 1h=$(id);b f=$.1i(1h[0],3A);if(8.1l(f,"bY")&&f.3Z){f.4v=f.3Z;f.2r=f.4u=f.4t;f.2A=f.4P=f.4h}1g{b 1a=1M 21();f.4v=1a.3f();f.2r=f.4u=1a.3x();f.2A=f.4P=1a.2N()}8.5x(1h);8.ag(f)},bN:c(id,4o,5R){b 1h=$(id);b f=$.1i(1h[0],3A);f.ay=Z;f[5R=="M"?"2r":"2A"]=4o.h[4o.hs].1H-0;8.5x(1h);8.ag(f)},bM:c(id){b 1h=$(id);b f=$.1i(1h[0],3A);if(f.1p&&f.ay&&!$.22.3v){f.1p[0].3q()}f.ay=!f.ay},ek:c(id,2n){b 1h=$(id);b f=$.1i(1h[0],3A);f.1P.4z=2n;8.5W(f)},bS:c(id,2k,26,4y){if($(4y).4a(8.bT)){k}b 1h=$(id);b f=$.1i(1h[0],3A);b 4U=8.1l(f,"4U");if(4U){8.6u=!8.6u;if(8.6u){$(".l-18 4y").1J(8.ak);$(4y).1n(8.ak)}}f.4v=f.3Z=$("a",4y).2x();f.4u=f.4t=2k;f.4P=f.4h=26;if(8.6u){f.5w=f.5U=f.3y=19}1g{if(4U){f.5w=f.3Z;f.5U=f.4t;f.3y=f.4h}}8.ax(id,8.7I(f,f.3Z,f.4t,f.4h));if(8.6u){f.43=1M 21(f.4h,f.4t,f.3Z);8.5W(f)}1g{if(4U){f.4v=f.3Z=f.43.3f();f.4u=f.4t=f.43.3x();f.4P=f.4h=f.43.2N();f.43=19;if(f.4f){8.5W(f)}}}},c0:c(id){b 1h=$(id);b f=$.1i(1h[0],3A);if(8.1l(f,"c1")){k}8.6u=Z;f.5w=f.5U=f.3y=f.43=19;8.ax(1h,"")},ax:c(id,5c){b 1h=$(id);b f=$.1i(1h[0],3A);5c=(5c!=19?5c:8.7I(f));if(8.1l(f,"4U")&&5c){5c=(f.43?8.7I(f,f.43):5c)+8.1l(f,"9n")+5c}if(f.1p){f.1p.8s(5c)}8.eE(f);b 7a=8.1l(f,"7a");if(7a){7a.1t((f.1p?f.1p[0]:19),[5c,f])}1g{if(f.1p){f.1p.6M("6Q")}}if(f.4f){8.5W(f)}1g{if(!8.6u){8.76(19,8.1l(f,"1z"));8.8v=f.1p[0];if(2D(f.1p[0])!="6k"){f.1p[0].3q()}8.8v=19}}},eE:c(f){b 9r=8.1l(f,"9r");if(9r){b 8u=8.1l(f,"8u");b 1a=8.ap(f);5c=(dT(1a)?(!1a[0]&&!1a[1]?"":8.6l(8u,1a[0],8.5Q(f))+8.1l(f,"9n")+8.6l(8u,1a[1]||1a[0],8.5Q(f))):8.6l(8u,1a,8.5Q(f)));$(9r).1x(c(){$(8).8s(5c)})}},hr:c(1a){b 2n=1a.8k();k[(2n>0&&2n<6),""]},9k:c(1a){b 4C=1M 21(1a.2N(),1a.3x(),1a.3f(),(1a.hq()/-60));b 8t=1M 21(4C.2N(),1-1,4);b 4z=8t.8k()||7;8t.af(8t.3f()+1-4z);if(4z<4&&4C<8t){4C.af(4C.3f()-3);k $.18.9k(4C)}1g{if(4C>1M 21(4C.2N(),12-1,28)){4z=1M 21(4C.2N()+1,1-1,4).8k()||7;if(4z>4&&(4C.8k()||7)<4z-3){4C.af(4C.3f()+3);k $.18.9k(4C)}}}k 1f.9q(((4C-8t)/hp)/7)+1},7L:c(1a,f){k $.18.6l($.18.1l(f,"7L"),1a,$.18.5Q(f))},c9:c(3j,1H,1P){if(3j==19||1H==19){89"eC 1A"}1H=(2D 1H=="6k"?1H.dS():1H+"");if(1H==""){k 19}b 4Q=(1P?1P.4Q:19)||8.4B.4Q;b 4w=(1P?1P.4w:19)||8.4B.4w;b 4i=(1P?1P.4i:19)||8.4B.4i;b 5t=(1P?1P.5t:19)||8.4B.5t;b 41=(1P?1P.41:19)||8.4B.41;b 26=-1;b 2k=-1;b 2n=-1;b 4V=Z;b 4W=c(3i){b 4A=(2S+1<3j.1m&&3j.3z(2S+1)==3i);if(4A){2S++}k 4A};b 9o=c(3i){4W(3i);b cf=(3i=="@"?14:(3i=="y"?4:2));b 1r=cf;b aw=0;5y(1r>0&&5b<1H.1m&&1H.3z(5b)>="0"&&1H.3z(5b)<="9"){aw=aw*10+(1H.3z(5b++)-0);1r--}if(1r==cf){89"ho 8l at 17 "+5b}k aw};b ce=c(3i,aq,ar){b 9p=(4W(3i)?ar:aq);b 1r=0;1R(b j=0;j<9p.1m;j++){1r=1f.2d(1r,9p[j].1m)}b 3Y="";b eD=5b;5y(1r>0&&5b<1H.1m){3Y+=1H.3z(5b++);1R(b i=0;i<9p.1m;i++){if(3Y==9p[i]){k i+1}}1r--}89"hn 3Y at 17 "+eD};b av=c(){if(1H.3z(5b)!=3j.3z(2S)){89"hm 4V at 17 "+5b}5b++};b 5b=0;1R(b 2S=0;2S<3j.1m;2S++){if(4V){if(3j.3z(2S)=="\'"&&!4W("\'")){4V=Z}1g{av()}}1g{5r(3j.3z(2S)){1u"d":2n=9o("d");1D;1u"D":ce("D",4w,4i);1D;1u"m":2k=9o("m");1D;1u"M":2k=ce("M",5t,41);1D;1u"y":26=9o("y");1D;1u"@":b 1a=1M 21(9o("@"));26=1a.2N();2k=1a.3x()+1;2n=1a.3f();1D;1u"\'":if(4W("\'")){av()}1g{4V=1e}1D;5q:av()}}}if(26<2T){26+=1M 21().2N()-1M 21().2N()%2T+(26<=4Q?0:-2T)}b 1a=1M 21(26,2k-1,2n);if(1a.2N()!=26||1a.3x()+1!=2k||1a.3f()!=2n){89"eC 1a"}k 1a},hl:"7O-au-dd",hk:"D, dd M 7O",hj:"7O-au-dd",hi:"D, d M y",hh:"9j, dd-M-y",hg:"D, d M y",hf:"D, d M 7O",he:"D, d M 7O",hd:"D, d M y",hc:"@",hb:"7O-au-dd",6l:c(3j,1a,1P){if(!1a){k""}b 4w=(1P?1P.4w:19)||8.4B.4w;b 4i=(1P?1P.4i:19)||8.4B.4i;b 5t=(1P?1P.5t:19)||8.4B.5t;b 41=(1P?1P.41:19)||8.4B.41;b 4W=c(3i){b 4A=(2S+1<3j.1m&&3j.3z(2S+1)==3i);if(4A){2S++}k 4A};b cd=c(3i,1H){k(4W(3i)&&1H<10?"0":"")+1H};b cc=c(3i,1H,aq,ar){k(4W(3i)?ar[1H]:aq[1H])};b 5z="";b 4V=Z;if(1a){1R(b 2S=0;2S<3j.1m;2S++){if(4V){if(3j.3z(2S)=="\'"&&!4W("\'")){4V=Z}1g{5z+=3j.3z(2S)}}1g{5r(3j.3z(2S)){1u"d":5z+=cd("d",1a.3f());1D;1u"D":5z+=cc("D",1a.8k(),4w,4i);1D;1u"m":5z+=cd("m",1a.3x()+1);1D;1u"M":5z+=cc("M",1a.3x(),5t,41);1D;1u"y":5z+=(4W("y")?1a.2N():(1a.eB()%2T<10?"0":"")+1a.eB()%2T);1D;1u"@":5z+=1a.5u();1D;1u"\'":if(4W("\'")){5z+="\'"}1g{4V=1e}1D;5q:5z+=3j.3z(2S)}}}}k 5z},eA:c(3j){b 6t="";b 4V=Z;1R(b 2S=0;2S<3j.1m;2S++){if(4V){if(3j.3z(2S)=="\'"&&!4W("\'")){4V=Z}1g{6t+=3j.3z(2S)}}1g{5r(3j.3z(2S)){1u"d":1u"m":1u"y":1u"@":6t+="ha";1D;1u"D":1u"M":k 19;1u"\'":if(4W("\'")){6t+="\'"}1g{4V=1e}1D;5q:6t+=3j.3z(2S)}}}k 6t},1l:c(f,3Y){k f.1P[3Y]!==2p?f.1P[3Y]:8.4B[3Y]},cb:c(f){b 7H=8.1l(f,"7H");b 79=f.1p?f.1p.8s().7D(8.1l(f,"9n")):19;f.5w=f.5U=f.3y=19;b 1a=77=8.c6(f);if(79.1m>0){b 1P=8.5Q(f);if(79.1m>1){1a=8.c9(7H,79[1],1P)||77;f.5w=1a.3f();f.5U=1a.3x();f.3y=1a.2N()}ca{1a=8.c9(7H,79[0],1P)||77}c8(e){8.c7(e);1a=77}}f.4v=1a.3f();f.2r=f.4u=1a.3x();f.2A=f.4P=1a.2N();f.3Z=(79[0]?1a.3f():0);f.4t=(79[0]?1a.3x():0);f.4h=(79[0]?1a.2N():0);8.ah(f)},c6:c(f){b 1a=8.9c(8.1l(f,"77"),1M 21());b 2F=8.6m(f,"2q",1e);b 2R=8.6m(f,"2d");1a=(2F&&1a<2F?2F:1a);1a=(2R&&1a>2R?2R:1a);k 1a},9c:c(1a,77){b ey=c(v){b 1a=1M 21();1a.ef(1a.ee()+v);k 1a};b ez=c(v,c5){b 1a=1M 21();b 26=1a.2N();b 2k=1a.3x();b 2n=1a.3f();b c4=/([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;b 4A=c4.78(v);5y(4A){5r(4A[2]||"d"){1u"d":1u"D":2n+=(4A[1]-0);1D;1u"w":1u"W":2n+=(4A[1]*7);1D;1u"m":1u"M":2k+=(4A[1]-0);2n=1f.2q(2n,c5(26,2k));1D;1u"y":1u"Y":26+=(4A[1]-0);2n=1f.2q(2n,c5(26,2k));1D}4A=c4.78(v)}k 1M 21(26,2k,2n)};k(1a==19?77:(2D 1a=="56"?ez(1a,8.9b):(2D 1a=="8l"?ey(1a):1a)))},c3:c(f,1a,5v){b 4j=!(1a);1a=8.9c(1a,1M 21());f.4v=f.3Z=1a.3f();f.2r=f.4u=f.4t=1a.3x();f.2A=f.4P=f.4h=1a.2N();if(8.1l(f,"4U")){if(5v){5v=8.9c(5v,19);f.5w=5v.3f();f.5U=5v.3x();f.3y=5v.2N()}1g{f.5w=f.3Z;f.5U=f.4t;f.3y=f.4h}}8.ah(f);if(f.1p){f.1p.8s(4j?"":8.7I(f)+(!8.1l(f,"4U")?"":8.1l(f,"9n")+8.7I(f,f.5w,f.5U,f.3y)))}},ap:c(f){b c2=(!f.4h||(f.1p&&f.1p.8s()=="")?19:1M 21(f.4h,f.4t,f.3Z));if(8.1l(f,"4U")){k[f.43||c2,(!f.3y?19:1M 21(f.3y,f.5U,f.5w))]}1g{k c2}},ex:c(f){b 6q=1M 21();6q=1M 21(6q.2N(),6q.3x(),6q.3f());b 44=8.1l(f,"44");b 4S=8.1l(f,"4S");b 4j=(8.1l(f,"c1")?"":\'<1w 2u="l-18-4j"><a 6o="1v.18.c0(\\\'#\'+f.id+"\');\\""+(44?8.6n(f,8.1l(f,"ew")||"&#4x;"):"")+">"+8.1l(f,"ev")+"</a></1w>");b bR=\'<1w 2u="l-18-h9">\'+(4S?"":4j)+\'<1w 2u="l-18-5M"><a 6o="1v.18.76();"\'+(44?8.6n(f,8.1l(f,"eu")||"&#4x;"):"")+">"+8.1l(f,"et")+"</a></1w>"+(4S?4j:"")+"</1w>";b 8q=8.1l(f,"8q");b 9e=8.1l(f,"9e");b 9l=8.1l(f,"9l");b 8r=8.1l(f,"8r");b 3M=8.8j(f);b 6s=8.1l(f,"6s");b ei=(3M[0]!=1||3M[1]!=1);b al=(!f.3Z?1M 21(h8,9,9):1M 21(f.4h,f.4t,f.3Z));b 2F=8.6m(f,"2q",1e);b 2R=8.6m(f,"2d");b 2r=f.2r;b 2A=f.2A;if(2R){b 9m=1M 21(2R.2N(),2R.3x()-3M[1]+1,2R.3f());9m=(2F&&9m<2F?2F:9m);5y(1M 21(2A,2r,1)>9m){2r--;if(2r<0){2r=11;2A--}}}b 74=8.1l(f,"74");74=(!8r?74:8.6l(74,1M 21(2A,2r-6s,1),8.5Q(f)));b 5V=\'<1w 2u="l-18-5V">\'+(8.bI(f,-1,2A,2r)?"<a 6o=\\"1v.18.5x(\'#"+f.id+"\', -"+6s+", \'M\');\\""+(44?8.6n(f,8.1l(f,"es")||"&#4x;"):"")+">"+74+"</a>":(9l?"":"<6J>"+74+"</6J>"))+"</1w>";b 73=8.1l(f,"73");73=(!8r?73:8.6l(73,1M 21(2A,2r+6s,1),8.5Q(f)));b 4g=\'<1w 2u="l-18-4g">\'+(8.bI(f,+1,2A,2r)?"<a 6o=\\"1v.18.5x(\'#"+f.id+"\', +"+6s+", \'M\');\\""+(44?8.6n(f,8.1l(f,"er")||"&#4x;"):"")+">"+73+"</a>":(9l?"":"<6J>"+73+"</6J>"))+"</1w>";b 7N=8.1l(f,"7N");7N=(!8r?7N:8.6l(7N,6q,8.5Q(f)));b 2x=(8q?\'<1w 2u="\'+8.bZ+\'">\'+8q+"</1w>":"")+(9e&&!f.4f?bR:"")+\'<1w 2u="l-18-h7">\'+(4S?4g:5V)+(8.bH(f,(8.1l(f,"bY")&&f.3Z?al:6q))?\'<1w 2u="l-18-4T"><a 6o="1v.18.bX(\\\'#\'+f.id+"\');\\""+(44?8.6n(f,8.1l(f,"ep")||"&#4x;"):"")+">"+7N+"</a></1w>":"")+(4S?5V:4g)+"</1w>";b 4z=8.1l(f,"4z");b 9i=8.1l(f,"9i");b 4i=8.1l(f,"4i");b 4w=8.1l(f,"4w");b an=8.1l(f,"an");b 41=8.1l(f,"41");b 9g=8.1l(f,"9g");b 8n=8.1l(f,"8n");b 71=8.1l(f,"71");b 9h=8.1l(f,"9h");b am=8.1l(f,"am")||8.9k;b 5S=(44?8.1l(f,"ao")||"&#4x;":"");b 7L=8.1l(f,"eo")||8.7L;b 5v=f.5w?1M 21(f.3y,f.5U,f.5w):al;1R(b 7M=0;7M<3M[0];7M++){1R(b 8p=0;8p<3M[1];8p++){b 8m=1M 21(2A,2r,f.4v);2x+=\'<1w 2u="l-18-h6-2k\'+(8p==0?" l-18-1M-7M":"")+\'">\'+8.e9(f,2r,2A,2F,2R,8m,7M>0||8p>0,44,41)+\'<eb 2u="l-18" h5="0" h4="0"><ej><aj 2u="l-18-59-7M">\'+(9h?"<4y>"+8.1l(f,"en")+"</4y>":"");1R(b 6r=0;6r<7;6r++){b 2n=(6r+4z)%7;b ao=(5S.88("9j")>-1?5S.5J(/9j/,4i[2n]):5S.5J(/D/,4w[2n]));2x+="<4y"+((6r+4z+6)%7>=5?\' 2u="l-18-72-4R-7K"\':"")+">"+(!9i?"<4p":"<a 6o=\\"1v.18.ek(\'#"+f.id+"\', "+2n+\');"\')+(44?8.6n(f,ao):"")+\' 59="\'+4i[2n]+\'">\'+an[2n]+(9i?"</a>":"</4p>")+"</4y>"}2x+="</aj></ej><ed>";b bV=8.9b(2A,2r);if(2A==f.4P&&2r==f.4u){f.4v=1f.2q(f.4v,bV)}b bW=(8.dW(2A,2r)-4z+7)%7;b 4e=1M 21(2A,2r,1-bW);b eg=(ei?6:1f.eh((bW+bV)/7));1R(b bU=0;bU<eg;bU++){2x+=\'<aj 2u="l-18-8o-7M">\'+(9h?\'<4y 2u="l-18-72-8p">\'+am(4e)+"</4y>":"");1R(b 6r=0;6r<7;6r++){b 9f=(9g?9g.1t((f.1p?f.1p[0]:19),[4e]):[1e,""]);b 6p=(4e.3x()!=2r);b 5T=6p||!9f[0]||(2F&&4e<2F)||(2R&&4e>2R);2x+=\'<4y 2u="l-18-8o-7K\'+((6r+4z+6)%7>=5?" l-18-72-4R-7K":"")+(6p?" l-18-6p":"")+(4e.5u()==8m.5u()&&2r==f.4u?" l-18-8o-7K-3r":"")+(5T?" "+8.bT:"")+(6p&&!71?"":" "+9f[1]+(4e.5u()>=al.5u()&&4e.5u()<=5v.5u()?" "+8.ak:"")+(4e.5u()==6q.5u()?" l-18-6q":""))+\'"\'+((!6p||71)&&9f[2]?\' 59="\'+9f[2]+\'"\':"")+(5T?(8n?" bL=\\"1v(8).1o().1n(\'l-18-72-3r\');\\" bK=\\"1v(8).1o().1J(\'l-18-72-3r\');\\"":""):" bL=\\"1v(8).1n(\'l-18-8o-7K-3r\')"+(8n?".1o().1n(\'l-18-72-3r\')":"")+";"+(!44||(6p&&!71)?"":"1v(\'#l-18-5S-"+f.id+"\').2x(\'"+(7L.1t((f.1p?f.1p[0]:19),[4e,f])||"&#4x;")+"\');")+"\\" bK=\\"1v(8).1J(\'l-18-8o-7K-3r\')"+(8n?".1o().1J(\'l-18-72-3r\')":"")+";"+(!44||(6p&&!71)?"":"1v(\'#l-18-5S-"+f.id+"\').2x(\'&#4x;\');")+\'" 6o="1v.18.bS(\\\'#\'+f.id+"\',"+2r+","+2A+\', 8);"\')+">"+(6p?(71?4e.3f():"&#4x;"):(5T?4e.3f():"<a>"+4e.3f()+"</a>"))+"</4y>";4e.ef(4e.ee()+1)}2x+="</aj>"}2r++;if(2r>11){2r=0;2A++}2x+="</ed></eb></1w>"}}2x+=(44?\'<1w 2Q="4j: 5p;"></1w><1w id="l-18-5S-\'+f.id+\'" 2u="l-18-5S">\'+(8.1l(f,"ea")||"&#4x;")+"</1w>":"")+(!9e&&!f.4f?bR:"")+\'<1w 2Q="4j: 5p;"></1w>\'+($.22.3v&&1b($.22.6V)<7&&!f.4f?\'<9d bQ="dD:Z;" 2u="l-18-bP"></9d>\':"");k 2x},e9:c(f,2r,2A,2F,2R,8m,bO,44,41){2F=(f.43&&2F&&8m<2F?8m:2F);b 2x=\'<1w 2u="l-18-7J">\';if(bO||!8.1l(f,"e8")){2x+=41[2r]+"&#4x;"}1g{b e6=(2F&&2F.2N()==2A);b e5=(2R&&2R.2N()==2A);2x+=\'<4o 2u="l-18-1M-2k" e2="1v.18.bN(\\\'#\'+f.id+"\', 8, \'M\');\\" 6o=\\"1v.18.bM(\'#"+f.id+"\');\\""+(44?8.6n(f,8.1l(f,"e7")||"&#4x;"):"")+">";1R(b 2k=0;2k<12;2k++){if((!e6||2k>=2F.3x())&&(!e5||2k<=2R.3x())){2x+=\'<ai 1H="\'+2k+\'"\'+(2k==2r?\' 1L="1L"\':"")+">"+41[2k]+"</ai>"}}2x+="</4o>"}if(bO||!8.1l(f,"e4")){2x+=2A}1g{b 70=8.1l(f,"e3").7D(":");b 26=0;b 3y=0;if(70.1m!=2){26=2A-10;3y=2A+10}1g{if(70[0].3z(0)=="+"||70[0].3z(0)=="-"){26=3y=1M 21().2N();26+=1b(70[0],10);3y+=1b(70[1],10)}1g{26=1b(70[0],10);3y=1b(70[1],10)}}26=(2F?1f.2d(26,2F.2N()):26);3y=(2R?1f.2q(3y,2R.2N()):3y);2x+=\'<4o 2u="l-18-1M-26" e2="1v.18.bN(\\\'#\'+f.id+"\', 8, \'Y\');\\" 6o=\\"1v.18.bM(\'#"+f.id+"\');\\""+(44?8.6n(f,8.1l(f,"e1")||"&#4x;"):"")+">";1R(;26<=3y;26++){2x+=\'<ai 1H="\'+26+\'"\'+(26==2A?\' 1L="1L"\':"")+">"+26+"</ai>"}2x+="</4o>"}2x+="</1w>";k 2x},6n:c(f,96){k" bL=\\"1v(\'#l-18-5S-"+f.id+"\').2x(\'"+96+"\');\\" bK=\\"1v(\'#l-18-5S-"+f.id+"\').2x(\'&#4x;\');\\""},ah:c(f,v,5R){b 26=f.2A+(5R=="Y"?v:0);b 2k=f.2r+(5R=="M"?v:0);b 2n=1f.2q(f.4v,8.9b(26,2k))+(5R=="D"?v:0);b 1a=1M 21(26,2k,2n);b 2F=8.6m(f,"2q",1e);b 2R=8.6m(f,"2d");1a=(2F&&1a<2F?2F:1a);1a=(2R&&1a>2R?2R:1a);f.4v=1a.3f();f.2r=f.4u=1a.3x();f.2A=f.4P=1a.2N();if(5R=="M"||5R=="Y"){8.ag(f)}},ag:c(f){b bJ=8.1l(f,"e0");if(bJ){bJ.1t((f.1p?f.1p[0]:19),[1M 21(f.4P,f.4u,1),f])}},8j:c(f){b 3M=8.1l(f,"dZ");k(3M==19?[1,1]:(2D 3M=="8l"?[1,3M]:3M))},6m:c(f,dY,dX){b 1a=8.9c(8.1l(f,dY+"21"),19);if(1a){1a.h3(0);1a.h2(0);1a.h1(0);1a.h0(0)}k(!dX||!f.43?1a:(!1a||f.43>1a?f.43:1a))},9b:c(26,2k){k 32-1M 21(26,2k,32).3f()},dW:c(26,2k){k 1M 21(26,2k,1).8k()},bI:c(f,v,dV,dU){b 3M=8.8j(f);b 1a=1M 21(dV,dU+(v<0?v:3M[1]),1);if(v<0){1a.af(8.9b(1a.2N(),1a.3x()))}k 8.bH(f,1a)},bH:c(f,1a){b 8i=(!f.43?19:1M 21(f.4P,f.4u,f.4v));8i=(8i&&f.43<8i?f.43:8i);b 2F=8i||8.6m(f,"2q");b 2R=8.6m(f,"2d");k((!2F||1a>=2F)&&(!2R||1a<=2R))},5Q:c(f){b 4Q=8.1l(f,"4Q");4Q=(2D 4Q!="56"?4Q:1M 21().2N()%2T+1b(4Q,10));k{4Q:4Q,4w:8.1l(f,"4w"),4i:8.1l(f,"4i"),5t:8.1l(f,"5t"),41:8.1l(f,"41")}},7I:c(f,2n,2k,26){if(!2n){f.3Z=f.4v;f.4t=f.4u;f.4h=f.4P}b 1a=(2n?(2D 2n=="6k"?2n:1M 21(26,2k,2n)):1M 21(f.4h,f.4t,f.3Z));k 8.6l(8.1l(f,"7H"),1a,8.5Q(f))}});c 9a(1h,8h){$.1Q(1h,8h);1R(b 3Y in 8h){if(8h[3Y]==19||8h[3Y]==2p){1h[3Y]=8h[3Y]}}k 1h}c dT(a){k(a&&(($.22.9Z&&2D a=="6k"&&a.1m)||(a.3S&&a.3S.dS().3i(/\\8a\\(\\)/))))}$.fn.18=c(h){b bG=8a.53.dR.23(1A,1);if(2D h=="56"&&(h=="gZ"||h=="3f")){k $.18["8Y"+h+"99"].1t($.18,[8[0]].5k(bG))}k 8.1x(c(){2D h=="56"?$.18["8Y"+h+"99"].1t($.18,[8].5k(bG)):$.18.dQ(8,h)})};$.18=1M 99();$(1d).gY(c(){$(1d.1K).5s($.18.2v).7A($.18.dP)})})(1v);(c(B){b A={bF:"2j.24",3F:"3F.24",bE:"2y.24",6Y:"6Y.1k",5O:"5O.1k",6Z:"6Z.1k",5N:"5N.1k",bD:"2j.1k",2i:"3F.1k",bC:"2y.1k"};B.4b("l.1X",{5l:c(){b J=8,K=8.h,D=2D K.1k=="56"?K.1k:"n,e,s,w,3X,3W,4d,3V",E=8.r.1n("l-1X-7F").8c("<1w/>").8c("<1w/>"),G=(8.dN=E.1o().1n("l-1X-gX").q({17:"2b",u:"2T%",t:"2T%"})),H=K.59||E.2L("59")||"",C=(8.97=B(\'<1w 2u="l-1X-8f"/>\')).5s(\'<4p 2u="l-1X-59">\'+H+"</4p>").5s(\'<a 3P="#" 2u="l-1X-8f-5M"><4p>X</4p></a>\').gW(G),I=(8.3G=G.1o()).2K(1d.1K).1C().1n("l-1X").1n(K.gV).1n(E.2L("8g")).1J("l-1X-7F").q({17:"1W",u:K.u,t:K.t,2X:"3H",2C:K.2C}).2L("gU",-1).q("dC",0).6f(c(L){if(K.dI){b M=27;(L.6U&&L.6U==M&&J.5M())}}).7A(c(){J.ad()}),F=(8.dK=B("<1w/>")).1n("l-1X-gT").q({17:"1W",3h:0}).2K(I);8.dM=B(".l-1X-8f-5M",C).ae(c(){B(8).1n("l-1X-8f-5M-ae")},c(){B(8).1J("l-1X-8f-5M-ae")}).7A(c(L){L.dO()}).1F(c(){J.5M();k Z});8.97.4J("*").1T(8.97).1x(c(){B.l.7G(8)});if(B.fn.24){I.24({6j:".l-1X-7F",1c:K.gS,1G:".l-1X-8f",2j:c(M,L){J.ad();(K.bF&&K.bF.1t(J.r[0],1A))},3F:c(M,L){(K.3F&&K.3F.1t(J.r[0],1A))},2y:c(M,L){(K.bE&&K.bE.1t(J.r[0],1A));B.l.1X.2E.2i()}});(K.24||I.24("6N"))}if(B.fn.1k){I.1k({6j:".l-1X-7F",1c:K.gR,6Z:K.6Z,6Y:K.6Y,5N:K.5N,5O:K.5O,2j:c(){(K.bD&&K.bD.1t(J.r[0],1A))},2i:c(M,L){(K.ab&&J.1r.1t(J));(K.2i&&K.2i.1t(J.r[0],1A))},3d:D,2y:c(M,L){(K.ab&&J.1r.1t(J));(K.bC&&K.bC.1t(J.r[0],1A));B.l.1X.2E.2i()}});(K.1k||I.1k("6N"))}8.bA(K.by);8.ac=Z;(K.7C&&B.fn.7C&&I.7C());(K.dJ&&8.bB())},5a:c(C,D){(A[C]&&8.3G.1i(A[C],D));5r(C){1u"by":8.bA(D);1D;1u"24":8.3G.24(D?"87":"6N");1D;1u"t":8.3G.t(D);1D;1u"17":8.17(D);1D;1u"1k":(2D D=="56"&&8.3G.1i("3d.1k",D));8.3G.1k(D?"87":"6N");1D;1u"59":B(".l-1X-59",8.97).96(D);1D;1u"u":8.3G.u(D);1D}B.4b.53.5a.1t(8,1A)},17:c(H){b D=B(3a),E=B(1d),F=E.2f(),C=E.2e(),G=F;if(B.7t(H,["7E","p","3e","3h","o"])>=0){H=[H=="3e"||H=="o"?H:"7E",H=="p"||H=="3h"?H:"98"]}if(H.3S!=8a){H=["7E","98"]}if(H[0].3S==7w){C+=H[0]}1g{5r(H[0]){1u"o":C+=0;1D;1u"3e":C+=D.u()-8.3G.u();1D;5q:1u"7E":C+=(D.u()-8.3G.u())/2}}if(H[1].3S==7w){F+=H[1]}1g{5r(H[1]){1u"p":F+=0;1D;1u"3h":F+=D.t()-8.3G.t();1D;5q:1u"98":F+=(D.t()-8.3G.t())/2}}F=1f.2d(F,G);8.3G.q({p:F,o:C})},1r:c(){b D=8.dN,G=8.97,E=8.r,F=1b(E.q("3U-p"),10)+1b(E.q("3U-3h"),10),C=1b(E.q("3U-o"),10)+1b(E.q("3U-3e"),10);E.t(D.t()-G.2M()-F);E.u(D.u()-C)},bB:c(){if(8.ac){k}8.2E=8.h.a9?1M B.l.1X.2E(8):19;(8.3G.4g().1m>0)&&8.3G.2K("1K");8.17(8.h.17);8.3G.1y(8.h.1y);8.h.ab&&8.1r();8.ad(1e);b C=19;b D={h:8.h};8.dM.3q();8.r.2m("gQ",[C,D],8.h.bB);8.ac=1e},ad:c(E){if((8.h.a9&&!E)||(!8.h.6X&&!8.h.a9)){k 8.r.2m("dL",[19,{h:8.h}],8.h.3q)}b D=8.h.2C,C=8.h;B(".l-1X:57").1x(c(){D=1f.2d(D,1b(B(8).q("z-3D"),10)||C.2C)});(8.2E&&8.2E.$el.q("z-3D",++D));8.3G.q("z-3D",++D);8.r.2m("dL",[19,{h:8.h}],8.h.3q)},5M:c(){(8.2E&&8.2E.3t());8.3G.1C(8.h.1C);b D=19;b C={h:8.h};8.r.2m("gP",[D,C],8.h.5M);B.l.1X.2E.2i();8.ac=Z},3t:c(){(8.2E&&8.2E.3t());8.3G.1C();8.r.3o(".1X").49("1X").1J("l-1X-7F").1C().2K("1K");8.3G.1Z()},bA:c(F){b E=8,C=Z,D=8.dK;D.bz().1C();B.1x(F,c(){k!(C=1e)});if(C){D.1y();B.1x(F,c(G,H){B("<5P/>").96(G).1F(c(){H.1t(E.r[0],1A)}).2K(D)})}}});B.1Q(B.l.1X,{4I:{dJ:1e,ab:1e,7C:Z,by:{},dI:1e,24:1e,t:dH,5O:2T,5N:aa,a9:Z,2E:{},17:"7E",1k:1e,6X:1e,u:dG,2C:95},2E:c(C){8.$el=B.l.1X.2E.dF(C)}});B.1Q(B.l.1X.2E,{7B:[],dE:B.6d("3q,7A,bx,6f,bw,1F".7D(","),c(C){k C+".1X-2E"}).7r(" "),dF:c(D){if(8.7B.1m===0){7s(c(){B("a, :1p").2V(B.l.1X.2E.dE,c(){b F=Z;b H=B(8).58(".l-1X");if(H.1m){b E=B(".l-1X-2E");if(E.1m){b G=1b(E.q("z-3D"),10);E.1x(c(){G=1f.2d(G,1b(B(8).q("z-3D"),10))});F=1b(H.q("z-3D"),10)>G}1g{F=1e}}k F})},1);B(1d).2V("6f.1X-2E",c(E){b F=27;(E.6U&&E.6U==F&&D.5M())});B(3a).2V("2i.1X-2E",B.l.1X.2E.2i)}b C=B("<1w/>").2K(1d.1K).1n("l-1X-2E").q(B.1Q({gO:0,3U:0,bv:0,17:"1W",p:0,o:0,u:8.u(),t:8.t()},D.h.2E));(D.h.7C&&B.fn.7C&&C.7C());8.7B.4K(C);k C},3t:c(C){8.7B.bm(B.7t(8.7B,C),1);if(8.7B.1m===0){B("a, :1p").1T([1d,3a]).3o(".1X-2E")}C.1Z()},t:c(){if(B.22.3v&&B.22.6V<7){b D=1f.2d(1d.4c.6W,1d.1K.6W);b C=1f.2d(1d.4c.4O,1d.1K.4O);if(D<C){k B(3a).t()+"2U"}1g{k D+"2U"}}1g{k B(1d).t()+"2U"}},u:c(){if(B.22.3v&&B.22.6V<7){b C=1f.2d(1d.4c.94,1d.1K.94);b D=1f.2d(1d.4c.4N,1d.1K.4N);if(C<D){k B(3a).u()+"2U"}1g{k C+"2U"}}1g{k B(1d).u()+"2U"}},2i:c(){b C=B([]);B.1x(B.l.1X.2E.7B,c(){C=C.1T(8)});C.q({u:0,t:0}).q({u:B.l.1X.2E.u(),t:B.l.1X.2E.t()})}});B.1Q(B.l.1X.2E.53,{3t:c(){B.l.1X.2E.3t(8.$el)}})})(1v);(c(A){A.fn.bt=A.fn.bt||c(B){k 8.1x(c(){A(8).58(B).eq(0).bu(8).1Z()})};A.4b("l.4r",{6i:{},l:c(B){k{h:8.h,1G:8.2h,1H:8.h.2B!="5p"||!8.h.2B?1f.3E(8.1H(19,8.h.2B=="3K"?"y":"x")):{x:1f.3E(8.1H(19,"x")),y:1f.3E(8.1H(19,"y"))},a7:8.dz()}},2a:c(C,B){A.l.2z.23(8,C,[B,8.l()]);8.r.2m(C=="6e"?C:"6e"+C,[B,8.l()],8.h[C])},3t:c(){8.r.1J("l-4r l-4r-1I").49("4r").3o(".4r");if(8.1G&&8.1G.1m){8.1G.bt("a");8.1G.1x(c(){A(8).1i("4s").8e()})}8.bs&&8.bs.1Z()},5a:c(B,C){A.4b.53.5a.1t(8,1A);if(/2q|2d|7z/.1B(B)){8.bp()}if(B=="a7"){C?8.1G.1m==2&&8.bo():8.dA()}},5l:c(){b B=8;8.r.1n("l-4r");8.bp();8.1G=A(8.h.1G,8.r);if(!8.1G.1m){B.1G=B.bs=A(B.h.3d||[0]).6d(c(){b D=A("<1w/>").1n("l-4r-1G").2K(B.r);if(8.id){D.2L("id",8.id)}k D[0]})}b C=c(D){8.r=A(D);8.r.1i("4s",8);8.h=B.h;8.r.2V("7A",c(){if(B.2h){8.6P(B.2h)}B.3q(8,1)});8.8d()};A.1Q(C.53,A.l.4s,{6h:c(D){k B.2j.23(B,D,8.r[0])},6g:c(D){k B.2y.23(B,D,8.r[0])},5o:c(D){k B.3F.23(B,D,8.r[0])},93:c(){k 1e},6M:c(D){8.br(D)}});A(8.1G).1x(c(){1M C(8)}).8c(\'<a 3P="dD:gN(0)" 2Q="dC:5n;a8:5n;"></a>\').1o().2V("3q",c(D){B.3q(8.bq)}).2V("6P",c(D){B.6P(8.bq)}).2V("6f",c(D){if(!B.h.gM){B.6f(D.6U,8.bq)}});8.r.2V("7A.4r",c(D){B.1F.1t(B,[D]);B.2h.1i("4s").6M(D);B.a6=B.a6+1});A.1x(8.h.3d||[],c(D,E){B.91(E.2j,D,1e)});if(!5L(8.h.dB)){8.91(8.h.dB,0,1e)}8.6R=A(8.1G[0]);if(8.1G.1m==2&&8.h.a7){8.bo()}},bp:c(){b B=8.r[0],C=8.h;8.6S={u:8.r.2Y(),t:8.r.2M()};A.1Q(C,{2B:C.2B||(B.4N<B.4O?"3K":"a5"),2d:!5L(1b(C.2d,10))?{x:1b(C.2d,10),y:1b(C.2d,10)}:({x:C.2d&&C.2d.x||2T,y:C.2d&&C.2d.y||2T}),2q:!5L(1b(C.2q,10))?{x:1b(C.2q,10),y:1b(C.2q,10)}:({x:C.2q&&C.2q.x||0,y:C.2q&&C.2q.y||0})});C.6T={x:C.2d.x-C.2q.x,y:C.2d.y-C.2q.y};C.3w={x:C.3w&&C.3w.x||1b(C.3w,10)||(C.7z?C.6T.x/(C.7z.x||1b(C.7z,10)||C.6T.x):0),y:C.3w&&C.3w.y||1b(C.3w,10)||(C.7z?C.6T.y/(C.7z.y||1b(C.7z,10)||C.6T.y):0)}},6f:c(C,B){if(/(37|38|39|40)/.1B(C)){8.91({x:/(37|39)/.1B(C)?(C==37?"-":"+")+"="+8.92("x"):0,y:/(38|40)/.1B(C)?(C==38?"-":"+")+"="+8.92("y"):0},B)}},3q:c(B,C){8.2h=A(B).1n("l-4r-1G-3L");if(C){8.2h.1o()[0].3q()}},6P:c(B){A(B).1J("l-4r-1G-3L");if(8.2h&&8.2h[0]==B){8.6R=8.2h;8.2h=19}},1F:c(C){b D=[C.3b,C.3c];b B=Z;8.1G.1x(c(){if(8==C.1h){B=1e}});if(B||8.h.1I||!(8.2h||8.6R)){k}if(!8.2h&&8.6R){8.3q(8.6R,1e)}8.v=8.r.v();8.91({y:8.5K(C.3c-8.v.p-8.2h[0].4O/2,"y"),x:8.5K(C.3b-8.v.o-8.2h[0].4N/2,"x")},19,!8.h.4L)},bo:c(){if(8.5m){k}8.5m=A("<1w></1w>").1n("l-4r-a7").q({17:"1W"}).2K(8.r);8.a4()},dA:c(){8.5m.1Z();8.5m=19},a4:c(){b C=8.h.2B=="3K"?"p":"o";b B=8.h.2B=="3K"?"t":"u";8.5m.q(C,(1b(A(8.1G[0]).q(C),10)||0)+8.7y(0,8.h.2B=="3K"?"y":"x")/2);8.5m.q(B,(1b(A(8.1G[1]).q(C),10)||0)-(1b(A(8.1G[0]).q(C),10)||0))},dz:c(){k 8.5m?8.5K(1b(8.5m.q(8.h.2B=="3K"?"t":"u"),10),8.h.2B=="3K"?"y":"x"):19},dy:c(){k 8.1G.3D(8.2h[0])},1H:c(D,B){if(8.1G.1m==1){8.2h=8.1G}if(!B){B=8.h.2B=="3K"?"y":"x"}b C=A(D!=2p&&D!==19?8.1G[D]||D:8.2h);if(C.1i("4s").a3){k 1b(C.1i("4s").a3[B],10)}1g{k 1b(((1b(C.q(B=="x"?"o":"p"),10)/(8.6S[B=="x"?"u":"t"]-8.7y(D,B)))*8.h.6T[B])+8.h.2q[B],10)}},5K:c(C,B){k 8.h.2q[B]+(C/(8.6S[B=="x"?"u":"t"]-8.7y(19,B)))*8.h.6T[B]},4M:c(C,B){k((C-8.h.2q[B])/8.h.6T[B])*(8.6S[B=="x"?"u":"t"]-8.7y(19,B))},8Z:c(D,B){if(8.5m){if(8.2h[0]==8.1G[0]&&D>=8.4M(8.1H(1),B)){D=8.4M(8.1H(1,B)-8.92(B),B)}if(8.2h[0]==8.1G[1]&&D<=8.4M(8.1H(0),B)){D=8.4M(8.1H(0,B)+8.92(B),B)}}if(8.h.3d){b C=8.h.3d[8.dy()];if(D<8.4M(C.2q,B)){D=8.4M(C.2q,B)}1g{if(D>8.4M(C.2d,B)){D=8.4M(C.2d,B)}}}k D},90:c(C,B){if(C>=8.6S[B=="x"?"u":"t"]-8.7y(19,B)){C=8.6S[B=="x"?"u":"t"]-8.7y(19,B)}if(C<=0){C=0}k C},7y:c(C,B){k A(C!=2p&&C!==19?8.1G[C]:8.2h)[0]["v"+(B=="x"?"gL":"gK")]},92:c(B){k 8.h.3w[B]||1},2j:c(C,B){b D=8.h;if(D.1I){k Z}8.6S={u:8.r.2Y(),t:8.r.2M()};if(!8.2h){8.3q(8.6R,1e)}8.v=8.r.v();8.bn=8.2h.v();8.7x={p:C.3c-8.bn.p,o:C.3b-8.bn.o};8.a6=8.1H();8.2a("2j",C);8.3F(C,B);k 1e},2y:c(B){8.2a("2y",B);if(8.a6!=8.1H()){8.2a("6Q",B)}8.3q(8.2h,1e);k Z},3F:c(E,D){b F=8.h;b B={p:E.3c-8.v.p-8.7x.p,o:E.3b-8.v.o-8.7x.o};if(!8.2h){8.3q(8.6R,1e)}B.o=8.90(B.o,"x");B.p=8.90(B.p,"y");if(F.3w.x){b C=8.5K(B.o,"x");C=1f.3E(C/F.3w.x)*F.3w.x;B.o=8.4M(C,"x")}if(F.3w.y){b C=8.5K(B.p,"y");C=1f.3E(C/F.3w.y)*F.3w.y;B.p=8.4M(C,"y")}B.o=8.8Z(B.o,"x");B.p=8.8Z(B.p,"y");if(F.2B!="3K"){8.2h.q({o:B.o})}if(F.2B!="a5"){8.2h.q({p:B.p})}8.2h.1i("4s").a3={x:1f.3E(8.5K(B.o,"x"))||0,y:1f.3E(8.5K(B.p,"y"))||0};if(8.5m){8.a4()}8.2a("6e",E);k Z},91:c(F,E,G){b H=8.h;8.6S={u:8.r.2Y(),t:8.r.2M()};if(E==2p&&!8.2h&&8.1G.1m!=1){k Z}if(E==2p&&!8.2h){E=0}if(E!=2p){8.2h=8.6R=A(8.1G[E]||E)}if(F.x!==2p&&F.y!==2p){b B=F.x,I=F.y}1g{b B=F,I=F}if(B!==2p&&B.3S!=7w){b D=/^\\-\\=/.1B(B),C=/^\\+\\=/.1B(B);if(D||C){B=8.1H(19,"x")+1b(B.5J(D?"=":"+=",""),10)}1g{B=5L(1b(B,10))?2p:1b(B,10)}}if(I!==2p&&I.3S!=7w){b D=/^\\-\\=/.1B(I),C=/^\\+\\=/.1B(I);if(D||C){I=8.1H(19,"y")+1b(I.5J(D?"=":"+=",""),10)}1g{I=5L(1b(I,10))?2p:1b(I,10)}}if(H.2B!="3K"&&B!==2p){if(H.3w.x){B=1f.3E(B/H.3w.x)*H.3w.x}B=8.4M(B,"x");B=8.90(B,"x");B=8.8Z(B,"x");H.1E?8.2h.2y().1E({o:B},(1f.3T(1b(8.2h.q("o"))-B))*(!5L(1b(H.1E))?H.1E:5)):8.2h.q({o:B})}if(H.2B!="a5"&&I!==2p){if(H.3w.y){I=1f.3E(I/H.3w.y)*H.3w.y}I=8.4M(I,"y");I=8.90(I,"y");I=8.8Z(I,"y");H.1E?8.2h.2y().1E({p:I},(1f.3T(1b(8.2h.q("p"))-I))*(!5L(1b(H.1E))?H.1E:5)):8.2h.q({p:I})}if(8.5m){8.a4()}8.2h.1i("4s").a3={x:1f.3E(8.5K(B,"x"))||0,y:1f.3E(8.5K(I,"y"))||0};if(!G){8.2a("2j",19);8.2a("2y",19);8.2a("6Q",19);8.2a("6e",19)}}});A.l.4r.9U="1H";A.l.4r.4I={1G:".l-4r-1G",4L:1,1E:Z}})(1v);(c(A){A.4b("l.1q",{5l:c(){8.h.3C+=".1q";8.8W(1e)},5a:c(B,C){if((/^1L/).1B(B)){8.4o(C)}1g{8.h[B]=C;8.8W()}},1m:c(){k 8.$1q.1m},bl:c(B){k B.59&&B.59.5J(/\\s/g,"8Y").5J(/[^A-gJ-gI-9\\-8Y:\\.]/g,"")||8.h.dl+A.1i(B)},l:c(C,B){k{h:8.h,gH:C,dj:B,3D:8.$1q.3D(C)}},8W:c(O){8.$3Q=A("li:gG(a[3P])",8.r);8.$1q=8.$3Q.6d(c(){k A("a",8)[0]});8.$3g=A([]);b P=8,D=8.h;8.$1q.1x(c(R,Q){if(Q.6c&&Q.6c.5J("#","")){P.$3g=P.$3g.1T(Q.6c)}1g{if(A(Q).2L("3P")!="#"){A.1i(Q,"3P.1q",Q.3P);A.1i(Q,"54.1q",Q.3P);b T=P.bl(Q);Q.3P="#"+T;b S=A("#"+T);if(!S.1m){S=A(D.bj).2L("id",T).1n(D.8V).gF(P.$3g[R-1]||P.r);S.1i("3t.1q",1e)}P.$3g=P.$3g.1T(S)}1g{D.1I.4K(R+1)}}});if(O){8.r.1n(D.bi);8.$3g.1x(c(){b Q=A(8);Q.1n(D.8V)});if(D.1L===2p){if(a2.6c){8.$1q.1x(c(S,Q){if(Q.6c==a2.6c){D.1L=S;if(A.22.3v||A.22.7v){b R=A(a2.6c),T=R.2L("id");R.2L("id","");7s(c(){R.2L("id",T)},8b)}gE(0,0);k Z}})}1g{if(D.84){b J=1b(A.84("l-1q"+A.1i(P.r)),10);if(J&&P.$1q[J]){D.1L=J}}1g{if(P.$3Q.3u("."+D.3p).1m){D.1L=P.$3Q.3D(P.$3Q.3u("."+D.3p)[0])}}}}D.1L=D.1L===19||D.1L!==2p?D.1L:0;D.1I=A.gD(D.1I.5k(A.6d(8.$3Q.3u("."+D.7q),c(R,Q){k P.$3Q.3D(R)}))).5I();if(A.7t(D.1L,D.1I)!=-1){D.1I.bm(A.7t(D.1L,D.1I),1)}8.$3g.1n(D.6I);8.$3Q.1J(D.3p);if(D.1L!==19){8.$3g.eq(D.1L).1y().1J(D.6I);8.$3Q.eq(D.1L).1n(D.3p);b K=c(){A(P.r).2m("a1",[P.6b("a1"),P.l(P.$1q[D.1L],P.$3g[D.1L])],D.1y)};if(A.1i(8.$1q[D.1L],"54.1q")){8.54(D.1L,K)}1g{K()}}A(3a).2V("gC",c(){P.$1q.3o(".1q");P.$3Q=P.$1q=P.$3g=19})}1R(b G=0,N;N=8.$3Q[G];G++){A(N)[A.7t(G,D.1I)!=-1&&!A(N).4a(D.3p)?"1n":"1J"](D.7q)}if(D.6K===Z){8.$1q.49("6K.1q")}b C,I,B={"2q-u":0,1z:1},E="8X";if(D.fx&&D.fx.3S==8a){C=D.fx[0]||B,I=D.fx[1]||B}1g{C=I=D.fx||B}b H={4q:"",2X:"",t:""};if(!A.22.3v){H.1O=""}c M(R,Q,S){Q.1E(C,C.1z||E,c(){Q.1n(D.6I).q(H);if(A.22.3v&&C.1O){Q[0].2Q.3u=""}if(S){L(R,S,Q)}})}c L(R,S,Q){if(I===B){S.q("4q","6O")}S.1E(I,I.1z||E,c(){S.1J(D.6I).q(H);if(A.22.3v&&I.1O){S[0].2Q.3u=""}A(P.r).2m("a1",[P.6b("a1"),P.l(R,S[0])],D.1y)})}c F(R,T,Q,S){T.1n(D.3p).7u().1J(D.3p);M(R,Q,S)}8.$1q.3o(".1q").2V(D.3C,c(){b T=A(8).58("li:eq(0)"),Q=P.$3g.3u(":57"),S=A(8.6c);if((T.4a(D.3p)&&!D.9V)||T.4a(D.7q)||A(8).4a(D.8U)||A(P.r).2m("dx",[P.6b("dx"),P.l(8,S[0])],D.4o)===Z){8.6P();k Z}P.h.1L=P.$1q.3D(8);if(D.9V){if(T.4a(D.3p)){P.h.1L=19;T.1J(D.3p);P.$3g.2y();M(8,Q);8.6P();k Z}1g{if(!Q.1m){P.$3g.2y();b R=8;P.54(P.$1q.3D(8),c(){T.1n(D.3p).1n(D.bh);L(R,S)});8.6P();k Z}}}if(D.84){A.84("l-1q"+A.1i(P.r),P.h.1L,D.84)}P.$3g.2y();if(S.1m){b R=8;P.54(P.$1q.3D(8),Q.1m?c(){F(R,T,Q,S)}:c(){T.1n(D.3p);L(R,S)})}1g{89"1v gB gA: gz gy gx."}if(A.22.3v){8.6P()}k Z});if(!(/^1F/).1B(D.3C)){8.$1q.2V("1F.1q",c(){k Z})}},1T:c(E,D,C){if(C==2p){C=8.$1q.1m}b G=8.h;b I=A(G.dk.5J(/#\\{3P\\}/g,E).5J(/#\\{6J\\}/g,D));I.1i("3t.1q",1e);b H=E.88("#")==0?E.5J("#",""):8.bl(A("a:dw-2W",I)[0]);b F=A("#"+H);if(!F.1m){F=A(G.bj).2L("id",H).1n(G.6I).1i("3t.1q",1e)}F.1n(G.8V);if(C>=8.$3Q.1m){I.2K(8.r);F.2K(8.r[0].3R)}1g{I.a0(8.$3Q[C]);F.a0(8.$3g[C])}G.1I=A.6d(G.1I,c(K,J){k K>=C?++K:K});8.8W();if(8.$1q.1m==1){I.1n(G.3p);F.1J(G.6I);b B=A.1i(8.$1q[0],"54.1q");if(B){8.54(C,B)}}8.r.2m("dv",[8.6b("dv"),8.l(8.$1q[C],8.$3g[C])],G.1T)},1Z:c(B){b D=8.h,E=8.$3Q.eq(B).1Z(),C=8.$3g.eq(B).1Z();if(E.4a(D.3p)&&8.$1q.1m>1){8.4o(B+(B+1<8.$1q.1m?1:-1))}D.1I=A.6d(A.dt(D.1I,c(G,F){k G!=B}),c(G,F){k G>=B?--G:G});8.8W();8.r.2m("du",[8.6b("du"),8.l(E.4J("a")[0],C[0])],D.1Z)},87:c(B){b C=8.h;if(A.7t(B,C.1I)==-1){k}b D=8.$3Q.eq(B).1J(C.7q);if(A.22.9Z){D.q("4q","4f-6O");7s(c(){D.q("4q","6O")},0)}C.1I=A.dt(C.1I,c(F,E){k F!=B});8.r.2m("ds",[8.6b("ds"),8.l(8.$1q[B],8.$3g[B])],C.87)},6N:c(C){b B=8,D=8.h;if(C!=D.1L){8.$3Q.eq(C).1n(D.7q);D.1I.4K(C);D.1I.5I();8.r.2m("dr",[8.6b("dr"),8.l(8.$1q[C],8.$3g[C])],D.6N)}},4o:c(B){if(2D B=="56"){B=8.$1q.3D(8.$1q.3u("[3P$="+B+"]")[0])}8.$1q.eq(B).6M(8.h.3C)},54:c(G,K){b L=8,D=8.h,E=8.$1q.eq(G),J=E[0],H=K==2p||K===Z,B=E.1i("54.1q");K=K||c(){};if(!B||!H&&A.1i(J,"6K.1q")){K();k}b M=c(N){b O=A(N),P=O.4J("*:gw");k P.1m&&P.is(":6L(86)")&&P||O};b C=c(){L.$1q.3u("."+D.8U).1J(D.8U).1x(c(){if(D.9X){M(8).1o().2x(M(8).1i("6J.1q"))}});L.9Y=19};if(D.9X){b I=M(J).2x();M(J).gv("<em></em>").4J("em").1i("6J.1q",I).2x(D.9X)}b F=A.1Q({},D.9W,{dn:B,bk:c(O,N){A(J.6c).2x(O);C();if(D.6K){A.1i(J,"6K.1q",1e)}A(L.r).2m("dq",[L.6b("dq"),L.l(L.$1q[G],L.$3g[G])],D.54);D.9W.bk&&D.9W.bk(O,N);K()}});if(8.9Y){8.9Y.gu();C()}E.1n(D.8U);7s(c(){L.9Y=A.gt(F)},0)},dn:c(C,B){8.$1q.eq(C).49("6K.1q").1i("54.1q",B)},3t:c(){b B=8.h;8.r.3o(".1q").1J(B.bi).49("1q");8.$1q.1x(c(){b C=A.1i(8,"3P.1q");if(C){8.3P=C}b D=A(8).3o(".1q");A.1x(["3P","54","6K"],c(E,F){D.49(F+".1q")})});8.$3Q.1T(8.$3g).1x(c(){if(A.1i(8,"3t.1q")){A(8).1Z()}1g{A(8).1J([B.3p,B.bh,B.7q,B.8V,B.6I].7r(" "))}})},6b:c(B){k A.3C.dm({5H:B,1h:8.r[0]})}});A.l.1q.4I={9V:Z,3C:"1F",1I:[],84:19,9X:"gs&#gr;",6K:Z,dl:"l-1q-",9W:{},fx:19,dk:\'<li><a 3P="#{3P}"><4p>#{6J}</4p></a></li>\',bj:"<1w></1w>",bi:"l-1q-gq",3p:"l-1q-1L",bh:"l-1q-9V",7q:"l-1q-1I",8V:"l-1q-dj",6I:"l-1q-1C",8U:"l-1q-gp"};A.l.1q.9U="1m";A.1Q(A.l.1q.53,{bg:19,go:c(C,F){F=F||Z;b B=8,E=8.h.1L;c G(){B.bg=gn(c(){E=++E<B.$1q.1m?E:0;B.4o(E)},C)}c D(H){if(!H||H.di){gm(B.bg)}}if(C){G();if(!F){8.$1q.2V(8.h.3C,D)}1g{8.$1q.2V(8.h.3C,c(){D();E=B.h.1L;G()})}}1g{D();8.$1q.3o(8.h.3C,D)}}})})(1v)',62,1349,'||||||||this|||var|function|||inst||options|||return|ui|||left|top|css|element||height|width|offset||||||||||||||||||||||||||||||false||||||||position|datepicker|null|date|parseInt|helper|document|true|Math|else|target|data|effects|resizable|_get|length|addClass|parent|input|tabs|size|containment|apply|case|jQuery|div|each|show|duration|arguments|test|hide|break|animate|click|handle|value|disabled|removeClass|body|selected|new|easing|opacity|settings|extend|for|currentItem|add|from|instance|absolute|dialog|helperProportions|remove||Date|browser|call|draggable||year|||to|propagate|relative|items|max|scrollLeft|scrollTop|containers|currentHandle|resize|start|month|offsetParent|triggerHandler|day|callback|undefined|min|drawMonth|cursor|255|class|dpDiv|pos|html|stop|plugin|drawYear|axis|zIndex|typeof|overlay|minDate|mode|ddmanager|item|grid|appendTo|attr|outerHeight|getFullYear|originalPosition|sortable|style|maxDate|iFormat|100|px|bind|child|overflow|outerWidth|placeholder|margins|0px|||||||||window|pageX|pageY|handles|right|getDate|panels|bottom|match|format|queue|overflowX|overflowY|positionAbs|unbind|selectedClass|focus|over|selectable|destroy|filter|msie|stepping|getMonth|endYear|charAt|PROP_NAME|unselecting|event|index|round|drag|uiDialog|hidden|scrollSpeed|scrollSensitivity|vertical|active|numMonths|accordion|cursorAt|href|lis|parentNode|constructor|abs|margin|nw|sw|se|name|currentDay||monthNames||rangeStart|showStatus||auto||dequeue|removeData|hasClass|widget|documentElement|ne|printDate|inline|next|currentYear|dayNames|clear|isFixed|nodeName|ctrlKey|selecting|select|span|display|slider|mouse|currentMonth|selectedMonth|selectedDay|dayNamesShort|xa0|td|firstDay|matches|_defaults|checkDate|headers|setMode|restore|convertPositionTo|cssPosition|defaults|find|push|distance|translateValue|offsetWidth|offsetHeight|selectedYear|shortYearCutoff|end|isRTL|current|rangeSelect|literal|lookAhead|fixed|_pos|containerCache||ghost|droppable|prototype|load||string|visible|parents|title|setData|iValue|dateStr|showAnim|toggle|effect|tolerance|originalSize|get|4px|concat|init|rangeElement|none|mouseDrag|both|default|switch|append|monthNamesShort|getTime|endDate|endDay|_adjustDate|while|output|save|setTransition|drop|scroll|alsoResize|aspectRatio|isover|type|sort|replace|convertValue|isNaN|close|minWidth|minHeight|button|_getFormatConfig|period|status|unselectable|endMonth|prev|_updateDatepicker|_dialogInput|key|activate||down|complete|borderLeftWidth|borderTopWidth|removeWrapper|up|PI|revert|_change|accept|fakeEvent|hash|map|slide|keydown|mouseStop|mouseStart|plugins|cancel|object|formatDate|_getMinMaxDate|_addStatus|onclick|otherMonth|today|dow|stepMonths|chars|_stayOpen|_triggerClass|static|_disabledInputs|toShow|createWrapper|direction|clone|tagName|128|floating|proportionallyResize|knobHandles|_mouseStarted|hideClass|label|cache|not|trigger|disable|block|blur|change|previousHandle|actualSize|realMax|keyCode|version|scrollHeight|stack|maxHeight|maxWidth|years|showOtherMonths|week|nextText|prevText||_hideDatepicker|defaultDate|exec|dates|onSelect|_inDialog|markerClassName|buttonText|autoHeight|marginRight|marginBottom|pow|transparent|HTML|out|continue|sizeDiff|0pt|isout|widgetName|disabledClass|join|setTimeout|inArray|siblings|opera|Number|clickOffset|handleSize|steps|mousedown|instances|bgiframe|split|center|content|disableSelection|dateFormat|_formatDate|header|cell|dateStatus|row|currentText|yy|_datepickerShowing|postProcess|obj|scrollY|scrollX|showOn|toHide|andSelf|marginLeft|marginTop|backgroundColor|delay|deactivate|startselected|snapElements|cookie||img|enable|indexOf|throw|Array|500|wrap|mouseInit|mouseDestroy|titlebar|className|props|newMinDate|_getNumberOfMonths|getDay|number|selectedDate|highlightWeek|days|col|prompt|navigationAsDateFormat|val|firstMon|altFormat|_lastInput|toLowerCase|_showDatepicker|buttonImage|inlineSettings|running|visibility|sqrt|70158|139|F0|overflowXOffset|overflowYOffset|_opacity|_zIndex|_cursor|cancelHelperRemoval|generatePosition|isFunction|parentData|borderDif|_handles|intersect|droppables|isOver|loadingClass|panelClass|tabify|normal|_|translateRange|translateLimits|moveTo|oneStep|mouseCapture|scrollWidth|1000|text|uiDialogTitlebar|middle|Datepicker|extendRemove|_getDaysInMonth|_determineDate|iframe|closeAtTop|daySettings|beforeShowDay|showWeeks|changeFirstDay|DD|iso8601Week|hideIfNoPrevNext|maxDraw|rangeSeparator|getNumber|names|floor|altField|blockUI|_curInst|onClose|innerHeight|beforeShow|getData|appendText|the|Show|swing|alwaysOpen|sin|animateClass|dragging|update|refreshPositions|counter|offsetParentBorders|currentContainer|refresh|absolutePosition|hasScroll|_aspectRatio|containerOffset|_proportionallyResize|knob|mouseUp|cssCache|getter|unselect|ajaxOptions|spinner|xhr|safari|insertBefore|tabsshow|location|sliderValue|updateRange|horizontal|firstValue|range|border|modal|150|autoResize|isOpen|moveToTop|hover|setDate|_notifyChange|_adjustInstDate|option|tr|_currentClass|currentDate|calculateWeek|dayNamesMin|dayStatus|_getDate|shortNames|longNames|||mm|checkLiteral|num|_selectDate|_selectingMonthYear|browserHeight|browserWidth|innerWidth|String|preventDefault|handled|_doKeyDown|attrValue|attrName|animated|toggleClass|borderRightWidth|borderBottomWidth|neg|percent|color|pieces|5625|192|211|parseFloat|slow|defaultView|unit|background|dropBehaviour|rearrange|prepareOffsets|refreshItems|selectees|1px|textarea|shiftKey|containerPosition|containerSize|resizing|hoverClass|activeClass|proportions|sortables|iframeFix|_mouseDelayMet|_mouseDownEvent|rotation|unselectClass|navClass|panelTemplate|success|tabId|splice|handleOffset|createRange|initBoundaries|firstChild|mouseDown|generated|unwrap|after|padding|keypress|mouseup|buttons|empty|createButtons|open|resizeStop|resizeStart|dragStop|dragStart|otherArgs|_isInRange|_canAdjustMonth|onChange|onmouseout|onmouseover|_clickMonthYear|_selectMonthYear|secondary|cover|src|controls|_selectDay|_unselectableClass|dRow|daysInMonth|leadDays|_gotoToday|gotoCurrent|_promptClass|_clearDate|mandatory|startDate|_setDate|pattern|getDaysInMonth|_getDefaultDate|log|catch|parseDate|try|_setDateFromField|formatName|formatNumber|getName|origSize|_mainDivId|_dialogClass|_tidyDialog|showOptions|_findPos|clientHeight|clientWidth|dims|chr|_doKeyPress|_appendClass|_newInst|regional|step|animations|140|times|origin|scale|backgroundImage|explode|easeOutBounce|asin|169|rgb|fast|cssText|fxWrapper|float|guess|domPosition|createPlaceholder|custom|connectWith|pointer|touch|dragged|selectableunselecting|opos|alsoresize|removeChild|_updateCache|containerElement|preserveCursor|elementOffset|documentScroll|wrapper|originalElement|autohide|_nodeName|knobTheme|borderTop|borderLeft|borderRight|borderBottom|_helper|snap|original|uiHash||mouseDelayMet|mouseDistanceMet|_mouseUpDelegate|_mouseMoveDelegate|clientX|panel|tabTemplate|idPrefix|fix|url|||tabsload|tabsdisable|tabsenable|grep|tabsremove|tabsadd|first|tabsselect|handleIndex|getRange|removeRange|startValue|outline|javascript|events|create|300|200|closeOnEscape|autoOpen|uiDialogButtonPane|dialogfocus|uiDialogTitlebarClose|uiDialogContainer|stopPropagation|_checkExternalClick|_attachDatepicker|slice|toString|isArray|curMonth|curYear|_getFirstDayOfMonth|checkRange|minMax|numberOfMonths|onChangeMonthYear|yearStatus|onchange|yearRange|changeYear|inMaxYear|inMinYear|monthStatus|changeMonth|_generateMonthYearHeader|initStatus|table||tbody|getUTCDate|setUTCDate|numRows|ceil|isMultiMonth|thead|_changeFirstDay|||weekHeader|statusForDate|currentStatus||nextStatus|prevStatus|closeText|closeStatus|clearText|clearStatus|_generateDatepicker|offsetNumeric|offsetString|_possibleChars|getYear|Invalid|iInit|_updateAlternate|100px|nextSibling|_checkOffset|Class|_isDisabledDatepicker|charCode|dateText|_dialogInst|_inlineDatepicker|before|alt|buttonImageOnly|_connectDatepicker|debug|Select|different|May|Close|navigationFilter|oldContent|newContent|oldHeader|newHeader|accordionchange|fillSpace|zoom|animation|transfer|getBaseline|paddingRight|paddingLeft|paddingBottom|paddingTop|fontSize|fade|easeInBounce|525|cos|easeOutQuad|def|165|224|144|230||240|107|black|245|trim|rgba|elem|cssUnit|morph||_toggleClass|_removeClass||_addClass|__toggle|Function|_hide|_show|currentStyle|getComputedStyle|storage|dropOnEmpty|toArray|serialize|receive|appendChild|contactContainers|intersectsWithEdge|intersectsWith|refreshContainers|toleranceElement|expression|sender|compareDocumentPosition|contains|autoRefresh|unselected|fit|autoHide|_renderProxy|_respectSize|_updateRatio|originalMousePosition|_renderAxis|defaultTheme|8px|solid|F2F2F2|greedyChild|greedy|shouldRevert|connectToSortable|snapMode|mousemove|mouseMove|_mouseUnselectable|on|widgetBaseClass|MozUserSelect|5000px|clearInterval|setInterval|rotate|loading|nav|8230|Loading|ajax|abort|wrapInner|last|identifier|fragment|Mismatching|Tabs|UI|unload|unique|scrollTo|insertAfter|has|tab|z0|Za|Height|Width|noKeyboard|void|borderWidth|dialogclose|dialogopen|resizeHelper|dragHelper|buttonpane|tabIndex|dialogClass|prependTo|container|ready|isDisabled|setMilliseconds|setSeconds|setMinutes|setHours|cellspacing|cellpadding|one|links|9999|control|0123456789|W3C|TIMESTAMP|RSS|RFC_2822|RFC_1123|RFC_1036|RFC_850|RFC_822|ISO_8601|COOKIE|ATOM|Unexpected|Unknown|Missing|86400000|getTimezoneOffset|noWeekends|selectedIndex|unblockUI|fadeOut|fadeIn|slideUp|slideDown|nodeType|rtl|multi|1000px|fromCharCode|_getDateDatepicker|_setDateDatepicker|_changeDatepicker|_disableDatepicker|_enableDatepicker|_destroyDatepicker|_dialogDatepicker|_inlineShow|err|eval|getAttribute|setDefaults|console|hasDatepicker|Set|Sa|Fr|Th|We|Tu|Mo|Su|Sat|Fri|Thu|Wed|Tue|Mon|Sun|Saturday|Friday|Thursday|Wednesday|Tuesday|Monday|Sunday||of||Week|weekStatus|Wk|Dec|Nov|Oct|Sep||Aug|Jul|Jun|Apr||Mar|Feb|Jan|December|November|October|September|August|July|June|April|March|February|January|Today|x3e|Next|previous|Prev|x3c|without|Erase|Clear|700|easeinout|easeslide|bounceout|bounceslide|clearStyle|tabindex|navigation|shake|box|puff|pulsate|removeAttribute|ffff99|highlight|horizFirst|fold|IMG|clip|250|bounce|blind|easeInOutBounce|984375|625|9375|easeInOutBack|easeOutBack|easeInBack|easeInOutElastic|easeOutElastic|easeInElastic|easeInOutCirc|easeOutCirc|easeInCirc|easeInOutExpo|easeOutExpo|easeInExpo|easeInOutSine|easeOutSine|easeInSine|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|easeInOutCubic|easeOutCubic|easeInCubic|easeInOutQuad|easeInQuad|jswing|yellow|white|silver|red|violet|purple|203|pink|orange|olive|navy|maroon|magenta|lime|lightyellow|193|182|lightpink|lightgrey|238|lightgreen|lightcyan|216|173|lightblue|khaki|130|indigo|green|215|gold|fuchsia|148|darkviolet|122|233|darksalmon|darkred|204|153|darkorchid|darkorange|darkolivegreen|darkmagenta|183|189|darkkhaki|darkgreen|darkgrey|darkcyan|darkblue|cyan|brown|blue|220|beige|azure|aqua|curCSS|state|outlineColor|borderTopColor|borderRightColor|borderLeftColor|borderBottomColor|pt|switchClass|method|Moz|replaceWith|font|dynamic|semi|10000|forcePointerForContainers|attribute|522|selectablestop|selectableselected|selectableunselected|selectableselecting|keyboard|clientY|selectablestart|dotted|createElement|selectee|animateEasing|animateDuration|instanceof|children|mouseover|Left|Right|Bottom|Top|all|canvas|808080||DEDEDE|proxy|sortactivate|dragstart|dropdeactivate|dropactivate|dropout|dropover|group|makeArray|fromSortable|toSortable|sortreceive|outer|inner|snapTolerance|DragDropIframeFix|001|fff|valid|invalid|mozilla|_mouseDelayTimer|which|started|off|enableSelection|gen'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/ui.accordion.js b/wp-content/themes/vanilla/js/jquery/ui.accordion.js
new file mode 100755
index 0000000000000000000000000000000000000000..9ba92dd01c9590397d92a6e946e24ecffd19415b
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/ui.accordion.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(4(E){E.2i("e.5",{2h:4(){7 G=2.c;3(G.2g){7 J=2.d.13("a").l(G.1c);3(J.1q){3(J.l(G.n).1q){G.6=J}w{G.6=J.j().j().2f();J.v("2e")}}}G.8=2.d.13(G.n);G.6=C(G.8,G.6);3(E.W.15){2.d.13("a").k("2d","1")}3(!2.d.2c("e-5")){2.d.v("e-5");E("<1p 1o=\'e-5-2b\'/>").2a(G.8);E("<1p 1o=\'e-5-29\'/>").28(G.8);G.8.v("e-5-n").27("26","0")}7 I;3(G.1l){I=2.d.j().b();G.8.O(4(){I-=E(2).1m()});7 H=0;G.8.h().O(4(){H=V.1n(H,E(2).25()-E(2).b())}).b(I-H)}w{3(G.g){I=0;G.8.h().O(4(){I=V.1n(I,E(2).1m())}).b(I)}}G.8.11(G.6||"").h().X();G.6.j().S().v(G.t);3(G.Q){2.d.24((G.Q)+".5",F)}},U:4(G){F.12(2.d[0],{T:C(2.c.8,G)[0]})},23:4(){2.c.8.h().k("22","");3(2.c.1l||2.c.g){2.c.8.h().k("b","")}E.21(2.d[0],"5");2.d.20("e-5").1Z(".5")}});4 B(H,G){9 4(){9 H.1Y(G,1X)}}4 D(I){3(!E.o(2,"5")){9}7 G=E.o(2,"5");7 H=G.c;H.m=I?0:--H.m;3(H.m){9}3(H.1W){H.f.1V(H.i).k({b:"",18:""})}E(2).1U("1k",[E.Q.1T({1S:"1k",T:G.d[0]}),H.o],H.1R)}4 A(G,K,L,J,M){7 I=E.o(2,"5").c;I.f=G;I.i=K;I.o=L;7 H=B(D,2);I.m=K.P()===0?G.P():K.P();3(I.R){3(!I.s&&J){E.e.5.Z[I.R]({f:x([]),i:K,r:H,z:M,g:I.g})}w{E.e.5.Z[I.R]({f:G,i:K,r:H,z:M,g:I.g})}}w{3(!I.s&&J){G.1Q()}w{K.X();G.Y()}H(10)}}4 F(L){7 J=E.o(2,"5").c;3(J.1P){9 u}3(!L.T&&!J.s){J.6.j().S().1j(J.t);7 I=J.6.h(),M={c:J,1i:x([]),1h:J.6,1g:x([]),1f:I},G=(J.6=E([]));A.12(2,G,I,M);9 u}7 K=E(L.T);K=E(K.1O(J.n)[0]||K);7 H=K[0]==J.6[0];3(J.m||(J.s&&H)){9 u}3(!K.1N(J.n)){9}J.6.j().S().1j(J.t);3(!H){K.j().S().v(J.t)}7 G=K.h(),I=J.6.h(),M={c:J,1i:K,1h:J.6,1g:G,1f:I},N=J.8.1e(J.6[0])>J.8.1e(K[0]);J.6=H?E([]):K;A.12(2,G,I,M,H,N);9 u}4 C(H,G){9 G!=1M?1L G=="1K"?H.l(":1d("+G+")"):H.11(H.11(G)):G===u?E([]):H.l(":1d(0)")}E.19(E.e.5,{1J:{t:"1I",s:10,R:"y",Q:"1H",n:"a",g:10,m:0,1c:4(){9 2.1b.1a()==1G.1b.1a()}},Z:{y:4(G,I){G=E.19({q:"14",p:1F},G,I);3(!G.i.P()){G.f.16({b:"Y"},G);9}7 H=G.i.b(),J=G.f.b(),K=J/H;G.f.k({b:0,18:"17"}).Y();G.i.l(":17").O(G.r).1E().l(":1D").16({b:"X"},{1C:4(L){7 M=(H-L)*K;3(E.W.15||E.W.1B){M=V.1A(M)}G.f.b(M)},p:G.p,q:G.q,r:4(){3(!G.g){G.f.k("b","1z")}G.r()}})},1y:4(G){2.y(G,{q:G.z?"1x":"14",p:G.z?1w:1v})},1u:4(G){2.y(G,{q:"1t",p:1s})}}});E.1r.U=4(G){9 2.5("U",G)}})(x)',62,143,'||this|if|function|accordion|active|var|headers|return||height|options|element|ui|toShow|autoHeight|next|toHide|parent|css|filter|running|header|data|duration|easing|complete|alwaysOpen|selectedClass|false|addClass|else|jQuery|slide|down|||||||||||||||each|size|event|animated|andSelf|target|activate|Math|browser|hide|show|animations|true|not|call|find|swing|msie|animate|hidden|overflow|extend|toLowerCase|href|navigationFilter|eq|index|oldContent|newContent|oldHeader|newHeader|toggleClass|accordionchange|fillSpace|outerHeight|max|class|span|length|fn|700|easeinout|easeslide|200|1000|bounceout|bounceslide|auto|ceil|opera|step|visible|end|300|location|click|selected|defaults|number|typeof|undefined|is|parents|disabled|toggle|change|type|fix|triggerHandler|add|clearStyle|arguments|apply|unbind|removeClass|removeData|display|destroy|bind|innerHeight|tabindex|attr|appendTo|right|insertBefore|left|hasClass|zoom|current|prev|navigation|init|widget'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/ui.datepicker.js b/wp-content/themes/vanilla/js/jquery/ui.datepicker.js
new file mode 100755
index 0000000000000000000000000000000000000000..ee4e8eefea1634e257e9897e8f5121932d9b0788
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/ui.datepicker.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(n($){c 19="f";n 3A(){b.7i=F;b.44=r;b.2s=[];b.2W=F;b.2G=F;b.5w="t-f-I";b.5O="t-f-3a";b.2p="t-f-41";b.5x="t-f-9D";b.5g="t-f-3l";b.5a="t-f-3H";b.4o="t-f-4u-G";b.5Q=[];b.5Q[""]={6C:"9C",6D:"9B 4a 4u h",6A:"7m",6B:"7m 9A 6P",2A:"&#9z;9y",6z:"4b 4a 9x C",2z:"9w&#9v;",6y:"4b 4a 3P C",2U:"9u",6x:"4b 4a 4u C",1g:["9t","9s","9r","9q","7l","9p","9o","9n","9m","9l","9k","9j"],1P:["9i","9h","9g","9f","7l","9e","9d","9c","9b","9a","99","98"],6g:"4b a 7k C",69:"4b a 7k A",6v:"97",96:"95 94 4a A",1o:["93","92","91","90","8Z","8Y","8X"],1t:["8W","8V","8U","8T","8S","8R","8Q"],4r:["8P","8O","8N","8M","8L","8K","8J"],4s:"8I 3N 8H 8G 2y G",2S:"7j 3N, M d",2L:"4z/3o/2V",1x:0,6k:"7j a h",1D:F};b.1z={31:"2E",1K:"5H",5A:{},2C:r,49:"",2K:"...",3y:"",7g:F,3G:1i,5i:F,3Q:F,3m:F,5f:F,6h:1i,6d:1i,6c:"-10:+10",3M:1i,3g:F,2w:F,3L:F,4q:b.3O,1C:"+10",1j:F,6w:b.2S,O:r,S:r,1c:"8F",3K:r,48:r,2F:r,68:r,46:r,67:1,2m:1,1E:F,3T:" - ",3Z:"",3q:""};$.4d(b.1z,b.5Q[""]);b.J=$(\'<I x="\'+b.5w+\'" 4l="5I: 6Y;"></I>\')}$.4d(3A.5V,{2H:"8E",5o:n(){k(b.7i){8D.5o.2b("",4T)}},8C:n(u){3D(b.1z,u||{});q b},5S:n(o,u){c 3z=r;1m(4R 61 b.1z){c 4Q=o.8B("h:"+4R);k(4Q){3z=3z||{};6J{3z[4R]=8A(4Q)}6I(8z){3z[4R]=4Q}}}c 1Y=o.1Y.5J();c 1v=(1Y=="I"||1Y=="3k");k(!o.x){o.x="78"+v z().1R()}c 8=b.5P($(o),1v);8.u=$.4d({},u||{},3z||{});k(1Y=="p"){b.7h(o,8)}N{k(1v){b.7b(o,8)}}},5P:n(o,1v){q{x:o[0].x,p:o,1s:0,1r:0,1B:0,H:0,K:0,1v:1v,J:(!1v?b.J:$(\'<I V="t-f-1v"></I>\'))}},7h:n(o,8){c p=$(o);k(p.42(b.2H)){q}c 49=b.l(8,"49");c 1D=b.l(8,"1D");k(49){p[1D?"7d":"7c"](\'<3k V="\'+b.5O+\'">\'+49+"</3k>")}c 31=b.l(8,"31");k(31=="2E"||31=="4k"){p.2E(b.3v)}k(31=="3x"||31=="4k"){c 2K=b.l(8,"2K");c 3y=b.l(8,"3y");c 41=$(b.l(8,"7g")?$("<4N/>").2j(b.2p).7f({56:3y,7e:2K,3J:2K}):$(\'<3x 47="3x"></3x>\').2j(b.2p).R(3y==""?2K:$("<4N/>").7f({56:3y,7e:2K,3J:2K})));p[1D?"7d":"7c"](41);41.8y(n(){k($.f.2W&&$.f.3r==o){$.f.2B()}N{$.f.3v(o)}q F})}p.2j(b.2H).5N(b.4M).75(b.5M).4P("7a.f",n(3s,2J,E){8.u[2J]=E}).4P("79.f",n(3s,2J){q b.l(8,2J)});$.1d(o,19,8)},7b:n(o,8){c p=$(o);k(p.42(b.2H)){q}p.2j(b.2H).3a(8.J).4P("7a.f",n(3s,2J,E){8.u[2J]=E}).4P("79.f",n(3s,2J){q b.l(8,2J)});$.1d(o,19,8);b.5k(8,b.5n(8));b.24(8)},8x:n(8){c 1b=b.3d(8);8.J.1M(1b[1]*$(".t-f",8.J[0]).1M())},8w:n(p,76,2F,u,2r){c 8=b.77;k(!8){c x="78"+v z().1R();b.26=$(\'<p 47="50" x="\'+x+\'" 23="1" 4l="1W: 4F; 1X: -6R;"/>\');b.26.5N(b.4M);$("29").3a(b.26);8=b.77=b.5P(b.26,F);8.u={};$.1d(b.26[0],19,8)}3D(8.u,u||{});b.26.3n(76);b.1H=(2r?(2r.1a?2r:[2r.8v,2r.8u]):r);k(!b.1H){c 4I=4J.6T||15.1L.5F||15.29.5F;c 4H=4J.6S||15.1L.5E||15.29.5E;c 30=15.1L.3u||15.29.3u;c 2Z=15.1L.3t||15.29.3t;b.1H=[(4I/2)-2O+30,(4H/2)-8t+2Z]}b.26.25("2q",b.1H[0]+"4K").25("1X",b.1H[1]+"4K");8.u.2F=2F;b.2G=1i;b.J.2j(b.5x);b.3v(b.26[0]);k($.43){$.43(b.J)}$.1d(b.26[0],19,8);q b},8s:n(o){c 1Y=o.1Y.5J();c $o=$(o);$.8r(o,19);k(1Y=="p"){$o.3w("."+b.5O).45().3i().3w("."+b.2p).45().3i().2Q(b.2H).4E("2E",b.3v).4E("5N",b.4M).4E("75",b.5M)}N{k(1Y=="I"||1Y=="3k"){$o.2Q(b.2H).6X()}}},8q:n(o){o.4O=F;$(o).3w("3x."+b.2p).3C(n(){b.4O=F}).3i().3w("4N."+b.2p).25({74:"1.0",73:""});b.2s=$.72(b.2s,n(E){q(E==o?r:E)})},8p:n(o){o.4O=1i;$(o).3w("3x."+b.2p).3C(n(){b.4O=1i}).3i().3w("4N."+b.2p).25({74:"0.5",73:"3V"});b.2s=$.72(b.2s,n(E){q(E==o?r:E)});b.2s[b.2s.1a]=o},70:n(o){k(!o){q F}1m(c i=0;i<b.2s.1a;i++){k(b.2s[i]==o){q 1i}}q F},8o:n(o,1e,E){c u=1e||{};k(1O 1e=="3B"){u={};u[1e]=E}k(8=$.1d(o,19)){3D(8.u,u);b.24(8)}},8n:n(o,h,1S){c 8=$.1d(o,19);k(8){b.5k(8,h,1S);b.24(8)}},8m:n(o){c 8=$.1d(o,19);k(8){b.5q(8)}q(8?b.4w(8):r)},4M:n(e){c 8=$.1d(e.o,19);c 4L=1i;k($.f.2W){3U(e.5L){B 9:$.f.2B(r,"");L;B 13:$.f.59(e.o,8.1r,8.1B,$("1w.t-f-3h-2R-2x",8.J)[0]);q F;L;B 27:$.f.2B(r,$.f.l(8,"1c"));L;B 33:$.f.1U(e.o,(e.1N?-1:-$.f.l(8,"2m")),(e.1N?"Y":"M"));L;B 34:$.f.1U(e.o,(e.1N?+1:+$.f.l(8,"2m")),(e.1N?"Y":"M"));L;B 35:k(e.1N){$.f.5h(e.o)}L;B 36:k(e.1N){$.f.5e(e.o)}L;B 37:k(e.1N){$.f.1U(e.o,-1,"D")}L;B 38:k(e.1N){$.f.1U(e.o,-7,"D")}L;B 39:k(e.1N){$.f.1U(e.o,+1,"D")}L;B 40:k(e.1N){$.f.1U(e.o,+7,"D")}L;3V:4L=F}}N{k(e.5L==36&&e.1N){$.f.3v(b)}N{4L=F}}k(4L){e.8l();e.8k()}},5M:n(e){c 8=$.1d(e.o,19);c 2n=$.f.6K($.f.l(8,"2L"));c 5K=8j.8i(e.71==4U?e.5L:e.71);q e.1N||(5K<" "||!2n||2n.6u(5K)>-1)},3v:n(p){p=p.o||p;k(p.1Y.5J()!="p"){p=$("p",p.8h)[0]}k($.f.70(p)||$.f.3r==p){q}c 8=$.1d(p,19);c 48=$.f.l(8,"48");3D(8.u,(48?48.2b(p,[p,8]):{}));$.f.2B(r,"");$.f.3r=p;$.f.5q(8);k($.f.2G){p.E=""}k(!$.f.1H){$.f.1H=$.f.5C(p);$.f.1H[1]+=p.8g}c 1p=F;$(p).6Q().3C(n(){1p|=$(b).25("1W")=="6Z";q!1p});k(1p&&$.2c.5D){$.f.1H[0]-=15.1L.3u;$.f.1H[1]-=15.1L.3t}c P={2q:$.f.1H[0],1X:$.f.1H[1]};$.f.1H=r;8.1h=r;8.J.25({1W:"4F",5I:"8f",1X:"-8e"});$.f.24(8);8.J.1M($.f.3d(8)[1]*$(".t-f",8.J[0])[0].8d);P=$.f.6U(8,P,1p);8.J.25({1W:($.f.2G&&$.43?"8c":(1p?"6Z":"4F")),5I:"6Y",2q:P.2q+"4K",1X:P.1X+"4K"});k(!8.1v){c 1K=$.f.l(8,"1K")||"5H";c 1c=$.f.l(8,"1c");c 2X=n(){$.f.2W=1i;k($.2c.57&&2N($.2c.6j)<7){$("4j.t-f-55").25({1M:8.J.1M()+4,2I:8.J.2I()+4})}};k($.4G&&$.4G[1K]){8.J.5H(1K,$.f.l(8,"5A"),1c,2X)}N{8.J[1K](1c,2X)}k(1c==""){2X()}k(8.p[0].47!="5B"){8.p[0].2E()}$.f.44=8}},24:n(8){c 5G={1M:8.J.1M()+4,2I:8.J.2I()+4};8.J.6X().3a(b.6E(8)).8b("4j.t-f-55").25({1M:5G.1M,2I:5G.2I});c 1b=b.3d(8);8.J[(1b[0]!=1||1b[1]!=1?"6W":"45")+"6V"]("t-f-8a");8.J[(b.l(8,"1D")?"6W":"45")+"6V"]("t-f-89");k(8.p&&8.p[0].47!="5B"){$(8.p[0]).2E()}},6U:n(8,P,1p){c 2r=8.p?b.5C(8.p[0]):r;c 4I=4J.6T||15.1L.5F;c 4H=4J.6S||15.1L.5E;c 30=15.1L.3u||15.29.3u;c 2Z=15.1L.3t||15.29.3t;k(b.l(8,"1D")||(P.2q+8.J.1M()-30)>4I){P.2q=1Q.2t((1p?0:30),2r[0]+(8.p?8.p.1M():0)-(1p?30:0)-8.J.1M()-(1p&&$.2c.5D?15.1L.3u:0))}N{P.2q-=(1p?30:0)}k((P.1X+8.J.2I()-2Z)>4H){P.1X=1Q.2t((1p?0:2Z),2r[1]-(1p?2Z:0)-(b.2G?0:8.J.2I())-(1p&&$.2c.5D?15.1L.3t:0))}N{P.1X-=(1p?2Z:0)}q P},5C:n(2Y){3S(2Y&&(2Y.47=="5B"||2Y.88!=1)){2Y=2Y.87}c 1W=$(2Y).P();q[1W.2q,1W.1X]},2B:n(p,1c){c 8=b.44;k(!8){q}c 1E=b.l(8,"1E");k(1E&&b.2o){b.4C("#"+8.x,b.2M(8,8.1f,8.1q,8.1n))}b.2o=F;k(b.2W){1c=(1c!=r?1c:b.l(8,"1c"));c 1K=b.l(8,"1K");c 2X=n(){$.f.5y(8)};k(1c!=""&&$.4G&&$.4G[1K]){8.J.5z(1K,$.f.l(8,"5A"),1c,2X)}N{8.J[(1c==""?"5z":(1K=="86"?"85":(1K=="84"?"83":"5z")))](1c,2X)}k(1c==""){b.5y(8)}c 46=b.l(8,"46");k(46){46.2b((8.p?8.p[0]:r),[b.4w(8),8])}b.2W=F;b.3r=r;8.u.3l=r;k(b.2G){b.26.25({1W:"4F",2q:"0",1X:"-6R"});k($.43){$.82();$("29").3a(b.J)}}b.2G=F}b.44=r},5y:n(8){8.J.2Q(b.5x).4E(".t-f");$("."+b.5g,8.J).45()},5R:n(3s){k(!$.f.44){q}c $o=$(3s.o);k(($o.6Q("#"+$.f.5w).1a==0)&&!$o.42($.f.2H)&&!$o.42($.f.2p)&&$.f.2W&&!($.f.2G&&$.43)){$.f.2B(r,"")}},1U:n(x,P,20){c o=$(x);c 8=$.1d(o[0],19);b.4g(8,P,20);b.24(8)},5e:n(x){c o=$(x);c 8=$.1d(o[0],19);k(b.l(8,"5f")&&8.1f){8.1s=8.1f;8.H=8.1r=8.1q;8.K=8.1B=8.1n}N{c h=v z();8.1s=h.U();8.H=8.1r=h.16();8.K=8.1B=h.Q()}b.1U(o);b.4f(8)},53:n(x,2P,20){c o=$(x);c 8=$.1d(o[0],19);8.4D=F;8[20=="M"?"H":"K"]=2P.2a[2P.81].E-0;b.1U(o);b.4f(8)},52:n(x){c o=$(x);c 8=$.1d(o[0],19);k(8.p&&8.4D&&!$.2c.57){8.p[0].2E()}8.4D=!8.4D},6s:n(x,G){c o=$(x);c 8=$.1d(o[0],19);8.u.1x=G;b.24(8)},59:n(x,C,A,1w){k($(1w).42(b.5a)){q}c o=$(x);c 8=$.1d(o[0],19);c 1E=b.l(8,"1E");k(1E){b.2o=!b.2o;k(b.2o){$(".t-f 1w").2Q(b.4o);$(1w).2j(b.4o)}}8.1s=8.1f=$("a",1w).R();8.1r=8.1q=C;8.1B=8.1n=A;k(b.2o){8.1T=8.22=8.17=r}N{k(1E){8.1T=8.1f;8.22=8.1q;8.17=8.1n}}b.4C(x,b.2M(8,8.1f,8.1q,8.1n));k(b.2o){8.1h=v z(8.1n,8.1q,8.1f);b.24(8)}N{k(1E){8.1s=8.1f=8.1h.U();8.1r=8.1q=8.1h.16();8.1B=8.1n=8.1h.Q();8.1h=r;k(8.1v){b.24(8)}}}},5h:n(x){c o=$(x);c 8=$.1d(o[0],19);k(b.l(8,"5i")){q}b.2o=F;8.1T=8.22=8.17=8.1h=r;b.4C(o,"")},4C:n(x,1J){c o=$(x);c 8=$.1d(o[0],19);1J=(1J!=r?1J:b.2M(8));k(b.l(8,"1E")&&1J){1J=(8.1h?b.2M(8,8.1h):1J)+b.l(8,"3T")+1J}k(8.p){8.p.3n(1J)}b.6O(8);c 2F=b.l(8,"2F");k(2F){2F.2b((8.p?8.p[0]:r),[1J,8])}N{k(8.p){8.p.41("6P")}}k(8.1v){b.24(8)}N{k(!b.2o){b.2B(r,b.l(8,"1c"));b.3r=8.p[0];k(1O(8.p[0])!="4c"){8.p[0].2E()}b.3r=r}}},6O:n(8){c 3Z=b.l(8,"3Z");k(3Z){c 3q=b.l(8,"3q");c h=b.4w(8);1J=(5Z(h)?(!h[0]&&!h[1]?"":b.2d(3q,h[0],b.1Z(8))+b.l(8,"3T")+b.2d(3q,h[1]||h[0],b.1Z(8))):b.2d(3q,h,b.1Z(8)));$(3Z).3C(n(){$(b).3n(1J)})}},80:n(h){c G=h.3e();q[(G>0&&G<6),""]},3O:n(h){c 1A=v z(h.Q(),h.16(),h.U(),(h.7Z()/-60));c 3p=v z(1A.Q(),1-1,4);c 1x=3p.3e()||7;3p.4e(3p.U()+1-1x);k(1x<4&&1A<3p){1A.4e(1A.U()-3);q $.f.3O(1A)}N{k(1A>v z(1A.Q(),12-1,28)){1x=v z(1A.Q()+1,1-1,4).3e()||7;k(1x>4&&(1A.3e()||7)<1x-3){1A.4e(1A.U()+3);q $.f.3O(1A)}}}q 1Q.7Y(((1A-3p)/7X)/7)+1},2S:n(h,8){q $.f.2d($.f.l(8,"2S"),h,$.f.1Z(8))},5p:n(X,E,u){k(X==r||E==r){3W"6M 4T"}E=(1O E=="4c"?E.5X():E+"");k(E==""){q r}c 1C=(u?u.1C:r)||b.1z.1C;c 1t=(u?u.1t:r)||b.1z.1t;c 1o=(u?u.1o:r)||b.1z.1o;c 1P=(u?u.1P:r)||b.1z.1P;c 1g=(u?u.1g:r)||b.1z.1g;c A=-1;c C=-1;c G=-1;c 1F=F;c 1G=n(1l){c 1y=(T+1<X.1a&&X.18(T+1)==1l);k(1y){T++}q 1y};c 3X=n(1l){1G(1l);c 5v=(1l=="@"?14:(1l=="y"?4:2));c 23=5v;c 4B=0;3S(23>0&&1I<E.1a&&E.18(1I)>="0"&&E.18(1I)<="9"){4B=4B*10+(E.18(1I++)-0);23--}k(23==5v){3W"7W 4X 5u 1W "+1I}q 4B};c 5t=n(1l,4x,4y){c 3Y=(1G(1l)?4y:4x);c 23=0;1m(c j=0;j<3Y.1a;j++){23=1Q.2t(23,3Y[j].1a)}c 1e="";c 6N=1I;3S(23>0&&1I<E.1a){1e+=E.18(1I++);1m(c i=0;i<3Y.1a;i++){k(1e==3Y[i]){q i+1}}23--}3W"7V 1e 5u 1W "+6N};c 4A=n(){k(E.18(1I)!=X.18(T)){3W"7U 1F 5u 1W "+1I}1I++};c 1I=0;1m(c T=0;T<X.1a;T++){k(1F){k(X.18(T)=="\'"&&!1G("\'")){1F=F}N{4A()}}N{3U(X.18(T)){B"d":G=3X("d");L;B"D":5t("D",1t,1o);L;B"m":C=3X("m");L;B"M":C=5t("M",1P,1g);L;B"y":A=3X("y");L;B"@":c h=v z(3X("@"));A=h.Q();C=h.16()+1;G=h.U();L;B"\'":k(1G("\'")){4A()}N{1F=1i}L;3V:4A()}}}k(A<2O){A+=v z().Q()-v z().Q()%2O+(A<=1C?0:-2O)}c h=v z(A,C-1,G);k(h.Q()!=A||h.16()+1!=C||h.U()!=G){3W"6M h"}q h},7T:"2V-4z-3o",7S:"D, 3o M 2V",7R:"2V-4z-3o",7Q:"D, d M y",7P:"3N, 3o-M-y",7O:"D, d M y",7N:"D, d M 2V",7M:"D, d M 2V",7L:"D, d M y",7K:"@",7J:"2V-4z-3o",2d:n(X,h,u){k(!h){q""}c 1t=(u?u.1t:r)||b.1z.1t;c 1o=(u?u.1o:r)||b.1z.1o;c 1P=(u?u.1P:r)||b.1z.1P;c 1g=(u?u.1g:r)||b.1z.1g;c 1G=n(1l){c 1y=(T+1<X.1a&&X.18(T+1)==1l);k(1y){T++}q 1y};c 5s=n(1l,E){q(1G(1l)&&E<10?"0":"")+E};c 5r=n(1l,E,4x,4y){q(1G(1l)?4y[E]:4x[E])};c 1V="";c 1F=F;k(h){1m(c T=0;T<X.1a;T++){k(1F){k(X.18(T)=="\'"&&!1G("\'")){1F=F}N{1V+=X.18(T)}}N{3U(X.18(T)){B"d":1V+=5s("d",h.U());L;B"D":1V+=5r("D",h.3e(),1t,1o);L;B"m":1V+=5s("m",h.16()+1);L;B"M":1V+=5r("M",h.16(),1P,1g);L;B"y":1V+=(1G("y")?h.Q():(h.6L()%2O<10?"0":"")+h.6L()%2O);L;B"@":1V+=h.1R();L;B"\'":k(1G("\'")){1V+="\'"}N{1F=1i}L;3V:1V+=X.18(T)}}}}q 1V},6K:n(X){c 2n="";c 1F=F;1m(c T=0;T<X.1a;T++){k(1F){k(X.18(T)=="\'"&&!1G("\'")){1F=F}N{2n+=X.18(T)}}N{3U(X.18(T)){B"d":B"m":B"y":B"@":2n+="7I";L;B"D":B"M":q r;B"\'":k(1G("\'")){2n+="\'"}N{1F=1i}L;3V:2n+=X.18(T)}}}q 2n},l:n(8,1e){q 8.u[1e]!==4U?8.u[1e]:b.1z[1e]},5q:n(8){c 2L=b.l(8,"2L");c 2D=8.p?8.p.3n().6b(b.l(8,"3T")):r;8.1T=8.22=8.17=r;c h=2C=b.5n(8);k(2D.1a>0){c u=b.1Z(8);k(2D.1a>1){h=b.5p(2L,2D[1],u)||2C;8.1T=h.U();8.22=h.16();8.17=h.Q()}6J{h=b.5p(2L,2D[0],u)||2C}6I(e){b.5o(e);h=2C}}8.1s=h.U();8.H=8.1r=h.16();8.K=8.1B=h.Q();8.1f=(2D[0]?h.U():0);8.1q=(2D[0]?h.16():0);8.1n=(2D[0]?h.Q():0);b.4g(8)},5n:n(8){c h=b.3F(b.l(8,"2C"),v z());c O=b.2e(8,"2f",1i);c S=b.2e(8,"2t");h=(O&&h<O?O:h);h=(S&&h>S?S:h);q h},3F:n(h,2C){c 6F=n(P){c h=v z();h.6o(h.6n()+P);q h};c 6G=n(P,5m){c h=v z();c A=h.Q();c C=h.16();c G=h.U();c 5l=/([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;c 1y=5l.6H(P);3S(1y){3U(1y[2]||"d"){B"d":B"D":G+=(1y[1]-0);L;B"w":B"W":G+=(1y[1]*7);L;B"m":B"M":C+=(1y[1]-0);G=1Q.2f(G,5m(A,C));L;B"y":B"Y":A+=(1y[1]-0);G=1Q.2f(G,5m(A,C));L}1y=5l.6H(P)}q v z(A,C,G)};q(h==r?2C:(1O h=="3B"?6G(h,b.3E):(1O h=="4X"?6F(h):h)))},5k:n(8,h,1S){c 2v=!(h);h=b.3F(h,v z());8.1s=8.1f=h.U();8.H=8.1r=8.1q=h.16();8.K=8.1B=8.1n=h.Q();k(b.l(8,"1E")){k(1S){1S=b.3F(1S,r);8.1T=1S.U();8.22=1S.16();8.17=1S.Q()}N{8.1T=8.1f;8.22=8.1q;8.17=8.1n}}b.4g(8);k(8.p){8.p.3n(2v?"":b.2M(8)+(!b.l(8,"1E")?"":b.l(8,"3T")+b.2M(8,8.1T,8.22,8.17)))}},4w:n(8){c 5j=(!8.1n||(8.p&&8.p.3n()=="")?r:v z(8.1n,8.1q,8.1f));k(b.l(8,"1E")){q[8.1h||5j,(!8.17?r:v z(8.17,8.22,8.1T))]}N{q 5j}},6E:n(8){c 2k=v z();2k=v z(2k.Q(),2k.16(),2k.U());c 1j=b.l(8,"1j");c 1D=b.l(8,"1D");c 2v=(b.l(8,"5i")?"":\'<I V="t-f-2v"><a 2h="Z.f.5h(\\\'#\'+8.x+"\');\\""+(1j?b.2g(8,b.l(8,"6D")||"&#1u;"):"")+">"+b.l(8,"6C")+"</a></I>");c 58=\'<I V="t-f-7H">\'+(1D?"":2v)+\'<I V="t-f-7G"><a 2h="Z.f.2B();"\'+(1j?b.2g(8,b.l(8,"6B")||"&#1u;"):"")+">"+b.l(8,"6A")+"</a></I>"+(1D?2v:"")+"</I>";c 3l=b.l(8,"3l");c 3G=b.l(8,"3G");c 3Q=b.l(8,"3Q");c 3m=b.l(8,"3m");c 1b=b.3d(8);c 2m=b.l(8,"2m");c 6q=(1b[0]!=1||1b[1]!=1);c 4p=(!8.1f?v z(7F,9,9):v z(8.1n,8.1q,8.1f));c O=b.2e(8,"2f",1i);c S=b.2e(8,"2t");c H=8.H;c K=8.K;k(S){c 3R=v z(S.Q(),S.16()-1b[1]+1,S.U());3R=(O&&3R<O?O:3R);3S(v z(K,H,1)>3R){H--;k(H<0){H=11;K--}}}c 2A=b.l(8,"2A");2A=(!3m?2A:b.2d(2A,v z(K,H-2m,1),b.1Z(8)));c 4t=\'<I V="t-f-4t">\'+(b.4W(8,-1,K,H)?"<a 2h=\\"Z.f.1U(\'#"+8.x+"\', -"+2m+", \'M\');\\""+(1j?b.2g(8,b.l(8,"6z")||"&#1u;"):"")+">"+2A+"</a>":(3Q?"":"<4v>"+2A+"</4v>"))+"</I>";c 2z=b.l(8,"2z");2z=(!3m?2z:b.2d(2z,v z(K,H+2m,1),b.1Z(8)));c 3P=\'<I V="t-f-3P">\'+(b.4W(8,+1,K,H)?"<a 2h=\\"Z.f.1U(\'#"+8.x+"\', +"+2m+", \'M\');\\""+(1j?b.2g(8,b.l(8,"6y")||"&#1u;"):"")+">"+2z+"</a>":(3Q?"":"<4v>"+2z+"</4v>"))+"</I>";c 2U=b.l(8,"2U");2U=(!3m?2U:b.2d(2U,2k,b.1Z(8)));c R=(3l?\'<I V="\'+b.5g+\'">\'+3l+"</I>":"")+(3G&&!8.1v?58:"")+\'<I V="t-f-7E">\'+(1D?3P:4t)+(b.4V(8,(b.l(8,"5f")&&8.1f?4p:2k))?\'<I V="t-f-4u"><a 2h="Z.f.5e(\\\'#\'+8.x+"\');\\""+(1j?b.2g(8,b.l(8,"6x")||"&#1u;"):"")+">"+2U+"</a></I>":"")+(1D?4t:3P)+"</I>";c 1x=b.l(8,"1x");c 3M=b.l(8,"3M");c 1o=b.l(8,"1o");c 1t=b.l(8,"1t");c 4r=b.l(8,"4r");c 1g=b.l(8,"1g");c 3K=b.l(8,"3K");c 3g=b.l(8,"3g");c 2w=b.l(8,"2w");c 3L=b.l(8,"3L");c 4q=b.l(8,"4q")||b.3O;c 21=(1j?b.l(8,"4s")||"&#1u;":"");c 2S=b.l(8,"6w")||b.2S;c 1S=8.1T?v z(8.17,8.22,8.1T):4p;1m(c 2T=0;2T<1b[0];2T++){1m(c 3j=0;3j<1b[1];3j++){c 3f=v z(K,H,8.1s);R+=\'<I V="t-f-7D-C\'+(3j==0?" t-f-v-2T":"")+\'">\'+b.6i(8,H,K,O,S,3f,2T>0||3j>0,1j,1g)+\'<6l V="t-f" 7C="0" 7B="0"><6r><4m V="t-f-3J-2T">\'+(3L?"<1w>"+b.l(8,"6v")+"</1w>":"");1m(c 2l=0;2l<7;2l++){c G=(2l+1x)%7;c 4s=(21.6u("3N")>-1?21.6t(/3N/,1o[G]):21.6t(/D/,1t[G]));R+="<1w"+((2l+1x+6)%7>=5?\' V="t-f-2y-3i-2R"\':"")+">"+(!3M?"<3k":"<a 2h=\\"Z.f.6s(\'#"+8.x+"\', "+G+\');"\')+(1j?b.2g(8,4s):"")+\' 3J="\'+1o[G]+\'">\'+4r[G]+(3M?"</a>":"</3k>")+"</1w>"}R+="</4m></6r><6m>";c 5c=b.3E(K,H);k(K==8.1B&&H==8.1r){8.1s=1Q.2f(8.1s,5c)}c 5d=(b.64(K,H)-1x+7)%7;c 1k=v z(K,H,1-5d);c 6p=(6q?6:1Q.7A((5d+5c)/7));1m(c 5b=0;5b<6p;5b++){R+=\'<4m V="t-f-3h-2T">\'+(3L?\'<1w V="t-f-2y-3j">\'+4q(1k)+"</1w>":"");1m(c 2l=0;2l<7;2l++){c 3I=(3K?3K.2b((8.p?8.p[0]:r),[1k]):[1i,""]);c 2i=(1k.16()!=H);c 3H=2i||!3I[0]||(O&&1k<O)||(S&&1k>S);R+=\'<1w V="t-f-3h-2R\'+((2l+1x+6)%7>=5?" t-f-2y-3i-2R":"")+(2i?" t-f-2i":"")+(1k.1R()==3f.1R()&&H==8.1r?" t-f-3h-2R-2x":"")+(3H?" "+b.5a:"")+(2i&&!2w?"":" "+3I[1]+(1k.1R()>=4p.1R()&&1k.1R()<=1S.1R()?" "+b.4o:"")+(1k.1R()==2k.1R()?" t-f-2k":""))+\'"\'+((!2i||2w)&&3I[2]?\' 3J="\'+3I[2]+\'"\':"")+(3H?(3g?" 51=\\"Z(b).4n().2j(\'t-f-2y-2x\');\\" 4Z=\\"Z(b).4n().2Q(\'t-f-2y-2x\');\\"":""):" 51=\\"Z(b).2j(\'t-f-3h-2R-2x\')"+(3g?".4n().2j(\'t-f-2y-2x\')":"")+";"+(!1j||(2i&&!2w)?"":"Z(\'#t-f-21-"+8.x+"\').R(\'"+(2S.2b((8.p?8.p[0]:r),[1k,8])||"&#1u;")+"\');")+"\\" 4Z=\\"Z(b).2Q(\'t-f-3h-2R-2x\')"+(3g?".4n().2Q(\'t-f-2y-2x\')":"")+";"+(!1j||(2i&&!2w)?"":"Z(\'#t-f-21-"+8.x+"\').R(\'&#1u;\');")+\'" 2h="Z.f.59(\\\'#\'+8.x+"\',"+H+","+K+\', b);"\')+">"+(2i?(2w?1k.U():"&#1u;"):(3H?1k.U():"<a>"+1k.U()+"</a>"))+"</1w>";1k.6o(1k.6n()+1)}R+="</4m>"}H++;k(H>11){H=0;K++}R+="</6m></6l></I>"}}R+=(1j?\'<I 4l="2v: 4k;"></I><I x="t-f-21-\'+8.x+\'" V="t-f-21">\'+(b.l(8,"6k")||"&#1u;")+"</I>":"")+(!3G&&!8.1v?58:"")+\'<I 4l="2v: 4k;"></I>\'+($.2c.57&&2N($.2c.6j)<7&&!8.1v?\'<4j 56="7z:F;" V="t-f-55"></4j>\':"");q R},6i:n(8,H,K,O,S,3f,54,1j,1g){O=(8.1h&&O&&3f<O?3f:O);c R=\'<I V="t-f-7y">\';k(54||!b.l(8,"6h")){R+=1g[H]+"&#1u;"}N{c 6f=(O&&O.Q()==K);c 6e=(S&&S.Q()==K);R+=\'<2P V="t-f-v-C" 6a="Z.f.53(\\\'#\'+8.x+"\', b, \'M\');\\" 2h=\\"Z.f.52(\'#"+8.x+"\');\\""+(1j?b.2g(8,b.l(8,"6g")||"&#1u;"):"")+">";1m(c C=0;C<12;C++){k((!6f||C>=O.16())&&(!6e||C<=S.16())){R+=\'<4h E="\'+C+\'"\'+(C==H?\' 4i="4i"\':"")+">"+1g[C]+"</4h>"}}R+="</2P>"}k(54||!b.l(8,"6d")){R+=K}N{c 2u=b.l(8,"6c").6b(":");c A=0;c 17=0;k(2u.1a!=2){A=K-10;17=K+10}N{k(2u[0].18(0)=="+"||2u[0].18(0)=="-"){A=17=v z().Q();A+=2N(2u[0],10);17+=2N(2u[1],10)}N{A=2N(2u[0],10);17=2N(2u[1],10)}}A=(O?1Q.2t(A,O.Q()):A);17=(S?1Q.2f(17,S.Q()):17);R+=\'<2P V="t-f-v-A" 6a="Z.f.53(\\\'#\'+8.x+"\', b, \'Y\');\\" 2h=\\"Z.f.52(\'#"+8.x+"\');\\""+(1j?b.2g(8,b.l(8,"69")||"&#1u;"):"")+">";1m(;A<=17;A++){R+=\'<4h E="\'+A+\'"\'+(A==K?\' 4i="4i"\':"")+">"+A+"</4h>"}R+="</2P>"}R+="</I>";q R},2g:n(8,50){q" 51=\\"Z(\'#t-f-21-"+8.x+"\').R(\'"+50+"\');\\" 4Z=\\"Z(\'#t-f-21-"+8.x+"\').R(\'&#1u;\');\\""},4g:n(8,P,20){c A=8.K+(20=="Y"?P:0);c C=8.H+(20=="M"?P:0);c G=1Q.2f(8.1s,b.3E(A,C))+(20=="D"?P:0);c h=v z(A,C,G);c O=b.2e(8,"2f",1i);c S=b.2e(8,"2t");h=(O&&h<O?O:h);h=(S&&h>S?S:h);8.1s=h.U();8.H=8.1r=h.16();8.K=8.1B=h.Q();k(20=="M"||20=="Y"){b.4f(8)}},4f:n(8){c 4Y=b.l(8,"68");k(4Y){4Y.2b((8.p?8.p[0]:r),[v z(8.1B,8.1r,1),8])}},3d:n(8){c 1b=b.l(8,"67");q(1b==r?[1,1]:(1O 1b=="4X"?[1,1b]:1b))},2e:n(8,66,65){c h=b.3F(b.l(8,66+"z"),r);k(h){h.7x(0);h.7w(0);h.7v(0);h.7u(0)}q(!65||!8.1h?h:(!h||8.1h>h?8.1h:h))},3E:n(A,C){q 32-v z(A,C,32).U()},64:n(A,C){q v z(A,C,1).3e()},4W:n(8,P,63,62){c 1b=b.3d(8);c h=v z(63,62+(P<0?P:1b[1]),1);k(P<0){h.4e(b.3E(h.Q(),h.16()))}q b.4V(8,h)},4V:n(8,h){c 3c=(!8.1h?r:v z(8.1B,8.1r,8.1s));3c=(3c&&8.1h<3c?8.1h:3c);c O=3c||b.2e(8,"2f");c S=b.2e(8,"2t");q((!O||h>=O)&&(!S||h<=S))},1Z:n(8){c 1C=b.l(8,"1C");1C=(1O 1C!="3B"?1C:v z().Q()%2O+2N(1C,10));q{1C:1C,1t:b.l(8,"1t"),1o:b.l(8,"1o"),1P:b.l(8,"1P"),1g:b.l(8,"1g")}},2M:n(8,G,C,A){k(!G){8.1f=8.1s;8.1q=8.1r;8.1n=8.1B}c h=(G?(1O G=="4c"?G:v z(A,C,G)):v z(8.1n,8.1q,8.1f));q b.2d(b.l(8,"2L"),h,b.1Z(8))}});n 3D(o,3b){$.4d(o,3b);1m(c 1e 61 3b){k(3b[1e]==r||3b[1e]==4U){o[1e]=3b[1e]}}q o}n 5Z(a){q(a&&(($.2c.7t&&1O a=="4c"&&a.1a)||(a.5Y&&a.5Y.5X().1l(/\\5W\\(\\)/))))}$.7s.f=n(2a){c 4S=5W.5V.7r.7q(4T,1);k(1O 2a=="3B"&&(2a=="7p"||2a=="U")){q $.f["5U"+2a+"3A"].2b($.f,[b[0]].5T(4S))}q b.3C(n(){1O 2a=="3B"?$.f["5U"+2a+"3A"].2b($.f,[b].5T(4S)):$.f.5S(b,2a)})};$.f=v 3A();$(15).7o(n(){$(15.29).3a($.f.J).7n($.f.5R)})})(Z)',62,598,'||||||||inst|||this|var|||datepicker||date|||if|_get||function|target|input|return|null||ui|settings|new||id||Date|year|case|month||value|false|day|drawMonth|div|dpDiv|drawYear|break||else|minDate|offset|getFullYear|html|maxDate|iFormat|getDate|class||format||jQuery||||||document|getMonth|endYear|charAt|PROP_NAME|length|numMonths|duration|data|name|currentDay|monthNames|rangeStart|true|showStatus|printDate|match|for|currentYear|dayNames|isFixed|currentMonth|selectedMonth|selectedDay|dayNamesShort|xa0|inline|td|firstDay|matches|_defaults|checkDate|selectedYear|shortYearCutoff|isRTL|rangeSelect|literal|lookAhead|_pos|iValue|dateStr|showAnim|documentElement|width|ctrlKey|typeof|monthNamesShort|Math|getTime|endDate|endDay|_adjustDate|output|position|top|nodeName|_getFormatConfig|period|status|endMonth|size|_updateDatepicker|css|_dialogInput|||body|options|apply|browser|formatDate|_getMinMaxDate|min|_addStatus|onclick|otherMonth|addClass|today|dow|stepMonths|chars|_stayOpen|_triggerClass|left|pos|_disabledInputs|max|years|clear|showOtherMonths|over|week|nextText|prevText|_hideDatepicker|defaultDate|dates|focus|onSelect|_inDialog|markerClassName|height|key|buttonText|dateFormat|_formatDate|parseInt|100|select|removeClass|cell|dateStatus|row|currentText|yy|_datepickerShowing|postProcess|obj|scrollY|scrollX|showOn|||||||||append|props|newMinDate|_getNumberOfMonths|getDay|selectedDate|highlightWeek|days|end|col|span|prompt|navigationAsDateFormat|val|dd|firstMon|altFormat|_lastInput|event|scrollTop|scrollLeft|_showDatepicker|siblings|button|buttonImage|inlineSettings|Datepicker|string|each|extendRemove|_getDaysInMonth|_determineDate|closeAtTop|unselectable|daySettings|title|beforeShowDay|showWeeks|changeFirstDay|DD|iso8601Week|next|hideIfNoPrevNext|maxDraw|while|rangeSeparator|switch|default|throw|getNumber|names|altField||trigger|hasClass|blockUI|_curInst|remove|onClose|type|beforeShow|appendText|the|Show|object|extend|setDate|_notifyChange|_adjustInstDate|option|selected|iframe|both|style|tr|parent|_currentClass|currentDate|calculateWeek|dayNamesMin|dayStatus|prev|current|label|_getDate|shortNames|longNames|mm|checkLiteral|num|_selectDate|_selectingMonthYear|unbind|absolute|effects|browserHeight|browserWidth|window|px|handled|_doKeyDown|img|disabled|bind|attrValue|attrName|otherArgs|arguments|undefined|_isInRange|_canAdjustMonth|number|onChange|onmouseout|text|onmouseover|_clickMonthYear|_selectMonthYear|secondary|cover|src|msie|controls|_selectDay|_unselectableClass|dRow|daysInMonth|leadDays|_gotoToday|gotoCurrent|_promptClass|_clearDate|mandatory|startDate|_setDate|pattern|getDaysInMonth|_getDefaultDate|log|parseDate|_setDateFromField|formatName|formatNumber|getName|at|origSize|_mainDivId|_dialogClass|_tidyDialog|hide|showOptions|hidden|_findPos|opera|clientHeight|clientWidth|dims|show|display|toLowerCase|chr|keyCode|_doKeyPress|keydown|_appendClass|_newInst|regional|_checkExternalClick|_attachDatepicker|concat|_|prototype|Array|toString|constructor|isArray||in|curMonth|curYear|_getFirstDayOfMonth|checkRange|minMax|numberOfMonths|onChangeMonthYear|yearStatus|onchange|split|yearRange|changeYear|inMaxYear|inMinYear|monthStatus|changeMonth|_generateMonthYearHeader|version|initStatus|table|tbody|getUTCDate|setUTCDate|numRows|isMultiMonth|thead|_changeFirstDay|replace|indexOf|weekHeader|statusForDate|currentStatus|nextStatus|prevStatus|closeText|closeStatus|clearText|clearStatus|_generateDatepicker|offsetNumeric|offsetString|exec|catch|try|_possibleChars|getYear|Invalid|iInit|_updateAlternate|change|parents|100px|innerHeight|innerWidth|_checkOffset|Class|add|empty|none|fixed|_isDisabledDatepicker|charCode|map|cursor|opacity|keypress|dateText|_dialogInst|dp|getData|setData|_inlineDatepicker|after|before|alt|attr|buttonImageOnly|_connectDatepicker|debug|Select|different|May|Close|mousedown|ready|isDisabled|call|slice|fn|safari|setMilliseconds|setSeconds|setMinutes|setHours|header|javascript|ceil|cellspacing|cellpadding|one|links|9999|close|control|0123456789|W3C|TIMESTAMP|RSS|RFC_2822|RFC_1123|RFC_1036|RFC_850|RFC_822|ISO_8601|COOKIE|ATOM|Unexpected|Unknown|Missing|86400000|floor|getTimezoneOffset|noWeekends|selectedIndex|unblockUI|fadeOut|fadeIn|slideUp|slideDown|nextSibling|nodeType|rtl|multi|find|static|offsetWidth|1000px|block|offsetHeight|parentNode|fromCharCode|String|stopPropagation|preventDefault|_getDateDatepicker|_setDateDatepicker|_changeDatepicker|_disableDatepicker|_enableDatepicker|removeData|_destroyDatepicker|150|pageY|pageX|_dialogDatepicker|_inlineShow|click|err|eval|getAttribute|setDefaults|console|hasDatepicker|normal|first|as|Set|Sa|Fr|Th|We|Tu|Mo|Su|Sat|Fri|Thu|Wed|Tue|Mon|Sun|Saturday|Friday|Thursday|Wednesday|Tuesday|Monday|Sunday|of|Week|weekStatus|Wk|Dec|Nov|Oct|Sep|Aug|Jul|Jun|Apr|Mar|Feb|Jan|December|November|October|September|August|July|June|April|March|February|January|Today|x3e|Next|previous|Prev|x3c|without|Erase|Clear|dialog'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/ui.droppable.js b/wp-content/themes/vanilla/js/jquery/ui.droppable.js
new file mode 100755
index 0000000000000000000000000000000000000000..8be10d8bb5f7b3c39fcc1b48163d3d08efb1f426
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/ui.droppable.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(8(A){A.1P("4.c",{1O:8(){3.5.Z("4-c");3.e=0;3.k=1;9 C=3.6,B=C.g;C=A.13(C,{g:C.g&&C.g.1N==1M?C.g:8(D){a A(D).1L(B)}});3.V={u:3.5[0].1a,t:3.5[0].19};A.4.d.s.1K(3)},1J:{},4:8(B){a{1e:(B.h||B.5),1f:B.1f,l:B.l,1I:B.n,6:3.6,5:3.5}},1H:8(){9 B=A.4.d.s;1c(9 C=0;C<B.10;C++){7(B[C]==3){B.1G(C,1)}}3.5.M("4-c 4-c-r").1F("c").1E(".c")},p:8(C){9 B=A.4.d.v;7(!B||(B.h||B.5)[0]==3.5[0]){a}7(3.6.g.b(3.5,(B.h||B.5))){A.4.m.b(3,"p",[C,3.4(B)]);3.5.R("1D",[C,3.4(B)],3.6.p)}},o:8(C){9 B=A.4.d.v;7(!B||(B.h||B.5)[0]==3.5[0]){a}7(3.6.g.b(3.5,(B.h||B.5))){A.4.m.b(3,"o",[C,3.4(B)]);3.5.R("1C",[C,3.4(B)],3.6.o)}},j:8(D,C){9 B=C||A.4.d.v;7(!B||(B.h||B.5)[0]==3.5[0]){a i}9 E=i;3.5.1B(".4-c").1A(".4-1e-1z").12(8(){9 F=A.16(3,"c");7(F.6.17&&A.4.q(B,A.13(F,{f:F.5.f()}),F.6.U)){E=1d;a i}});7(E){a i}7(3.6.g.b(3.5,(B.h||B.5))){A.4.m.b(3,"j",[D,3.4(B)]);3.5.R("j",[D,3.4(B)],3.6.j);a 1d}a i},O:8(C){9 B=A.4.d.v;A.4.m.b(3,"O",[C,3.4(B)]);7(B){3.5.R("1y",[C,3.4(B)],3.6.O)}},N:8(C){9 B=A.4.d.v;A.4.m.b(3,"N",[C,3.4(B)]);7(B){3.5.R("1x",[C,3.4(B)],3.6.N)}}});A.13(A.4.c,{1w:{r:i,U:"q"}});A.4.q=8(L,F,J){7(!F.f){a i}9 D=(L.n||L.l.x).y,C=D+L.z.u,I=(L.n||L.l.x).w,H=I+L.z.t;9 E=F.f.y,B=E+F.V.u,K=F.f.w,G=K+F.V.t;1v(J){W"1u":a(E<D&&C<B&&K<I&&H<G);Q;W"q":a(E<D+(L.z.u/2)&&C-(L.z.u/2)<B&&K<I+(L.z.t/2)&&H-(L.z.t/2)<G);Q;W"1t":a(E<((L.n||L.l.x).y+(L.Y||L.f.X).y)&&((L.n||L.l.x).y+(L.Y||L.f.X).y)<B&&K<((L.n||L.l.x).w+(L.Y||L.f.X).w)&&((L.n||L.l.x).w+(L.Y||L.f.X).w)<G);Q;W"1s":a((I>=K&&I<=G)||(H>=K&&H<=G)||(I<K&&H>G))&&((D>=E&&D<=B)||(C>=E&&C<=B)||(D<E&&C>B));Q;1r:a i;Q}};A.4.d={v:11,s:[],18:8(D,F){9 B=A.4.d.s;9 E=F?F.1q:11;1c(9 C=0;C<B.10;C++){7(B[C].6.r||(D&&!B[C].6.g.b(B[C].5,(D.h||D.5)))){1b}B[C].P=B[C].5.1p("1o")!="1n";7(!B[C].P){1b}B[C].f=B[C].5.f();B[C].V={u:B[C].5[0].1a,t:B[C].5[0].19};7(E=="1m"||E=="1l"){B[C].O.b(B[C],F)}}},j:8(B,C){9 D=i;A.12(A.4.d.s,8(){7(!3.6){a}7(!3.6.r&&3.P&&A.4.q(B,3,3.6.U)){D=3.j.b(3,C)}7(!3.6.r&&3.P&&3.6.g.b(3.5,(B.h||B.5))){3.k=1;3.e=0;3.N.b(3,C)}});a D},1k:8(B,C){7(B.6.1j){A.4.d.18(B,C)}A.12(A.4.d.s,8(){7(3.6.r||3.15||!3.P){a}9 E=A.4.q(B,3,3.6.U);9 G=!E&&3.e==1?"k":(E&&3.e==0?"e":11);7(!G){a}9 F;7(3.6.17){9 D=3.5.1i(".4-c:1h(0)");7(D.10){F=A.16(D[0],"c");F.15=(G=="e"?1:0)}}7(F&&G=="e"){F["e"]=0;F["k"]=1;F.o.b(F,C)}3[G]=1;3[G=="k"?"e":"k"]=0;3[G=="e"?"p":"o"].b(3,C);7(F&&G=="k"){F["k"]=0;F["e"]=1;F.p.b(F,C)}})}};A.4.m.14("c","T",{O:8(C,B){A(3).Z(B.6.T)},N:8(C,B){A(3).M(B.6.T)},j:8(C,B){A(3).M(B.6.T)}});A.4.m.14("c","S",{p:8(C,B){A(3).Z(B.6.S)},o:8(C,B){A(3).M(B.6.S)},j:8(C,B){A(3).M(B.6.S)}})})(1g)',62,114,'|||this|ui|element|options|if|function|var|return|call|droppable|ddmanager|isover|offset|accept|currentItem|false|drop|isout|position|plugin|positionAbs|out|over|intersect|disabled|droppables|height|width|current|top|absolute|left|helperProportions|||||||||||||removeClass|deactivate|activate|visible|break|triggerHandler|hoverClass|activeClass|tolerance|proportions|case|click|clickOffset|addClass|length|null|each|extend|add|greedyChild|data|greedy|prepareOffsets|offsetHeight|offsetWidth|continue|for|true|draggable|helper|jQuery|eq|parents|refreshPositions|drag|sortactivate|dragstart|none|display|css|type|default|touch|pointer|fit|switch|defaults|dropdeactivate|dropactivate|dragging|not|find|dropout|dropover|unbind|removeData|splice|destroy|absolutePosition|plugins|push|is|Function|constructor|init|widget'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/ui.selectable.js b/wp-content/themes/vanilla/js/jquery/ui.selectable.js
new file mode 100755
index 0000000000000000000000000000000000000000..5ae888d71fd416b9f296330c664984fdd20b3409
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/ui.selectable.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(d(A){A.1M("4.5",A.V({},A.4.1L,{1K:d(){8 B=2;2.3.h("4-5");2.v=b;8 C;2.Q=d(){C=A(B.9.q,B.3[0]);C.o(d(){8 D=A(2);8 E=D.1J();A.n(2,"5-m",{3:2,$3:D,k:E.k,j:E.j,L:E.k+D.N(),y:E.j+D.M(),i:b,a:D.R("4-a"),c:D.R("4-c"),6:D.R("4-6")})})};2.Q();2.s=C.h("4-1I");2.1H();2.p=A(1G.1F("1E")).O({1D:"1C 1B 1A"})},1z:d(){7(2.9.t){2.1y()}r{2.1x()}},1w:d(){2.3.f("4-5 4-5-t").1v("5").1u(".5");2.1t()},1s:d(E){8 C=2;2.P=[E.Y,E.X];7(2.9.t){l}8 D=2.9;2.s=A(D.q,2.3[0]);2.3.g("1r",[E,{"5":2.3[0],"9":D}],D.1q);A("U").1p(2.p);2.p.O({"z-1o":1n,"1m":"1l","k":E.1k,"j":E.1j,"N":0,"M":0});7(D.T){2.Q()}2.s.q(".4-a").o(d(){8 F=A.n(2,"5-m");F.i=e;7(!E.x){F.$3.f("4-a");F.a=b;F.$3.h("4-6");F.6=e;C.3.g("w",[E,{5:C.3[0],6:F.3,9:D}],D.6)}});8 B=b;A(E.1i).1h().1g().o(d(){7(A.n(2,"5-m")){B=e}});l 2.9.1f?!B:e},1e:d(I){8 C=2;2.v=e;7(2.9.t){l}8 E=2.9;8 D=2.P[0],H=2.P[1],B=I.Y,G=I.X;7(D>B){8 F=B;B=D;D=F}7(H>G){8 F=G;G=H;H=F}2.p.O({k:D,j:H,N:B-D,M:G-H});2.s.o(d(){8 J=A.n(2,"5-m");7(!J||J.3==C.3[0]){l}8 K=b;7(E.u=="S"){K=(!(J.k>B||J.L<D||J.j>G||J.y<H))}r{7(E.u=="1d"){K=(J.k>D&&J.L<B&&J.j>H&&J.y<G)}}7(K){7(J.a){J.$3.f("4-a");J.a=b}7(J.6){J.$3.f("4-6");J.6=b}7(!J.c){J.$3.h("4-c");J.c=e;C.3.g("1c",[I,{5:C.3[0],c:J.3,9:E}],E.c)}}r{7(J.c){7(I.x&&J.i){J.$3.f("4-c");J.c=b;J.$3.h("4-a");J.a=e}r{J.$3.f("4-c");J.c=b;7(J.i){J.$3.h("4-6");J.6=e}C.3.g("w",[I,{5:C.3[0],6:J.3,9:E}],E.6)}}7(J.a){7(!I.x&&!J.i){J.$3.f("4-a");J.a=b;J.$3.h("4-6");J.6=e;C.3.g("w",[I,{5:C.3[0],6:J.3,9:E}],E.6)}}}});l b},1b:d(D){8 B=2;2.v=b;8 C=2.9;A(".4-6",2.3[0]).o(d(){8 E=A.n(2,"5-m");E.$3.f("4-6");E.6=b;E.i=b;B.3.g("1a",[D,{5:B.3[0],W:E.3,9:C}],C.W)});A(".4-c",2.3[0]).o(d(){8 E=A.n(2,"5-m");E.$3.f("4-c").h("4-a");E.c=b;E.a=e;E.i=e;B.3.g("19",[D,{5:B.3[0],a:E.3,9:C}],C.a)});2.3.g("18",[D,{5:B.3[0],9:2.9}],2.9.17);2.p.16();l b}}));A.V(A.4.5,{15:{14:1,13:0,12:":11",10:"U",T:e,q:"*",u:"S"}})})(Z)',62,111,'||this|element|ui|selectable|unselecting|if|var|options|selected|false|selecting|function|true|removeClass|triggerHandler|addClass|startselected|top|left|return|item|data|each|helper|filter|else|selectees|disabled|tolerance|dragged|selectableunselecting|ctrlKey|bottom|||||||||||||right|height|width|css|opos|refresh|hasClass|touch|autoRefresh|body|extend|unselected|pageY|pageX|jQuery|appendTo|input|cancel|delay|distance|defaults|remove|stop|selectablestop|selectableselected|selectableunselected|mouseStop|selectableselecting|fit|mouseDrag|keyboard|andSelf|parents|target|clientY|clientX|absolute|position|100|index|append|start|selectablestart|mouseStart|mouseDestroy|unbind|removeData|destroy|disable|enable|toggle|black|dotted|1px|border|div|createElement|document|mouseInit|selectee|offset|init|mouse|widget'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/jquery/ui.slider.js b/wp-content/themes/vanilla/js/jquery/ui.slider.js
new file mode 100755
index 0000000000000000000000000000000000000000..432daa369a56ecddcf753bd639be93670934f0c0
--- /dev/null
+++ b/wp-content/themes/vanilla/js/jquery/ui.slider.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(6(A){A.25.1C=A.25.1C||6(B){c 3.18(6(){A(3).2J(B).2I(0).2H(3).1s()})};A.24("j.m",{2G:{},j:6(B){c{8:3.8,9:3.7,n:3.8.l!="2F"||!3.8.l?p.t(3.n(i,3.8.l=="w"?"y":"x")):{x:p.t(3.n(i,"x")),y:p.t(3.n(i,"y"))},1h:3.1K()}},M:6(C,B){A.j.2E.1k(3,C,[B,3.j()]);3.d.2D(C=="1a"?C:"1a"+C,[B,3.j()],3.8[C])},2C:6(){3.d.1R("j-m j-m-1r").2B("m").2A(".m");4(3.9&&3.9.11){3.9.1C("a");3.9.18(6(){A(3).U("P").2z()})}3.1B&&3.1B.1s()},23:6(B,C){A.24.22.23.1Z(3,2y);4(/k|s|X/.Q(B)){3.1y()}4(B=="1h"){C?3.9.11==2&&3.1u():3.1L()}},2x:6(){h B=3;3.d.1i("j-m");3.1y();3.9=A(3.8.9,3.d);4(!3.9.11){B.9=B.1B=A(B.8.1g||[0]).2w(6(){h D=A("<1t/>").1i("j-m-9").1M(B.d);4(3.1A){D.2v("1A",3.1A)}c D[0]})}h C=6(D){3.d=A(D);3.d.U("P",3);3.8=B.8;3.d.19("20",6(){4(B.7){3.1j(B.7)}B.O(3,1)});3.2u()};A.1W(C.22,A.j.P,{2t:6(D){c B.12.1k(B,D,3.d[0])},2s:6(D){c B.Z.1k(B,D,3.d[0])},2r:6(D){c B.1p.1k(B,D,3.d[0])},2q:6(){c N},1Y:6(D){3.2p(D)}});A(3.9).18(6(){2o C(3)}).2n(\'<a 2m="2l:2k(0)" 2j="2i:21;2h:21;"></a>\').1S().19("O",6(D){B.O(3.1z)}).19("1j",6(D){B.1j(3.1z)}).19("1x",6(D){4(!B.8.2g){B.1x(D.2f,3.1z)}});3.d.19("20.m",6(D){B.1P.1Z(B,[D]);B.7.U("P").1Y(D);B.1f=B.1f+1});A.18(3.8.1g||[],6(D,E){B.16(E.12,D,N)});4(!V(3.8.1X)){3.16(3.8.1X,0,N)}3.R=A(3.9[0]);4(3.9.11==2&&3.8.1h){3.1u()}},1y:6(){h B=3.d[0],C=3.8;3.S={J:3.d.1n(),z:3.d.1m()};A.1W(C,{l:C.l||(B.1N<B.1O?"w":"1l"),s:!V(b(C.s,10))?{x:b(C.s,10),y:b(C.s,10)}:({x:C.s&&C.s.x||1V,y:C.s&&C.s.y||1V}),k:!V(b(C.k,10))?{x:b(C.k,10),y:b(C.k,10)}:({x:C.k&&C.k.x||0,y:C.k&&C.k.y||0})});C.T={x:C.s.x-C.k.x,y:C.s.y-C.k.y};C.f={x:C.f&&C.f.x||b(C.f,10)||(C.X?C.T.x/(C.X.x||b(C.X,10)||C.T.x):0),y:C.f&&C.f.y||b(C.f,10)||(C.X?C.T.y/(C.X.y||b(C.X,10)||C.T.y):0)}},1x:6(C,B){4(/(1w|1v|1U|1T)/.Q(C)){3.16({x:/(1w|1U)/.Q(C)?(C==1w?"-":"+")+"="+3.17("x"):0,y:/(1v|1T)/.Q(C)?(C==1v?"-":"+")+"="+3.17("y"):0},B)}},O:6(B,C){3.7=A(B).1i("j-m-9-1Q");4(C){3.7.1S()[0].O()}},1j:6(B){A(B).1R("j-m-9-1Q");4(3.7&&3.7[0]==B){3.R=3.7;3.7=i}},1P:6(C){h D=[C.1d,C.1e];h B=Y;3.9.18(6(){4(3==C.2e){B=N}});4(B||3.8.1r||!(3.7||3.R)){c}4(!3.7&&3.R){3.O(3.R,N)}3.K=3.d.K();3.16({y:3.v(C.1e-3.K.e-3.7[0].1O/2,"y"),x:3.v(C.1d-3.K.g-3.7[0].1N/2,"x")},i,!3.8.1D)},1u:6(){4(3.u){c}3.u=A("<1t></1t>").1i("j-m-1h").o({2d:"2c"}).1M(3.d);3.1c()},1L:6(){3.u.1s();3.u=i},1c:6(){h C=3.8.l=="w"?"e":"g";h B=3.8.l=="w"?"z":"J";3.u.o(C,(b(A(3.9[0]).o(C),10)||0)+3.W(0,3.8.l=="w"?"y":"x")/2);3.u.o(B,(b(A(3.9[1]).o(C),10)||0)-(b(A(3.9[0]).o(C),10)||0))},1K:6(){c 3.u?3.v(b(3.u.o(3.8.l=="w"?"z":"J"),10),3.8.l=="w"?"y":"x"):i},1J:6(){c 3.9.2b(3.7[0])},n:6(D,B){4(3.9.11==1){3.7=3.9}4(!B){B=3.8.l=="w"?"y":"x"}h C=A(D!=r&&D!==i?3.9[D]||D:3.7);4(C.U("P").1b){c b(C.U("P").1b[B],10)}15{c b(((b(C.o(B=="x"?"g":"e"),10)/(3.S[B=="x"?"J":"z"]-3.W(D,B)))*3.8.T[B])+3.8.k[B],10)}},v:6(C,B){c 3.8.k[B]+(C/(3.S[B=="x"?"J":"z"]-3.W(i,B)))*3.8.T[B]},q:6(C,B){c((C-3.8.k[B])/3.8.T[B])*(3.S[B=="x"?"J":"z"]-3.W(i,B))},13:6(D,B){4(3.u){4(3.7[0]==3.9[0]&&D>=3.q(3.n(1),B)){D=3.q(3.n(1,B)-3.17(B),B)}4(3.7[0]==3.9[1]&&D<=3.q(3.n(0),B)){D=3.q(3.n(0,B)+3.17(B),B)}}4(3.8.1g){h C=3.8.1g[3.1J()];4(D<3.q(C.k,B)){D=3.q(C.k,B)}15{4(D>3.q(C.s,B)){D=3.q(C.s,B)}}}c D},14:6(C,B){4(C>=3.S[B=="x"?"J":"z"]-3.W(i,B)){C=3.S[B=="x"?"J":"z"]-3.W(i,B)}4(C<=0){C=0}c C},W:6(C,B){c A(C!=r&&C!==i?3.9[C]:3.7)[0]["K"+(B=="x"?"2a":"29")]},17:6(B){c 3.8.f[B]||1},12:6(C,B){h D=3.8;4(D.1r){c Y}3.S={J:3.d.1n(),z:3.d.1m()};4(!3.7){3.O(3.R,N)}3.K=3.d.K();3.1q=3.7.K();3.1o={e:C.1e-3.1q.e,g:C.1d-3.1q.g};3.1f=3.n();3.M("12",C);3.1p(C,B);c N},Z:6(B){3.M("Z",B);4(3.1f!=3.n()){3.M("1E",B)}3.O(3.7,N);c Y},1p:6(E,D){h F=3.8;h B={e:E.1e-3.K.e-3.1o.e,g:E.1d-3.K.g-3.1o.g};4(!3.7){3.O(3.R,N)}B.g=3.14(B.g,"x");B.e=3.14(B.e,"y");4(F.f.x){h C=3.v(B.g,"x");C=p.t(C/F.f.x)*F.f.x;B.g=3.q(C,"x")}4(F.f.y){h C=3.v(B.e,"y");C=p.t(C/F.f.y)*F.f.y;B.e=3.q(C,"y")}B.g=3.13(B.g,"x");B.e=3.13(B.e,"y");4(F.l!="w"){3.7.o({g:B.g})}4(F.l!="1l"){3.7.o({e:B.e})}3.7.U("P").1b={x:p.t(3.v(B.g,"x"))||0,y:p.t(3.v(B.e,"y"))||0};4(3.u){3.1c()}3.M("1a",E);c Y},16:6(F,E,G){h H=3.8;3.S={J:3.d.1n(),z:3.d.1m()};4(E==r&&!3.7&&3.9.11!=1){c Y}4(E==r&&!3.7){E=0}4(E!=r){3.7=3.R=A(3.9[E]||E)}4(F.x!==r&&F.y!==r){h B=F.x,I=F.y}15{h B=F,I=F}4(B!==r&&B.1I!=1H){h D=/^\\-\\=/.Q(B),C=/^\\+\\=/.Q(B);4(D||C){B=3.n(i,"x")+b(B.1G(D?"=":"+=",""),10)}15{B=V(b(B,10))?r:b(B,10)}}4(I!==r&&I.1I!=1H){h D=/^\\-\\=/.Q(I),C=/^\\+\\=/.Q(I);4(D||C){I=3.n(i,"y")+b(I.1G(D?"=":"+=",""),10)}15{I=V(b(I,10))?r:b(I,10)}}4(H.l!="w"&&B!==r){4(H.f.x){B=p.t(B/H.f.x)*H.f.x}B=3.q(B,"x");B=3.14(B,"x");B=3.13(B,"x");H.L?3.7.Z().L({g:B},(p.1F(b(3.7.o("g"))-B))*(!V(b(H.L))?H.L:5)):3.7.o({g:B})}4(H.l!="1l"&&I!==r){4(H.f.y){I=p.t(I/H.f.y)*H.f.y}I=3.q(I,"y");I=3.14(I,"y");I=3.13(I,"y");H.L?3.7.Z().L({e:I},(p.1F(b(3.7.o("e"))-I))*(!V(b(H.L))?H.L:5)):3.7.o({e:I})}4(3.u){3.1c()}3.7.U("P").1b={x:p.t(3.v(B,"x"))||0,y:p.t(3.v(I,"y"))||0};4(!G){3.M("12",i);3.M("Z",i);3.M("1E",i);3.M("1a",i)}}});A.j.m.28="n";A.j.m.27={9:".j-m-9",1D:1,L:Y}})(26)',62,170,'|||this|if||function|currentHandle|options|handle||parseInt|return|element|top|stepping|left|var|null|ui|min|axis|slider|value|css|Math|translateValue|undefined|max|round|rangeElement|convertValue|vertical|||height||||||||||width|offset|animate|propagate|true|focus|mouse|test|previousHandle|actualSize|realMax|data|isNaN|handleSize|steps|false|stop||length|start|translateRange|translateLimits|else|moveTo|oneStep|each|bind|slide|sliderValue|updateRange|pageX|pageY|firstValue|handles|range|addClass|blur|call|horizontal|outerHeight|outerWidth|clickOffset|drag|handleOffset|disabled|remove|div|createRange|38|37|keydown|initBoundaries|firstChild|id|generated|unwrap|distance|change|abs|replace|Number|constructor|handleIndex|getRange|removeRange|appendTo|offsetWidth|offsetHeight|click|active|removeClass|parent|40|39|100|extend|startValue|trigger|apply|mousedown|none|prototype|setData|widget|fn|jQuery|defaults|getter|Height|Width|index|absolute|position|target|keyCode|noKeyboard|border|outline|style|void|javascript|href|wrap|new|mouseDown|mouseCapture|mouseDrag|mouseStop|mouseStart|mouseInit|attr|map|init|arguments|mouseDestroy|unbind|removeData|destroy|triggerHandler|plugin|both|plugins|after|eq|parents'.split('|'),0,{}))
+
diff --git a/wp-content/themes/vanilla/js/mootools/mootools.htc b/wp-content/themes/vanilla/js/mootools/mootools.htc
new file mode 100755
index 0000000000000000000000000000000000000000..6147a58f1611ec7169308329abc9138d983186e5
--- /dev/null
+++ b/wp-content/themes/vanilla/js/mootools/mootools.htc
@@ -0,0 +1,341 @@
+//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
+
+var MooTools={version:"1.2.0",build:""};var Native=function(J){J=J||{};var F=J.afterImplement||function(){};var G=J.generics;G=(G!==false);var H=J.legacy;
+var E=J.initialize;var B=J.protect;var A=J.name;var C=E||H;C.constructor=Native;C.$family={name:"native"};if(H&&E){C.prototype=H.prototype;}C.prototype.constructor=C;
+if(A){var D=A.toLowerCase();C.prototype.$family={name:D};Native.typize(C,D);}var I=function(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=N;}if(G){Native.genericize(M,K,B);
+}F.call(M,K,N);return M;};C.implement=function(L,K,N){if(typeof L=="string"){return I(this,L,K,N);}for(var M in L){I(this,M,L[M],K);}return this;};C.alias=function(M,K,N){if(typeof M=="string"){M=this.prototype[M];
+if(M){I(this,K,M,N);}}else{for(var L in M){this.alias(L,M[L],K);}}return this;};return C;};Native.implement=function(D,C){for(var B=0,A=D.length;B<A;B++){D[B].implement(C);
+}};Native.genericize=function(B,C,A){if((!A||!B[C])&&typeof B.prototype[C]=="function"){B[C]=function(){var D=Array.prototype.slice.call(arguments);return B.prototype[C].apply(D.shift(),D);
+};}};Native.typize=function(A,B){if(!A.type){A.type=function(C){return($type(C)===B);};}};Native.alias=function(E,B,A,F){for(var D=0,C=E.length;D<C;D++){E[D].alias(B,A,F);
+}};(function(B){for(var A in B){Native.typize(B[A],A);}})({"boolean":Boolean,"native":Native,object:Object});(function(B){for(var A in B){new Native({name:A,initialize:B[A],protect:true});
+}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});(function(B,A){for(var C=A.length;C--;C){Native.genericize(B,A[C],true);
+}return arguments.callee;})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]);
+function $chk(A){return !!(A||A===0);}function $clear(A){clearTimeout(A);clearInterval(A);return null;}function $defined(A){return(A!=undefined);}function $empty(){}function $arguments(A){return function(){return arguments[A];
+};}function $lambda(A){return(typeof A=="function")?A:function(){return A;};}function $extend(C,A){for(var B in (A||{})){C[B]=A[B];}return C;}function $unlink(C){var B;
+switch($type(C)){case"object":B={};for(var E in C){B[E]=$unlink(C[E]);}break;case"hash":B=$unlink(C.getClean());break;case"array":B=[];for(var D=0,A=C.length;
+D<A;D++){B[D]=$unlink(C[D]);}break;default:return C;}return B;}function $merge(){var E={};for(var D=0,A=arguments.length;D<A;D++){var B=arguments[D];if($type(B)!="object"){continue;
+}for(var C in B){var G=B[C],F=E[C];E[C]=(F&&$type(G)=="object"&&$type(F)=="object")?$merge(F,G):$unlink(G);}}return E;}function $pick(){for(var B=0,A=arguments.length;
+B<A;B++){if(arguments[B]!=undefined){return arguments[B];}}return null;}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B);}function $splat(B){var A=$type(B);
+return(A)?((A!="array"&&A!="arguments")?[B]:B):[];}var $time=Date.now||function(){return new Date().getTime();};function $try(){for(var B=0,A=arguments.length;
+B<A;B++){try{return arguments[B]();}catch(C){}}return null;}function $type(A){if(A==undefined){return false;}if(A.$family){return(A.$family.name=="number"&&!isFinite(A))?false:A.$family.name;
+}if(A.nodeName){switch(A.nodeType){case 1:return"element";case 3:return(/\S/).test(A.nodeValue)?"textnode":"whitespace";}}else{if(typeof A.length=="number"){if(A.callee){return"arguments";
+}else{if(A.item){return"collection";}}}}return typeof A;}var Hash=new Native({name:"Hash",initialize:function(A){if($type(A)=="hash"){A=$unlink(A.getClean());
+}for(var B in A){this[B]=A[B];}return this;}});Hash.implement({getLength:function(){var B=0;for(var A in this){if(this.hasOwnProperty(A)){B++;}}return B;
+},forEach:function(B,C){for(var A in this){if(this.hasOwnProperty(A)){B.call(C,this[A],A,this);}}},getClean:function(){var B={};for(var A in this){if(this.hasOwnProperty(A)){B[A]=this[A];
+}}return B;}});Hash.alias("forEach","each");function $H(A){return new Hash(A);}Array.implement({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this);
+}}});Array.alias("forEach","each");function $A(C){if(C.item){var D=[];for(var B=0,A=C.length;B<A;B++){D[B]=C[B];}return D;}return Array.prototype.slice.call(C);
+}function $each(C,B,D){var A=$type(C);((A=="arguments"||A=="collection"||A=="array")?Array:Hash).each(C,B,D);}var Browser=new Hash({Engine:{name:"unknown",version:""},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});
+if(window.opera){Browser.Engine={name:"presto",version:(document.getElementsByClassName)?950:925};}else{if(window.ActiveXObject){Browser.Engine={name:"trident",version:(window.XMLHttpRequest)?5:4};
+}else{if(!navigator.taintEnabled){Browser.Engine={name:"webkit",version:(Browser.Features.xpath)?420:419};}else{if(document.getBoxObjectFor!=null){Browser.Engine={name:"gecko",version:(document.getElementsByClassName)?19:18};
+}}}}Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined){Browser.Platform.name="ipod";
+}Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject("MSXML2.XMLHTTP");
+});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var A=($try(function(){return navigator.plugins["Shockwave Flash"].description;
+},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");})||"0 r0").match(/\d+/g);return{version:parseInt(A[0]||0+"."+A[1]||0),build:parseInt(A[2]||0)};
+})();function $exec(B){if(!B){return B;}if(window.execScript){window.execScript(B);}else{var A=document.createElement("script");A.setAttribute("type","text/javascript");
+A.text=B;document.head.appendChild(A);document.head.removeChild(A);}return B;}Native.UID=1;var $uid=(Browser.Engine.trident)?function(A){return(A.uid||(A.uid=[Native.UID++]))[0];
+}:function(A){return A.uid||(A.uid=Native.UID++);};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(A){$uid(A);
+if(!A.Element){A.Element=$empty;if(Browser.Engine.webkit){A.document.createElement("iframe");}A.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};
+}return $extend(A,Window.Prototype);},afterImplement:function(B,A){window[B]=Window.Prototype[B]=A;}});Window.Prototype={$family:{name:"window"}};new Window(window);
+var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(A){$uid(A);A.head=A.getElementsByTagName("head")[0];
+A.html=A.getElementsByTagName("html")[0];A.window=A.defaultView||A.parentWindow;if(Browser.Engine.trident4){$try(function(){A.execCommand("BackgroundImageCache",false,true);
+});}return $extend(A,Document.Prototype);},afterImplement:function(B,A){document[B]=Document.Prototype[B]=A;}});Document.Prototype={$family:{name:"document"}};
+new Document(document);Array.implement({every:function(C,D){for(var B=0,A=this.length;B<A;B++){if(!C.call(D,this[B],B,this)){return false;}}return true;
+},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B]);}}return C;},clean:function(){return this.filter($defined);
+},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B;}}return -1;},map:function(D,E){var C=[];
+for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this);}return C;},some:function(C,D){for(var B=0,A=this.length;B<A;B++){if(C.call(D,this[B],B,this)){return true;
+}}return false;},associate:function(C){var D={},B=Math.min(this.length,C.length);for(var A=0;A<B;A++){D[C[A]]=this[A];}return D;},link:function(C){var A={};
+for(var E=0,B=this.length;E<B;E++){for(var D in C){if(C[D](this[E])){A[D]=this[E];delete C[D];break;}}}return A;},contains:function(A,B){return this.indexOf(A,B)!=-1;
+},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B]);}return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;
+},include:function(A){if(!this.contains(A)){this.push(A);}return this;},combine:function(C){for(var B=0,A=C.length;B<A;B++){this.include(C[B]);}return this;
+},erase:function(B){for(var A=this.length;A--;A){if(this[A]===B){this.splice(A,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var D=[];
+for(var B=0,A=this.length;B<A;B++){var C=$type(this[B]);if(!C){continue;}D=D.concat((C=="array"||C=="collection"||C=="arguments")?Array.flatten(this[B]):this[B]);
+}return D;},hexToRgb:function(B){if(this.length!=3){return null;}var A=this.map(function(C){if(C.length==1){C+=C;}return C.toInt(16);});return(B)?A:"rgb("+A+")";
+},rgbToHex:function(D){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!D){return"transparent";}var B=[];for(var A=0;A<3;A++){var C=(this[A]-0).toString(16);
+B.push((C.length==1)?"0"+C:C);}return(D)?B:"#"+B.join("");}});Function.implement({extend:function(A){for(var B in A){this[B]=A[B];}return this;},create:function(B){var A=this;
+B=B||{};return function(D){var C=B.arguments;C=(C!=undefined)?$splat(C):Array.slice(arguments,(B.event)?1:0);if(B.event){C=[D||window.event].extend(C);
+}var E=function(){return A.apply(B.bind||null,C);};if(B.delay){return setTimeout(E,B.delay);}if(B.periodical){return setInterval(E,B.periodical);}if(B.attempt){return $try(E);
+}return E();};},pass:function(A,B){return this.create({arguments:A,bind:B});},attempt:function(A,B){return this.create({arguments:A,bind:B,attempt:true})();
+},bind:function(B,A){return this.create({bind:B,arguments:A});},bindWithEvent:function(B,A){return this.create({bind:B,event:true,arguments:A});},delay:function(B,C,A){return this.create({delay:B,bind:C,arguments:A})();
+},periodical:function(A,C,B){return this.create({periodical:A,bind:C,arguments:B})();},run:function(A,B){return this.apply(B,$splat(A));}});Number.implement({limit:function(B,A){return Math.min(A,Math.max(B,this));
+},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A;},times:function(B,C){for(var A=0;A<this;A++){B.call(C,A,this);}},toFloat:function(){return parseFloat(this);
+},toInt:function(A){return parseInt(this,A||10);}});Number.alias("times","each");(function(B){var A={};B.each(function(C){if(!Number[C]){A[C]=function(){return Math[C].apply(null,[this].concat($A(arguments)));
+};}});Number.implement(A);})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(A,B){return((typeof A=="string")?new RegExp(A,B):A).test(this);
+},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim();
+},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(A){return("-"+A.charAt(0).toLowerCase());
+});},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");
+},toInt:function(A){return parseInt(this,A||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
+return(A)?A.slice(1).hexToRgb(B):null;},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):null;},stripScripts:function(B){var A="";
+var C=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){A+=arguments[1]+"\n";return"";});if(B===true){$exec(A);}else{if($type(B)=="function"){B(A,C);
+}}return C;},substitute:function(A,B){return this.replace(B||(/\\?\{([^}]+)\}/g),function(D,C){if(D.charAt(0)=="\\"){return D.slice(1);}return(A[C]!=undefined)?A[C]:"";
+});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(B){for(var A in this){if(this.hasOwnProperty(A)&&this[A]===B){return A;}}return null;
+},hasValue:function(A){return(Hash.keyOf(this,A)!==null);},extend:function(A){Hash.each(A,function(C,B){Hash.set(this,B,C);},this);return this;},combine:function(A){Hash.each(A,function(C,B){Hash.include(this,B,C);
+},this);return this;},erase:function(A){if(this.hasOwnProperty(A)){delete this[A];}return this;},get:function(A){return(this.hasOwnProperty(A))?this[A]:null;
+},set:function(A,B){if(!this[A]||this.hasOwnProperty(A)){this[A]=B;}return this;},empty:function(){Hash.each(this,function(B,A){delete this[A];},this);
+return this;},include:function(B,C){var A=this[B];if(A==undefined){this[B]=C;}return this;},map:function(B,C){var A=new Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this));
+},this);return A;},filter:function(B,C){var A=new Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E);}},this);return A;},every:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&!B.call(C,this[A],A)){return false;
+}}return true;},some:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&B.call(C,this[A],A)){return true;}}return false;},getKeys:function(){var A=[];
+Hash.each(this,function(C,B){A.push(B);});return A;},getValues:function(){var A=[];Hash.each(this,function(B){A.push(B);});return A;},toQueryString:function(A){var B=[];
+Hash.each(this,function(F,E){if(A){E=A+"["+E+"]";}var D;switch($type(F)){case"object":D=Hash.toQueryString(F,E);break;case"array":var C={};F.each(function(H,G){C[G]=H;
+});D=Hash.toQueryString(C,E);break;default:D=E+"="+encodeURIComponent(F);}if(F!=undefined){B.push(D);}});return B.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});
+var Event=new Native({name:"Event",initialize:function(A,F){F=F||window;var K=F.document;A=A||F.event;if(A.$extended){return A;}this.$extended=true;var J=A.type;
+var G=A.target||A.srcElement;while(G&&G.nodeType==3){G=G.parentNode;}if(J.test(/key/)){var B=A.which||A.keyCode;var M=Event.Keys.keyOf(B);if(J=="keydown"){var D=B-111;
+if(D>0&&D<13){M="f"+D;}}M=M||String.fromCharCode(B).toLowerCase();}else{if(J.match(/(click|mouse|menu)/i)){K=(!K.compatMode||K.compatMode=="CSS1Compat")?K.html:K.body;
+var I={x:A.pageX||A.clientX+K.scrollLeft,y:A.pageY||A.clientY+K.scrollTop};var C={x:(A.pageX)?A.pageX-F.pageXOffset:A.clientX,y:(A.pageY)?A.pageY-F.pageYOffset:A.clientY};
+if(J.match(/DOMMouseScroll|mousewheel/)){var H=(A.wheelDelta)?A.wheelDelta/120:-(A.detail||0)/3;}var E=(A.which==3)||(A.button==2);var L=null;if(J.match(/over|out/)){switch(J){case"mouseover":L=A.relatedTarget||A.fromElement;
+break;case"mouseout":L=A.relatedTarget||A.toElement;}if(!(function(){while(L&&L.nodeType==3){L=L.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){L=false;
+}}}}return $extend(this,{event:A,type:J,page:I,client:C,rightClick:E,wheel:H,relatedTarget:L,target:G,code:B,key:M,shift:A.shiftKey,control:A.ctrlKey,alt:A.altKey,meta:A.metaKey});
+}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault();
+},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();
+}else{this.event.returnValue=false;}return this;}});var Class=new Native({name:"Class",initialize:function(B){B=B||{};var A=function(E){for(var D in this){this[D]=$unlink(this[D]);
+}for(var F in Class.Mutators){if(!this[F]){continue;}Class.Mutators[F](this,this[F]);delete this[F];}this.constructor=A;if(E===$empty){return this;}var C=(this.initialize)?this.initialize.apply(this,arguments):this;
+if(this.options&&this.options.initialize){this.options.initialize.call(this);}return C;};$extend(A,this);A.constructor=Class;A.prototype=B;return A;}});
+Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this;}});Class.Mutators={Implements:function(A,B){$splat(B).each(function(C){$extend(A,($type(C)=="class")?new C($empty):C);
+});},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];
+if(current==undefined){self[key]=previous;continue;}var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype){continue;}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return"arguments.callee._parent_.call(this"+(close||", ");
+})+")");}self[key]._parent_=previous;break;case"object":self[key]=$merge(previous,current);}}self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments);
+};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1));};}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);
+return this;},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){if(this.$chain){this.$chain.empty();
+}return this;}});var Events=new Class({addEvent:function(C,B,A){C=Events.removeOn(C);if(B!=$empty){this.$events=this.$events||{};this.$events[C]=this.$events[C]||[];
+this.$events[C].include(B);if(A){B.internal=true;}}return this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);}return this;},fireEvent:function(C,B,A){C=Events.removeOn(C);
+if(!this.$events||!this.$events[C]){return this;}this.$events[C].each(function(D){D.create({bind:this,delay:A,"arguments":B})();},this);return this;},removeEvent:function(B,A){B=Events.removeOn(B);
+if(!this.$events||!this.$events[B]){return this;}if(!A.internal){this.$events[B].erase(A);}return this;},removeEvents:function(C){for(var D in this.$events){if(C&&C!=D){continue;
+}var B=this.$events[D];for(var A=B.length;A--;A){this.removeEvent(D,B[A]);}}return this;}});Events.removeOn=function(A){return A.replace(/^on([A-Z])/,function(B,C){return C.toLowerCase();
+});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this;}for(var A in this.options){if($type(this.options[A])!="function"||!(/^on[A-Z]/).test(A)){continue;
+}this.addEvent(A,this.options[A]);delete this.options[A];}return this;}});Document.implement({newElement:function(A,B){if(Browser.Engine.trident&&B){["name","type","checked"].each(function(C){if(!B[C]){return ;
+}A+=" "+C+'="'+B[C]+'"';if(C!="checked"){delete B[C];}});A="<"+A+">";}return $.element(this.createElement(A)).set(B);},newTextNode:function(A){return this.createTextNode(A);
+},getDocument:function(){return this;},getWindow:function(){return this.defaultView||this.parentWindow;},purge:function(){var C=this.getElementsByTagName("*");
+for(var B=0,A=C.length;B<A;B++){Browser.freeMem(C[B]);}}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(A,B){var C=Element.Constructors.get(A);
+if(C){return C(B);}if(typeof A=="string"){return document.newElement(A,B);}return $(A).set(B);},afterImplement:function(A,B){if(!Array[A]){Elements.implement(A,Elements.multi(A));
+}Element.Prototype[A]=B;}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var E=Array.link(arguments,{properties:Object.type,iframe:$defined});
+var C=E.properties||{};var B=$(E.iframe)||false;var D=C.onload||$empty;delete C.onload;C.id=C.name=$pick(C.id,C.name,B.id,B.name,"IFrame_"+$time());B=new Element(B||"iframe",C);
+var A=function(){var F=$try(function(){return B.contentWindow.location.host;});if(F&&F==window.location.host){var H=new Window(B.contentWindow);var G=new Document(B.contentWindow.document);
+$extend(H.Element.prototype,Element.Prototype);}D.call(B.contentWindow,B.contentWindow.document);};(!window.frames[C.id])?B.addListener("load",A):A();return B;
+}});var Elements=new Native({initialize:function(F,B){B=$extend({ddup:true,cash:true},B);F=F||[];if(B.ddup||B.cash){var G={},E=[];for(var C=0,A=F.length;
+C<A;C++){var D=$.element(F[C],!B.cash);if(B.ddup){if(G[D.uid]){continue;}G[D.uid]=true;}E.push(D);}F=E;}return(B.cash)?$extend(F,this):F;}});Elements.implement({filter:function(A,B){if(!A){return this;
+}return new Elements(Array.filter(this,(typeof A=="string")?function(C){return C.match(A);}:A,B));}});Elements.multi=function(A){return function(){var B=[];
+var F=true;for(var D=0,C=this.length;D<C;D++){var E=this[D][A].apply(this[D],arguments);B.push(E);if(F){F=($type(E)=="element");}}return(F)?new Elements(B):B;
+};};Window.implement({$:function(B,C){if(B&&B.$family&&B.uid){return B;}var A=$type(B);return($[A])?$[A](B,C,this.document):null;},$$:function(A){if(arguments.length==1&&typeof A=="string"){return this.document.getElements(A);
+}var F=[];var C=Array.flatten(arguments);for(var D=0,B=C.length;D<B;D++){var E=C[D];switch($type(E)){case"element":E=[E];break;case"string":E=this.document.getElements(E,true);
+break;default:E=false;}if(E){F.extend(E);}}return new Elements(F);},getDocument:function(){return this.document;},getWindow:function(){return this;}});
+$.string=function(C,B,A){C=A.getElementById(C);return(C)?$.element(C,B):null;};$.element=function(A,D){$uid(A);if(!D&&!A.$family&&!(/^object|embed$/i).test(A.tagName)){var B=Element.Prototype;
+for(var C in B){A[C]=B[C];}}return A;};$.object=function(B,C,A){if(B.toElement){return $.element(B.toElement(A),C);}return null;};$.textnode=$.whitespace=$.window=$.document=$arguments(0);
+Native.implement([Element,Document],{getElement:function(A,B){return $(this.getElements(A,true)[0]||null,B);},getElements:function(A,D){A=A.split(",");
+var C=[];var B=(A.length>1);A.each(function(E){var F=this.getElementsByTagName(E.trim());(B)?C.extend(F):C=F;},this);return new Elements(C,{ddup:B,cash:!D});
+}});Element.Storage={get:function(A){return(this[A]||(this[A]={}));}};Element.Inserters=new Hash({before:function(B,A){if(A.parentNode){A.parentNode.insertBefore(B,A);
+}},after:function(B,A){if(!A.parentNode){return ;}var C=A.nextSibling;(C)?A.parentNode.insertBefore(B,C):A.parentNode.appendChild(B);},bottom:function(B,A){A.appendChild(B);
+},top:function(B,A){var C=A.firstChild;(C)?A.insertBefore(B,C):A.appendChild(B);}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(C,B){var A=B.capitalize();
+Element.implement("inject"+A,function(D){C(this,$(D,true));return this;});Element.implement("grab"+A,function(D){C($(D,true),this);return this;});});Element.implement({getDocument:function(){return this.ownerDocument;
+},getWindow:function(){return this.ownerDocument.getWindow();},getElementById:function(D,C){var B=this.ownerDocument.getElementById(D);if(!B){return null;
+}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return null;}}return $.element(B,C);},set:function(D,B){switch($type(D)){case"object":for(var C in D){this.set(C,D[C]);
+}break;case"string":var A=Element.Properties.get(D);(A&&A.set)?A.set.apply(this,Array.slice(arguments,1)):this.setProperty(D,B);}return this;},get:function(B){var A=Element.Properties.get(B);
+return(A&&A.get)?A.get.apply(this,Array.slice(arguments,1)):this.getProperty(B);},erase:function(B){var A=Element.Properties.get(B);(A&&A.erase)?A.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(B);
+return this;},match:function(A){return(!A||Element.get(this,"tag")==A);},inject:function(B,A){Element.Inserters.get(A||"bottom")(this,$(B,true));return this;
+},wraps:function(B,A){B=$(B,true);return this.replaces(B).grab(B,A);},grab:function(B,A){Element.Inserters.get(A||"bottom")($(B,true),this);return this;
+},appendText:function(B,A){return this.grab(this.getDocument().newTextNode(B),A);},adopt:function(){Array.flatten(arguments).each(function(A){A=$(A,true);
+if(A){this.appendChild(A);}},this);return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},clone:function(D,C){switch($type(this)){case"element":var H={};
+for(var G=0,E=this.attributes.length;G<E;G++){var B=this.attributes[G],L=B.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(L)){continue;
+}var K=(L=="style"&&this.style)?this.style.cssText:B.nodeValue;if(!$chk(K)||L=="uid"||(L=="id"&&!C)){continue;}if(K!="inherit"&&["string","number"].contains($type(K))){H[L]=K;
+}}var J=new Element(this.nodeName.toLowerCase(),H);if(D!==false){for(var I=0,F=this.childNodes.length;I<F;I++){var A=Element.clone(this.childNodes[I],true,C);
+if(A){J.grab(A);}}}return J;case"textnode":return document.newTextNode(this.nodeValue);}return null;},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this,A);
+return this;},hasClass:function(A){return this.className.contains(A," ");},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean();
+}return this;},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();return this;},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A);
+},getComputedStyle:function(B){if(this.currentStyle){return this.currentStyle[B.camelCase()];}var A=this.getWindow().getComputedStyle(this,null);return(A)?A.getPropertyValue([B.hyphenate()]):null;
+},empty:function(){$A(this.childNodes).each(function(A){Browser.freeMem(A);Element.empty(A);Element.dispose(A);},this);return this;},destroy:function(){Browser.freeMem(this.empty().dispose());
+return null;},getSelected:function(){return new Elements($A(this.options).filter(function(A){return A.selected;}));},toQueryString:function(){var A=[];
+this.getElements("input, select, textarea").each(function(B){if(!B.name||B.disabled){return ;}var C=(B.tagName.toLowerCase()=="select")?Element.getSelected(B).map(function(D){return D.value;
+}):((B.type=="radio"||B.type=="checkbox")&&!B.checked)?null:B.value;$splat(C).each(function(D){if(D){A.push(B.name+"="+encodeURIComponent(D));}});});return A.join("&");
+},getProperty:function(C){var B=Element.Attributes,A=B.Props[C];var D=(A)?this[A]:this.getAttribute(C,2);return(B.Bools[C])?!!D:(A)?D:D||null;},getProperties:function(){var A=$A(arguments);
+return A.map(function(B){return this.getProperty(B);},this).associate(A);},setProperty:function(D,E){var C=Element.Attributes,B=C.Props[D],A=$defined(E);
+if(B&&C.Bools[D]){E=(E||!A)?true:false;}else{if(!A){return this.removeProperty(D);}}(B)?this[B]=E:this.setAttribute(D,E);return this;},setProperties:function(A){for(var B in A){this.setProperty(B,A[B]);
+}return this;},removeProperty:function(D){var C=Element.Attributes,B=C.Props[D],A=(B&&C.Bools[D]);(B)?this[B]=(A)?false:"":this.removeAttribute(D);return this;
+},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;}});(function(){var A=function(D,B,I,C,F,H){var E=D[I||B];var G=[];
+while(E){if(E.nodeType==1&&(!C||Element.match(E,C))){G.push(E);if(!F){break;}}E=E[B];}return(F)?new Elements(G,{ddup:false,cash:!H}):$(G[0],H);};Element.implement({getPrevious:function(B,C){return A(this,"previousSibling",null,B,false,C);
+},getAllPrevious:function(B,C){return A(this,"previousSibling",null,B,true,C);},getNext:function(B,C){return A(this,"nextSibling",null,B,false,C);},getAllNext:function(B,C){return A(this,"nextSibling",null,B,true,C);
+},getFirst:function(B,C){return A(this,"nextSibling","firstChild",B,false,C);},getLast:function(B,C){return A(this,"previousSibling","lastChild",B,false,C);
+},getParent:function(B,C){return A(this,"parentNode",null,B,false,C);},getParents:function(B,C){return A(this,"parentNode",null,B,true,C);},getChildren:function(B,C){return A(this,"nextSibling","firstChild",B,true,C);
+},hasChild:function(B){B=$(B,true);return(!!B&&$A(this.getElementsByTagName(B.tagName)).contains(B));}});})();Element.Properties=new Hash;Element.Properties.style={set:function(A){this.style.cssText=A;
+},get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();
+}};Element.Properties.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp("^"+document.location.protocol+"//"+document.location.host),"");
+}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join("");}};Native.implement([Element,Window,Document],{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false);
+}else{this.attachEvent("on"+B,A);}return this;},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false);}else{this.detachEvent("on"+B,A);
+}return this;},retrieve:function(B,A){var D=Element.Storage.get(this.uid);var C=D[B];if($defined(A)&&!$defined(C)){C=D[B]=A;}return $pick(C);},store:function(B,A){var C=Element.Storage.get(this.uid);
+C[B]=A;return this;},eliminate:function(A){var B=Element.Storage.get(this.uid);delete B[A];return this;}});Element.Attributes=new Hash({Props:{html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident)?"innerText":"textContent"},Bools:["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"],Camels:["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]});
+Browser.freeMem=function(A){if(!A){return ;}if(Browser.Engine.trident&&(/object/i).test(A.tagName)){for(var B in A){if(typeof A[B]=="function"){A[B]=$empty;
+}}Element.dispose(A);}if(A.uid&&A.removeEvents){A.removeEvents();}};(function(B){var C=B.Bools,A=B.Camels;B.Bools=C=C.associate(C);Hash.extend(Hash.combine(B.Props,C),A.associate(A.map(function(D){return D.toLowerCase();
+})));B.erase("Camels");})(Element.Attributes);window.addListener("unload",function(){window.removeListener("unload",arguments.callee);document.purge();
+if(Browser.Engine.trident){CollectGarbage();}});Element.Properties.events={set:function(A){this.addEvents(A);}};Native.implement([Element,Window,Document],{addEvent:function(E,G){var H=this.retrieve("events",{});
+H[E]=H[E]||{keys:[],values:[]};if(H[E].keys.contains(G)){return this;}H[E].keys.push(G);var F=E,A=Element.Events.get(E),C=G,I=this;if(A){if(A.onAdd){A.onAdd.call(this,G);
+}if(A.condition){C=function(J){if(A.condition.call(this,J)){return G.call(this,J);}return false;};}F=A.base||F;}var D=function(){return G.call(I);};var B=Element.NativeEvents[F]||0;
+if(B){if(B==2){D=function(J){J=new Event(J,I.getWindow());if(C.call(I,J)===false){J.stop();}};}this.addListener(F,D);}H[E].values.push(D);return this;},removeEvent:function(D,C){var B=this.retrieve("events");
+if(!B||!B[D]){return this;}var G=B[D].keys.indexOf(C);if(G==-1){return this;}var A=B[D].keys.splice(G,1)[0];var F=B[D].values.splice(G,1)[0];var E=Element.Events.get(D);
+if(E){if(E.onRemove){E.onRemove.call(this,C);}D=E.base||D;}return(Element.NativeEvents[D])?this.removeListener(D,F):this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);
+}return this;},removeEvents:function(B){var A=this.retrieve("events");if(!A){return this;}if(!B){for(var C in A){this.removeEvents(C);}A=null;}else{if(A[B]){while(A[B].keys[0]){this.removeEvent(B,A[B].keys[0]);
+}A[B]=null;}}return this;},fireEvent:function(D,B,A){var C=this.retrieve("events");if(!C||!C[D]){return this;}C[D].keys.each(function(E){E.create({bind:this,delay:A,"arguments":B})();
+},this);return this;},cloneEvents:function(D,A){D=$(D);var C=D.retrieve("events");if(!C){return this;}if(!A){for(var B in C){this.cloneEvents(D,B);}}else{if(C[A]){C[A].keys.each(function(E){this.addEvent(A,E);
+},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};
+(function(){var A=function(B){var C=B.relatedTarget;if(C==undefined){return true;}if(C===false){return false;}return($type(this)!="document"&&C!=this&&C.prefix!="xul"&&!this.hasChild(C));
+};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:A},mouseleave:{base:"mouseout",condition:A},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}});
+})();Element.Properties.styles={set:function(A){this.setStyles(A);}};Element.Properties.opacity={set:function(A,B){if(!B){if(A==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden";
+}}else{if(this.style.visibility!="visible"){this.style.visibility="visible";}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(Browser.Engine.trident){this.style.filter=(A==1)?"":"alpha(opacity="+A*100+")";
+}this.style.opacity=A;this.store("opacity",A);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(A){return this.set("opacity",A,true);
+},getOpacity:function(){return this.get("opacity");},setStyle:function(B,A){switch(B){case"opacity":return this.set("opacity",parseFloat(A));case"float":B=(Browser.Engine.trident)?"styleFloat":"cssFloat";
+}B=B.camelCase();if($type(A)!="string"){var C=(Element.Styles.get(B)||"@").split(" ");A=$splat(A).map(function(E,D){if(!C[D]){return"";}return($type(E)=="number")?C[D].replace("@",Math.round(E)):E;
+}).join(" ");}else{if(A==String(Number(A))){A=Math.round(A);}}this.style[B]=A;return this;},getStyle:function(G){switch(G){case"opacity":return this.get("opacity");
+case"float":G=(Browser.Engine.trident)?"styleFloat":"cssFloat";}G=G.camelCase();var A=this.style[G];if(!$chk(A)){A=[];for(var F in Element.ShortStyles){if(G!=F){continue;
+}for(var E in Element.ShortStyles[F]){A.push(this.getStyle(E));}return A.join(" ");}A=this.getComputedStyle(G);}if(A){A=String(A);var C=A.match(/rgba?\([\d\s,]+\)/);
+if(C){A=A.replace(C[0],C[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(A)))){if(G.test(/^(height|width)$/)){var B=(G=="width")?["left","right"]:["top","bottom"],D=0;
+B.each(function(H){D+=this.getStyle("border-"+H+"-width").toInt()+this.getStyle("padding-"+H).toInt();},this);return this["offset"+G.capitalize()]-D+"px";
+}if(Browser.Engine.presto&&String(A).test("px")){return A;}if(G.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return A;},setStyles:function(B){for(var A in B){this.setStyle(A,B[A]);
+}return this;},getStyles:function(){var A={};Array.each(arguments,function(B){A[B]=this.getStyle(B);},this);return A;}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});
+Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(G){var F=Element.ShortStyles;
+var B=Element.Styles;["margin","padding"].each(function(H){var I=H+G;F[H][I]=B[I]="@px";});var E="border"+G;F.border[E]=B[E]="@px @ rgb(@, @, @)";var D=E+"Width",A=E+"Style",C=E+"Color";
+F[E]={};F.borderWidth[D]=F[E][D]=B[D]="@px";F.borderStyle[A]=F[E][A]=B[A]="@";F.borderColor[C]=F[E][C]=B[C]="rgb(@, @, @)";});(function(){Element.implement({scrollTo:function(H,I){if(B(this)){this.getWindow().scrollTo(H,I);
+}else{this.scrollLeft=H;this.scrollTop=I;}return this;},getSize:function(){if(B(this)){return this.getWindow().getSize();}return{x:this.offsetWidth,y:this.offsetHeight};
+},getScrollSize:function(){if(B(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(B(this)){return this.getWindow().getScroll();
+}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var I=this,H={x:0,y:0};while(I&&!B(I)){H.x+=I.scrollLeft;H.y+=I.scrollTop;I=I.parentNode;
+}return H;},getOffsetParent:function(){var H=this;if(B(H)){return null;}if(!Browser.Engine.trident){return H.offsetParent;}while((H=H.parentNode)&&!B(H)){if(D(H,"position")!="static"){return H;
+}}return null;},getOffsets:function(){var I=this,H={x:0,y:0};if(B(this)){return H;}while(I&&!B(I)){H.x+=I.offsetLeft;H.y+=I.offsetTop;if(Browser.Engine.gecko){if(!F(I)){H.x+=C(I);
+H.y+=G(I);}var J=I.parentNode;if(J&&D(J,"overflow")!="visible"){H.x+=C(J);H.y+=G(J);}}else{if(I!=this&&(Browser.Engine.trident||Browser.Engine.webkit)){H.x+=C(I);
+H.y+=G(I);}}I=I.offsetParent;if(Browser.Engine.trident){while(I&&!I.currentStyle.hasLayout){I=I.offsetParent;}}}if(Browser.Engine.gecko&&!F(this)){H.x-=C(this);
+H.y-=G(this);}return H;},getPosition:function(K){if(B(this)){return{x:0,y:0};}var L=this.getOffsets(),I=this.getScrolls();var H={x:L.x-I.x,y:L.y-I.y};var J=(K&&(K=$(K)))?K.getPosition():{x:0,y:0};
+return{x:H.x-J.x,y:H.y-J.y};},getCoordinates:function(J){if(B(this)){return this.getWindow().getCoordinates();}var H=this.getPosition(J),I=this.getSize();
+var K={left:H.x,top:H.y,width:I.x,height:I.y};K.right=K.left+K.width;K.bottom=K.top+K.height;return K;},computePosition:function(H){return{left:H.x-E(this,"margin-left"),top:H.y-E(this,"margin-top")};
+},position:function(H){return this.setStyles(this.computePosition(H));}});Native.implement([Document,Window],{getSize:function(){var I=this.getWindow();
+if(Browser.Engine.presto||Browser.Engine.webkit){return{x:I.innerWidth,y:I.innerHeight};}var H=A(this);return{x:H.clientWidth,y:H.clientHeight};},getScroll:function(){var I=this.getWindow();
+var H=A(this);return{x:I.pageXOffset||H.scrollLeft,y:I.pageYOffset||H.scrollTop};},getScrollSize:function(){var I=A(this);var H=this.getSize();return{x:Math.max(I.scrollWidth,H.x),y:Math.max(I.scrollHeight,H.y)};
+},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var H=this.getSize();return{top:0,left:0,bottom:H.y,right:H.x,height:H.y,width:H.x};
+}});var D=Element.getComputedStyle;function E(H,I){return D(H,I).toInt()||0;}function F(H){return D(H,"-moz-box-sizing")=="border-box";}function G(H){return E(H,"border-top-width");
+}function C(H){return E(H,"border-left-width");}function B(H){return(/^(?:body|html)$/i).test(H.tagName);}function A(H){var I=H.getDocument();return(!I.compatMode||I.compatMode=="CSS1Compat")?I.html:I.body;
+}})();Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y;},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;
+},getScrollLeft:function(){return this.getScroll().x;},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;
+},getTop:function(){return this.getPosition().y;},getLeft:function(){return this.getPosition().x;}});Native.implement([Document,Element],{getElements:function(H,G){H=H.split(",");
+var C,E={};for(var D=0,B=H.length;D<B;D++){var A=H[D],F=Selectors.Utils.search(this,A,E);if(D!=0&&F.item){F=$A(F);}C=(D==0)?F:(C.item)?$A(C).concat(F):C.concat(F);
+}return new Elements(C,{ddup:(H.length>1),cash:!G});}});Element.implement({match:function(B){if(!B){return true;}var D=Selectors.Utils.parseTagAndID(B);
+var A=D[0],E=D[1];if(!Selectors.Filters.byID(this,E)||!Selectors.Filters.byTag(this,A)){return false;}var C=Selectors.Utils.parseSelector(B);return(C)?Selectors.Utils.filter(this,C,{}):true;
+}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};
+Selectors.Utils={chk:function(B,C){if(!C){return true;}var A=$uid(B);if(!C[A]){return C[A]=true;}return false;},parseNthArgument:function(F){if(Selectors.Cache.nth[F]){return Selectors.Cache.nth[F];
+}var C=F.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!C){return false;}var E=parseInt(C[1]);var B=(E||E===0)?E:1;var D=C[2]||false;var A=parseInt(C[3])||0;
+if(B!=0){A--;while(A<1){A+=B;}while(A>=B){A-=B;}}else{B=A;D="index";}switch(D){case"n":C={a:B,b:A,special:"n"};break;case"odd":C={a:2,b:0,special:"n"};
+break;case"even":C={a:2,b:1,special:"n"};break;case"first":C={a:0,special:"index"};break;case"last":C={special:"last-child"};break;case"only":C={special:"only-child"};
+break;default:C={a:(B-1),special:"index"};}return Selectors.Cache.nth[F]=C;},parseSelector:function(E){if(Selectors.Cache.parsed[E]){return Selectors.Cache.parsed[E];
+}var D,H={classes:[],pseudos:[],attributes:[]};while((D=Selectors.RegExps.combined.exec(E))){var I=D[1],G=D[2],F=D[3],B=D[4],C=D[5],J=D[6];if(I){H.classes.push(I);
+}else{if(C){var A=Selectors.Pseudo.get(C);if(A){H.pseudos.push({parser:A,argument:J});}else{H.attributes.push({name:C,operator:"=",value:J});}}else{if(G){H.attributes.push({name:G,operator:F,value:B});
+}}}}if(!H.classes.length){delete H.classes;}if(!H.attributes.length){delete H.attributes;}if(!H.pseudos.length){delete H.pseudos;}if(!H.classes&&!H.attributes&&!H.pseudos){H=null;
+}return Selectors.Cache.parsed[E]=H;},parseTagAndID:function(B){var A=B.match(Selectors.RegExps.tag);var C=B.match(Selectors.RegExps.id);return[(A)?A[1]:"*",(C)?C[1]:false];
+},filter:function(F,C,E){var D;if(C.classes){for(D=C.classes.length;D--;D){var G=C.classes[D];if(!Selectors.Filters.byClass(F,G)){return false;}}}if(C.attributes){for(D=C.attributes.length;
+D--;D){var B=C.attributes[D];if(!Selectors.Filters.byAttribute(F,B.name,B.operator,B.value)){return false;}}}if(C.pseudos){for(D=C.pseudos.length;D--;D){var A=C.pseudos[D];
+if(!Selectors.Filters.byPseudo(F,A.parser,A.argument,E)){return false;}}}return true;},getByTagAndID:function(B,A,D){if(D){var C=(B.getElementById)?B.getElementById(D,true):Element.getElementById(B,D,true);
+return(C&&Selectors.Filters.byTag(C,A))?[C]:[];}else{return B.getElementsByTagName(A);}},search:function(J,I,O){var B=[];var C=I.trim().replace(Selectors.RegExps.splitter,function(Z,Y,X){B.push(Y);
+return":)"+X;}).split(":)");var K,F,E,V;for(var U=0,Q=C.length;U<Q;U++){var T=C[U];if(U==0&&Selectors.RegExps.quick.test(T)){K=J.getElementsByTagName(T);
+continue;}var A=B[U-1];var L=Selectors.Utils.parseTagAndID(T);var W=L[0],M=L[1];if(U==0){K=Selectors.Utils.getByTagAndID(J,W,M);}else{var D={},H=[];for(var S=0,R=K.length;
+S<R;S++){H=Selectors.Getters[A](H,K[S],W,M,D);}K=H;}var G=Selectors.Utils.parseSelector(T);if(G){E=[];for(var P=0,N=K.length;P<N;P++){V=K[P];if(Selectors.Utils.filter(V,G,O)){E.push(V);
+}}K=E;}}return K;}};Selectors.Getters={" ":function(H,G,I,A,E){var D=Selectors.Utils.getByTagAndID(G,I,A);for(var C=0,B=D.length;C<B;C++){var F=D[C];if(Selectors.Utils.chk(F,E)){H.push(F);
+}}return H;},">":function(H,G,I,A,F){var C=Selectors.Utils.getByTagAndID(G,I,A);for(var E=0,D=C.length;E<D;E++){var B=C[E];if(B.parentNode==G&&Selectors.Utils.chk(B,F)){H.push(B);
+}}return H;},"+":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(Selectors.Utils.chk(B,D)&&Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B);
+}break;}}return C;},"~":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(!Selectors.Utils.chk(B,D)){break;}if(Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B);
+}}}return C;}};Selectors.Filters={byTag:function(B,A){return(A=="*"||(B.tagName&&B.tagName.toLowerCase()==A));},byID:function(A,B){return(!B||(A.id&&A.id==B));
+},byClass:function(B,A){return(B.className&&B.className.contains(A," "));},byPseudo:function(A,D,C,B){return D.call(A,C,B);},byAttribute:function(C,D,B,E){var A=Element.prototype.getProperty.call(C,D);
+if(!A){return false;}if(!B||E==undefined){return true;}switch(B){case"=":return(A==E);case"*=":return(A.contains(E));case"^=":return(A.substr(0,E.length)==E);
+case"$=":return(A.substr(A.length-E.length)==E);case"!=":return(A!=E);case"~=":return A.contains(E," ");case"|=":return A.contains(E,"-");}return false;
+}};Selectors.Pseudo=new Hash({empty:function(){return !(this.innerText||this.textContent||"").length;},not:function(A){return !Element.match(this,A);},contains:function(A){return(this.innerText||this.textContent||"").contains(A);
+},"first-child":function(){return Selectors.Pseudo.index.call(this,0);},"last-child":function(){var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false;
+}}return true;},"only-child":function(){var B=this;while((B=B.previousSibling)){if(B.nodeType==1){return false;}}var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false;
+}}return true;},"nth-child":function(G,E){G=(G==undefined)?"n":G;var C=Selectors.Utils.parseNthArgument(G);if(C.special!="n"){return Selectors.Pseudo[C.special].call(this,C.a,E);
+}var F=0;E.positions=E.positions||{};var D=$uid(this);if(!E.positions[D]){var B=this;while((B=B.previousSibling)){if(B.nodeType!=1){continue;}F++;var A=E.positions[$uid(B)];
+if(A!=undefined){F=A+F;break;}}E.positions[D]=F;}return(E.positions[D]%C.a==C.b);},index:function(A){var B=this,C=0;while((B=B.previousSibling)){if(B.nodeType==1&&++C>A){return false;
+}}return(C==A);},even:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n+1",A);},odd:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n",A);
+}});Element.Events.domready={onAdd:function(A){if(Browser.loaded){A.call(this);}}};(function(){var B=function(){if(Browser.loaded){return ;}Browser.loaded=true;
+window.fireEvent("domready");document.fireEvent("domready");};switch(Browser.Engine.name){case"webkit":(function(){(["loaded","complete"].contains(document.readyState))?B():arguments.callee.delay(50);
+})();break;case"trident":var A=document.createElement("div");(function(){($try(function(){A.doScroll("left");return $(A).inject(document.body).set("html","temp").dispose();
+}))?B():arguments.callee.delay(50);})();break;default:window.addEvent("load",B);document.addEvent("DOMContentLoaded",B);}})();var JSON=new Hash({encode:function(B){switch($type(B)){case"string":return'"'+B.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';
+case"array":return"["+String(B.map(JSON.encode).filter($defined))+"]";case"object":case"hash":var A=[];Hash.each(B,function(E,D){var C=JSON.encode(E);if(C){A.push(JSON.encode(D)+":"+C);
+}});return"{"+A+"}";case"number":case"boolean":return String(B);case false:return"null";}return null;},$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(A){return JSON.$specialChars[A]||"\\u00"+Math.floor(A.charCodeAt()/16).toString(16)+(A.charCodeAt()%16).toString(16);
+},decode:function(string,secure){if($type(string)!="string"||!string.length){return null;}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null;
+}return eval("("+string+")");}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this);}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(B,A){this.key=B;
+this.setOptions(A);},write:function(B){B=encodeURIComponent(B);if(this.options.domain){B+="; domain="+this.options.domain;}if(this.options.path){B+="; path="+this.options.path;
+}if(this.options.duration){var A=new Date();A.setTime(A.getTime()+this.options.duration*24*60*60*1000);B+="; expires="+A.toGMTString();}if(this.options.secure){B+="; secure";
+}this.options.document.cookie=this.key+"="+B;return this;},read:function(){var A=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");
+return(A)?decodeURIComponent(A[1]):null;},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this;}});Cookie.write=function(B,C,A){return new Cookie(B,A).write(C);
+};Cookie.read=function(A){return new Cookie(A).read();};Cookie.dispose=function(B,A){return new Cookie(B,A).dispose();};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object;
+},initialize:function(L,M){this.instance="Swiff_"+$time();this.setOptions(M);M=this.options;var B=this.id=M.id||this.instance;var A=$(M.container);Swiff.CallBacks[this.instance]={};
+var E=M.params,G=M.vars,F=M.callBacks;var H=$extend({height:M.height,width:M.width},M.properties);var K=this;for(var D in F){Swiff.CallBacks[this.instance][D]=(function(N){return function(){return N.apply(K.object,arguments);
+};})(F[D]);G[D]="Swiff.CallBacks."+this.instance+"."+D;}E.flashVars=Hash.toQueryString(G);if(Browser.Engine.trident){H.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
+E.movie=L;}else{H.type="application/x-shockwave-flash";H.data=L;}var J='<object id="'+B+'"';for(var I in H){J+=" "+I+'="'+H[I]+'"';}J+=">";for(var C in E){if(E[C]){J+='<param name="'+C+'" value="'+E[C]+'" />';
+}}J+="</object>";this.object=((A)?A.empty():new Element("div")).set("html",J).firstChild;},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this.toElement(),A);
+return this;},inject:function(A){$(A,true).appendChild(this.toElement());return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments));
+}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");
+return eval(rs);};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore",transition:function(A){return -(Math.cos(Math.PI*A)-1)/2;
+}},initialize:function(A){this.subject=this.subject||this;this.setOptions(A);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();
+var B=this.options.wait;if(B===false){this.options.link="cancel";}},step:function(){var A=$time();if(A<this.time+this.options.duration){var B=this.options.transition((A-this.time)/this.options.duration);
+this.set(this.compute(this.from,this.to,B));}else{this.set(this.compute(this.from,this.to,1));this.complete();}},set:function(A){return A;},compute:function(C,B,A){return Fx.compute(C,B,A);
+},check:function(A){if(!this.timer){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));
+return false;}return false;},start:function(B,A){if(!this.check(arguments.callee,B,A)){return this;}this.from=B;this.to=A;this.time=0;this.startTimer();
+this.onStart();return this;},complete:function(){if(this.stopTimer()){this.onComplete();}return this;},cancel:function(){if(this.stopTimer()){this.onCancel();
+}return this;},onStart:function(){this.fireEvent("start",this.subject);},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject);
+}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain();},pause:function(){this.stopTimer();return this;},resume:function(){this.startTimer();
+return this;},stopTimer:function(){if(!this.timer){return false;}this.time=$time()-this.time;this.timer=$clear(this.timer);return true;},startTimer:function(){if(this.timer){return false;
+}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true;}});Fx.compute=function(C,B,A){return(B-C)*A+C;
+};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(D,E,B){B=$splat(B);var C=B[1];if(!$chk(C)){B[1]=B[0];
+B[0]=D.getStyle(E);}var A=B.map(this.parse);return{from:A[0],to:A[1]};},parse:function(A){A=$lambda(A)();A=(typeof A=="string")?A.split(" "):$splat(A);
+return A.map(function(C){C=String(C);var B=false;Fx.CSS.Parsers.each(function(F,E){if(B){return ;}var D=F.parse(C);if($chk(D)){B={value:D,parser:F};}});
+B=B||{value:C,parser:Fx.CSS.Parsers.String};return B;});},compute:function(D,C,B){var A=[];(Math.min(D.length,C.length)).times(function(E){A.push({value:D[E].parser.compute(D[E].value,C[E].value,B),parser:D[E].parser});
+});A.$family={name:"fx:css:value"};return A;},serve:function(C,B){if($type(C)!="fx:css:value"){C=this.parse(C);}var A=[];C.each(function(D){A=A.concat(D.parser.serve(D.value,B));
+});return A;},render:function(A,D,C,B){A.setStyle(D,this.serve(C,B));},search:function(A){if(Fx.CSS.Cache[A]){return Fx.CSS.Cache[A];}var B={};Array.each(document.styleSheets,function(E,D){var C=E.href;
+if(C&&C.contains("://")&&!C.contains(document.domain)){return ;}var F=E.rules||E.cssRules;Array.each(F,function(I,G){if(!I.style){return ;}var H=(I.selectorText)?I.selectorText.replace(/^\w+/,function(J){return J.toLowerCase();
+}):null;if(!H||!H.test("^"+A+"$")){return ;}Element.Styles.each(function(K,J){if(!I.style[J]||Element.ShortStyles[J]){return ;}K=String(I.style[J]);B[J]=(K.test(/^rgb/))?K.rgbToHex():K;
+});});});return Fx.CSS.Cache[A]=B;}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(A){if(A.match(/^#[0-9a-f]{3,6}$/i)){return A.hexToRgb(true);
+}return((A=A.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[A[1],A[2],A[3]]:false;},compute:function(C,B,A){return C.map(function(E,D){return Math.round(Fx.compute(C[D],B[D],A));
+});},serve:function(A){return A.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(B,A){return(A)?B+A:B;}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});
+Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);},set:function(B,A){if(arguments.length==1){A=B;
+B=this.property||this.options.property;}this.render(this.element,B,A,this.options.unit);return this;},start:function(C,E,D){if(!this.check(arguments.callee,C,E,D)){return this;
+}var B=Array.flatten(arguments);this.property=this.options.property||B.shift();var A=this.prepare(this.element,this.property,B);return this.parent(A.from,A.to);
+}});Element.Properties.tween={set:function(A){var B=this.retrieve("tween");if(B){B.cancel();}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},A));
+},get:function(A){if(A||!this.retrieve("tween")){if(A||!this.retrieve("tween:options")){this.set("tween",A);}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")));
+}return this.retrieve("tween");}};Element.implement({tween:function(A,C,B){this.get("tween").start(arguments);return this;},fade:function(C){var E=this.get("tween"),D="opacity",A;
+C=$pick(C,"toggle");switch(C){case"in":E.start(D,1);break;case"out":E.start(D,0);break;case"show":E.set(D,1);break;case"hide":E.set(D,0);break;case"toggle":var B=this.retrieve("fade:flag",this.get("opacity")==1);
+E.start(D,(B)?0:1);this.store("fade:flag",!B);A=true;break;default:E.start(D,arguments);}if(!A){this.eliminate("fade:flag");}return this;},highlight:function(C,A){if(!A){A=this.retrieve("highlight:original",this.getStyle("background-color"));
+A=(A=="transparent")?"#fff":A;}var B=this.get("tween");B.start("background-color",C||"#ffff88",A).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));
+B.callChain();}.bind(this));return this;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);},set:function(A){if(typeof A=="string"){A=this.search(A);
+}for(var B in A){this.render(this.element,B,A[B],this.options.unit);}return this;},compute:function(E,D,C){var A={};for(var B in E){A[B]=this.parent(E[B],D[B],C);
+}return A;},start:function(B){if(!this.check(arguments.callee,B)){return this;}if(typeof B=="string"){B=this.search(B);}var E={},D={};for(var C in B){var A=this.prepare(this.element,C,B[C]);
+E[C]=A.from;D[C]=A.to;}return this.parent(E,D);}});Element.Properties.morph={set:function(A){var B=this.retrieve("morph");if(B){B.cancel();}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},A));
+},get:function(A){if(A||!this.retrieve("morph")){if(A||!this.retrieve("morph:options")){this.set("morph",A);}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")));
+}return this.retrieve("morph");}};Element.implement({morph:function(A){this.get("morph").start(A);return this;}});(function(){var A=Fx.prototype.initialize;
+Fx.prototype.initialize=function(B){A.call(this,B);var C=this.options.transition;if(typeof C=="string"&&(C=C.split(":"))){var D=Fx.Transitions;D=D[C[0]]||D[C[0].capitalize()];
+if(C[1]){D=D["ease"+C[1].capitalize()+(C[2]?C[2].capitalize():"")];}this.options.transition=D;}};})();Fx.Transition=function(B,A){A=$splat(A);return $extend(B,{easeIn:function(C){return B(C,A);
+},easeOut:function(C){return 1-B(1-C,A);},easeInOut:function(C){return(C<=0.5)?B(2*C,A)/2:(2-B(2*(1-C),A))/2;}});};Fx.Transitions=new Hash({linear:$arguments(0)});
+Fx.Transitions.extend=function(A){for(var B in A){Fx.Transitions[B]=new Fx.Transition(A[B]);}};Fx.Transitions.extend({Pow:function(B,A){return Math.pow(B,A[0]||6);
+},Expo:function(A){return Math.pow(2,8*(A-1));},Circ:function(A){return 1-Math.sin(Math.acos(A));},Sine:function(A){return 1-Math.sin((1-A)*Math.PI/2);
+},Back:function(B,A){A=A[0]||1.618;return Math.pow(B,2)*((A+1)*B-A);},Bounce:function(D){var C;for(var B=0,A=1;1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;
+break;}}return C;},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2]);
+});});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false},initialize:function(A){this.xhr=new Browser.Request();
+this.setOptions(A);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers);},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return ;
+}this.running=false;this.status=0;$try(function(){this.status=this.xhr.status;}.bind(this));if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};
+this.success(this.response.text,this.response.xml);}else{this.response={text:null,xml:null};this.failure();}this.xhr.onreadystatechange=$empty;},isSuccess:function(){return((this.status>=200)&&(this.status<300));
+},processScripts:function(A){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(A);}return A.stripScripts(this.options.evalScripts);
+},success:function(B,A){this.onSuccess(this.processScripts(B),A);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain();
+},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},setHeader:function(A,B){this.headers.set(A,B);
+return this;},getHeader:function(A){return $try(function(){return this.xhr.getResponseHeader(A);}.bind(this));},check:function(A){if(!this.running){return true;
+}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return false;}return false;
+},send:function(I){if(!this.check(arguments.callee,I)){return this;}this.running=true;var G=$type(I);if(G=="string"||G=="element"){I={data:I};}var D=this.options;
+I=$extend({data:D.data,url:D.url,method:D.method},I);var E=I.data,B=I.url,A=I.method;switch($type(E)){case"element":E=$(E).toQueryString();break;case"object":case"hash":E=Hash.toQueryString(E);
+}if(this.options.format){var H="format="+this.options.format;E=(E)?H+"&"+E:H;}if(this.options.emulation&&["put","delete"].contains(A)){var F="_method="+A;
+E=(E)?F+"&"+E:F;A="post";}if(this.options.urlEncoded&&A=="post"){var C=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+C);
+}if(E&&A=="get"){B=B+(B.contains("?")?"&":"?")+E;E=null;}this.xhr.open(A.toUpperCase(),B,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);
+this.headers.each(function(K,J){if(!$try(function(){this.xhr.setRequestHeader(J,K);return true;}.bind(this))){this.fireEvent("exception",[J,K]);}},this);
+this.fireEvent("request");this.xhr.send(E);if(!this.options.async){this.onStateChange();}return this;},cancel:function(){if(!this.running){return this;
+}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});(function(){var A={};
+["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(B){A[B]=function(){var C=Array.link(arguments,{url:String.type,data:$defined});
+return this.send($extend(C,{method:B.toLowerCase()}));};});Request.implement(A);})();Element.Properties.send={set:function(A){var B=this.retrieve("send");
+if(B){B.cancel();}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},A));
+},get:function(A){if(A||!this.retrieve("send")){if(A||!this.retrieve("send:options")){this.set("send",A);}this.store("send",new Request(this.retrieve("send:options")));
+}return this.retrieve("send");}};Element.implement({send:function(A){var B=this.get("send");B.send({data:this,url:A||B.options.url});return this;}});Request.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(C){var B=C.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
+C=(B)?B[1]:C;var A=new Element("div");return $try(function(){var D="<root>"+C+"</root>",G;if(Browser.Engine.trident){G=new ActiveXObject("Microsoft.XMLDOM");
+G.async=false;G.loadXML(D);}else{G=new DOMParser().parseFromString(D,"text/xml");}D=G.getElementsByTagName("root")[0];for(var F=0,E=D.childNodes.length;
+F<E;F++){var H=Element.clone(D.childNodes[F],true,true);if(H){A.grab(H);}}return A;})||A.set("html",C);},success:function(D){var C=this.options,B=this.response;
+B.html=D.stripScripts(function(E){B.javascript=E;});var A=this.processHTML(B.html);B.tree=A.childNodes;B.elements=A.getElements("*");if(C.filter){B.tree=B.elements.filter(C.filter);
+}if(C.update){$(C.update).empty().adopt(B.tree);}if(C.evalScripts){$exec(B.javascript);}this.onSuccess(B.tree,B.elements,B.html,B.javascript);}});Element.Properties.load={set:function(A){var B=this.retrieve("load");
+if(B){send.cancel();}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},A));},get:function(A){if(A||!this.retrieve("load")){if(A||!this.retrieve("load:options")){this.set("load",A);
+}this.store("load",new Request.HTML(this.retrieve("load:options")));}return this.retrieve("load");}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));
+return this;}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(A){this.parent(A);this.headers.extend({Accept:"application/json","X-Request":"JSON"});
+},success:function(A){this.response.json=JSON.decode(A,this.options.secure);this.onSuccess(this.response.json,A);}});
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/js/pullquotes.js b/wp-content/themes/vanilla/js/pullquotes.js
new file mode 100755
index 0000000000000000000000000000000000000000..9252046d868bf5dc2a6ff5c5bc9a3a6e82e808ee
--- /dev/null
+++ b/wp-content/themes/vanilla/js/pullquotes.js
@@ -0,0 +1 @@
+eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('b $j=c.d();$j(e).f(6(){$j(\'g.5\').h(6(){0=$j(1).0();0=0.i(/\\((.*)\\)/k," ");l($j(1).m(".7"))$j(1).8().9(\'<2 a="5 7"><3>&4;\'+0+\'&4;</3></2>\');n $j(1).8().9(\'<2 a="5 o"><3>&4;\'+0+\'&4;</3></2>\')})});',25,25,'text|this|blockquote|p|quot|pullquote|function|alignright|parent|before|class|var|jQuery|noConflict|document|ready|span|each|replace||gi|if|is|else|alignleft'.split('|'),0,{}))
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/links.php b/wp-content/themes/vanilla/links.php
new file mode 100644
index 0000000000000000000000000000000000000000..c68f2c4a40c0996b2d101310fe7dfba94c120b0b
--- /dev/null
+++ b/wp-content/themes/vanilla/links.php
@@ -0,0 +1,20 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/page.php b/wp-content/themes/vanilla/page.php
new file mode 100644
index 0000000000000000000000000000000000000000..56426ad93030cb1c4a7a40b772443b2b87a3d290
--- /dev/null
+++ b/wp-content/themes/vanilla/page.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_page();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/plugins/README.txt b/wp-content/themes/vanilla/plugins/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..55f324566455556a4e5f4824039e6ba88d9bea68
--- /dev/null
+++ b/wp-content/themes/vanilla/plugins/README.txt
@@ -0,0 +1,19 @@
+## plugins/
+
+### Overview
+
+Carrington supports plugins in the same conceptual manner as WordPress. Carrington includes several hooks and filters so you can customize/override Carrington's default behavior.
+
+Any .php files placed in this directory will be auto-loaded and processed by Carrington.
+
+This is the recommended way to interact with the hooks and filters provided by Carrington. 
+
+
+### Supported Override Filenames
+
+- (none)
+
+
+### File Descriptions
+
+No files are included here by default, add files to deliver custom functionality as needed.
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/search.php b/wp-content/themes/vanilla/search.php
new file mode 100644
index 0000000000000000000000000000000000000000..7ac452cea89ee37021522ae6b4b96a28d1ed3aba
--- /dev/null
+++ b/wp-content/themes/vanilla/search.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_posts();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/single.php b/wp-content/themes/vanilla/single.php
new file mode 100644
index 0000000000000000000000000000000000000000..90317acb2b3f18420f0b365a16a66ceff76cc5d2
--- /dev/null
+++ b/wp-content/themes/vanilla/single.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_single();
+
+?>
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/style.css b/wp-content/themes/vanilla/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..50596f89afa2f1c2200671c7cfe262df4cbb5a78
--- /dev/null
+++ b/wp-content/themes/vanilla/style.css
@@ -0,0 +1,59 @@
+/*
+
+Theme Name: Vanilla Theme
+Theme URI: http://vanillatheme.com/
+Description: The great, the only... Vanilla theme!
+Version: 1.0
+Author: Alister Cameron, Australis Media Pty Ltd
+Author URI: http://www.australismedia.com
+Tags: widgets, customizable, 3-column, framework, semantic, white, red, gray, carrington
+Template: vanilla
+*/
+
+/* Reset browser defaults */
+@import url('http://yui.yahooapis.com/3.0.0pr1/build/cssreset/reset.css');
+@import url('http://yui.yahooapis.com/3.0.0pr1/build/cssfonts/fonts.css');
+@import url('http://yui.yahooapis.com/3.0.0pr1/build/cssgrids/grids.css');
+
+@import url(css/carrington-blog.css);
+
+/* including for compatibility */
+
+.alignleft {
+	float:left;
+	margin-right:1em;
+	margin-bottom:1em;
+}
+.alignright {
+	float:right;
+	margin-left:1em;
+	margin-bottom:1em;
+}
+.aligncenter {
+	display: block;
+	margin-left: auto;
+	margin-right: auto;
+}
+.wp-caption {
+	border: 1px solid #ddd;
+	text-align: center;
+	background-color: #f3f3f3;
+	padding-top: 4px;
+	margin: 10px;
+	/* optional rounded corners for browsers that support it */
+	-moz-border-radius: 3px;
+	-khtml-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+}
+.wp-caption img {
+	margin: 0;
+	padding: 0;
+	border: 0 none;
+}
+.wp-caption p.wp-caption-text {
+	font-size: 11px;
+	line-height: 17px;
+	padding: 0 4px 5px;
+	margin: 0;
+}
\ No newline at end of file
diff --git a/wp-content/themes/vanilla/swf/FlowPlayerDark.swf b/wp-content/themes/vanilla/swf/FlowPlayerDark.swf
new file mode 100755
index 0000000000000000000000000000000000000000..9a43c6b08aa400e0b688fcd820c7ba3251666728
Binary files /dev/null and b/wp-content/themes/vanilla/swf/FlowPlayerDark.swf differ
diff --git a/wp-content/themes/vanilla/swf/single.php b/wp-content/themes/vanilla/swf/single.php
new file mode 100644
index 0000000000000000000000000000000000000000..90317acb2b3f18420f0b365a16a66ceff76cc5d2
--- /dev/null
+++ b/wp-content/themes/vanilla/swf/single.php
@@ -0,0 +1,22 @@
+<?php
+
+// This file is part of the Carrington Theme for WordPress
+// http://carringtontheme.com
+//
+// Copyright (c) 2008 Crowd Favorite, Ltd. All rights reserved.
+// http://crowdfavorite.com
+//
+// Released under the GPL license
+// http://www.opensource.org/licenses/gpl-license.php
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+// **********************************************************************
+
+if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
+
+cfct_single();
+
+?>
\ No newline at end of file