The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
AUTHORS 010
CHANGES 21490
CONTRIBUTORS 0179
Changes 02008
INSTALL 044
LICENSE 1415
MANIFEST 1332
META.json 22518
META.yml 25443
Makefile.PL 81145
README 871318
README.md 0141
README.mkdn 01452
SIGNATURE 0381
TODO 260
bin/dancer 01411
cpanfile 063
doap.xml 01821
lib/Dancer/App.pm 131
lib/Dancer/Config/Object.pm 120
lib/Dancer/Config.pm 3752
lib/Dancer/Continuation/Halted.pm 131
lib/Dancer/Continuation/Route/ErrorSent.pm 131
lib/Dancer/Continuation/Route/FileSent.pm 131
lib/Dancer/Continuation/Route/Forwarded.pm 131
lib/Dancer/Continuation/Route/Passed.pm 131
lib/Dancer/Continuation/Route/Templated.pm 131
lib/Dancer/Continuation/Route.pm 131
lib/Dancer/Continuation.pm 131
lib/Dancer/Cookbook.pod 4928
lib/Dancer/Cookie.pm 817
lib/Dancer/Cookies.pm 925
lib/Dancer/Deployment.pod 826
lib/Dancer/Deprecation.pm 126
lib/Dancer/Development/Integration.pod 225
lib/Dancer/Development.pod 227
lib/Dancer/Engine.pm 917
lib/Dancer/Error.pm 1425
lib/Dancer/Exception/Base.pm 124
lib/Dancer/Exception.pm 324
lib/Dancer/Factory/Hook.pm 131
lib/Dancer/FileUtils.pm 2517
lib/Dancer/GetOpt.pm 131
lib/Dancer/HTTP.pm 323
lib/Dancer/Handler/Debug.pm 436
lib/Dancer/Handler/PSGI.pm 226
lib/Dancer/Handler/Standalone.pm 131
lib/Dancer/Handler.pm 436
lib/Dancer/Hook/Properties.pm 330
lib/Dancer/Hook.pm 431
lib/Dancer/Introduction.pod 2346
lib/Dancer/Logger/Abstract.pm 1020
lib/Dancer/Logger/Capture/Trap.pm 2851
lib/Dancer/Logger/Capture.pm 2347
lib/Dancer/Logger/Console.pm 819
lib/Dancer/Logger/Diag.pm 819
lib/Dancer/Logger/File.pm 819
lib/Dancer/Logger/Note.pm 819
lib/Dancer/Logger/Null.pm 819
lib/Dancer/Logger.pm 325
lib/Dancer/MIME.pm 225
lib/Dancer/ModuleLoader.pm 1019
lib/Dancer/Object/Singleton.pm 919
lib/Dancer/Object.pm 1020
lib/Dancer/Plugin/Ajax.pm 426
lib/Dancer/Plugin.pm 325
lib/Dancer/Plugins.pod 225
lib/Dancer/Renderer.pm 131
lib/Dancer/Request/Upload.pm 442
lib/Dancer/Request.pm 234
lib/Dancer/Response.pm 1037
lib/Dancer/Route/Cache.pm 1221
lib/Dancer/Route/Registry.pm 031
lib/Dancer/Route.pm 433
lib/Dancer/Serializer/Abstract.pm 232
lib/Dancer/Serializer/Dumper.pm 131
lib/Dancer/Serializer/JSON.pm 227
lib/Dancer/Serializer/JSONP.pm 095
lib/Dancer/Serializer/Mutable.pm 1559
lib/Dancer/Serializer/XML.pm 127
lib/Dancer/Serializer/YAML.pm 127
lib/Dancer/Serializer.pm 222
lib/Dancer/Session/Abstract.pm 3582
lib/Dancer/Session/Simple.pm 323
lib/Dancer/Session/YAML.pm 123
lib/Dancer/Session.pm 1235
lib/Dancer/SharedData.pm 131
lib/Dancer/Template/Abstract.pm 123
lib/Dancer/Template/Simple.pm 022
lib/Dancer/Template/TemplateToolkit.pm 123
lib/Dancer/Template.pm 123
lib/Dancer/Test.pm 534
lib/Dancer/Timer.pm 919
lib/Dancer/Tutorial.pod 625
lib/Dancer.pm 3037
script/dancer 15500
t/00-compile.t 0146
t/000-report-versions-tiny.t 0119
t/00_base/002_strict_and_warnings.t 11
t/00_base/14_changelog.t 2440
t/03_route_handler/06_redirect.t 15
t/03_route_handler/12_response_halt.t 018
t/03_route_handler/16_embedded_prefixes.t 051
t/03_route_handler/30_forward_session.t 027
t/03_route_handler/36_false_routes.t 023
t/07_apphandlers/06_debug.t 116
t/07_apphandlers/08_is_text.t 017
t/08_session/09_session.t 214
t/08_session/12_session_name.t 126
t/12_response/04_charset_server.t 169
t/12_response/10_error_dumper.t 511
t/12_response/10_error_dumper_without_clone.t 034
t/14_serializer/05_request_mutable.t 346
t/14_serializer/06_api.t 911
t/14_serializer/07_request_jsonp.t 021
t/14_serializer/18_mutable_template_or_serialize.t 036
t/15_plugins/05b_plugins_and_c3.t 050
t/19_dancer/01_script.t 11
t/19_dancer/02_script_version_from.t 11
t/23_dancer_tests/03_uris.t 018
t/lib/TestAppUnicode.pm 08
t/lib/TestPluginMRO.pm 018
122 files changed (This is a version diff) 476713067
@@ -26,23 +26,30 @@ A huge thank you to all of them!
 
                 [ CONTRIBUTORS ]
 
+    a-adam <ac@univie.ac.at>
     Achim Adam <achim.adam@(none).com>
     Adam J. Foxson <afoxson@pobox.com>
+    Akash Ayare <akash@hairynandgate.com>
     Al Newkirk <github@alnewkirk.com>
     Alan Haggai Alavi <alanhaggai@alanhaggai.org>
     Alex Kalderimis <alex.kalderimis@gmail.com>
     Alex Kapranoff <kapranoff@gmail.com>
     Andrei <dread.deimos@gmail.com>
+    Andy <andy@broadbean.com>
     Anirvan Chatterjee <anirvan@base.mx.org>
     Anton Gerasimov <me@zyxmasta.com>
+    asergei <asergei@gmail.com>
     Ask Bjørn Hansen <ask@develooper.com>
+    Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
     boris shomodjvarac <shomodj@oginwm09.(none)>
     Brian E. Lozier <brian@massassi.com>
     Brian Phillips <brian@thephillips.info>
     burnersk <burnersk@(none.com)>
     Chris Andrews <chrisandrews@venda.com>
+    Chris Seymour <chris.j.seymour@hotmail.com>
     chromatic <chromatic@wgz.org>
     Colin Keith <colinmkeith@gmail.com>
+    Colin Kuskie <colink@perldreamer.com>
     Craig <craig.treptow@gmail.com>
     Craig Treptow <craig.treptow@gmail.com>
     Daniel Perett <daniel.perett@(none)>
@@ -84,6 +91,7 @@ A huge thank you to all of them!
     Maurice <mauricemengel@gmail.com>
     Max Maischein <corion@corion.net>
     Michael G. Schwern <schwern@pobox.com>
+    Michal Wojciechowski <odyniec@odyniec.net>
     Mikolaj Kucharski <mikolaj@kucharski.name>
     mlbarrow <mlbarrow@(none)>
     mokko <mauricemengel@gmail.com>
@@ -113,6 +121,8 @@ A huge thank you to all of them!
     Scott Penrose <scott.penrose@(none)>
     sdeseille <sebastien.deseille@gmail.com>
     Sebastian de Castelberg <sebu@kpricorn.org>
+    Skeeve <github.mails.skeeve@xoxy.net>
+    smashz <mestre.smash@gmail.com>
     Stefan Hornburg (Racke) <racke@linuxia.de>
     Tatsuhiko Miyagawa <miyagawa@bulknews.net>
     tednolan <tednolan@(none).com>
@@ -1,2149 +0,0 @@
-Revision history for Dancer
-
-1.3120 24.12.2013
-
-    [ ENHANCEMENTS ] 
-    * GH #974: Make plugins play nicely with mro 'c3'. (Fabrice Gabolde)
-
-    [ DOCUMENTATION ]
-    * GH #972: Correction of a truckload of typos. (David Steinbrunner)
-    * GH #971: Stress that the request's 'env()' method is prefered over
-        accessing '%ENV' directly. (isync)
-    * GH #968: Fix 'ScriptAlias' example in Deployment docs. (reported
-        by tednolan)
-    * GH #976: Document and trap limitation in Dancer::Test. (Tom Hukins)
-    * GH #976: Improve references to related modules. (Tom Hukins)
-
-1.3119 26.10.2013
-
-    [ ENHANCEMENTS ]
-    * GH #965: Serializer also serialize content for DELETE.
-        (reported by Achim Adam)
-
-    [ BUG FIXES ]
-    * GH #959: hash randomization could cause .pl MIME to vary and test
-        to fail. (Olof Johansson)
-    * GH #961: fix bug in require_environment's logic. (reported by
-        sapphirecat)
-
-    [ DOCUMENTATION ]
-    * GH #962: Improvements of the Dancer::Test docs. (Tom Hukins)
-    * GH #970: Small documentation edit. (Matthew Horsfall)
-
-1.3118 01.09.2013
-
-    [ ENHANCEMENTS ]
-    * GH #946: new 'require_environment' setting. (Jesse van Herk)
-    * GH #952: don't set defaults for Template subclasses for 
-        Dancer::Template::TemplateToolkit. (Rick Myers)
-    * GH #945: add function 'template_or_serialize' to
-        Dancer::Serializer::Mutable. (Yanick Champoux)
-
-    [ BUG FIXES ]
-    * GH #655: clarify logger error message. (Yanick Champoux, 
-        reported by Gabor Szabo)
-    * GH #951: fix quoting of TemplateToolkit start_tag/stop_tag.
-        (Rick Myers)
-    * GH #940: carry over the session when we forward(). 
-        (Yanick Champoux, reported by sciurius)
-    * GH #954: don't die on autoflush for older perls. 
-        (Yanick Champoux, reported by metateck and David Golden)
-    * GH #950: Dancer::Test functions now populate REQUEST_URI.
-        (Yanick Champoux, reported by Sören Kornetzki)
-
-    [ DOCUMENTATION ]
-    * GH #942: simpilify the Apache deployment docs for cgi/fcgi.
-        (bug report by Scott Penrose)
-
-    [ MISC ]
-    * GH #949: fixes a few errors in the serializer testsuite. 
-        (Franck Cuny)
-
-1.3117 31.07.2013
-
-    [ ENHANCEMENTS ]
-    * GH #836: Provide more information when an engine fails to load.
-        (Yanick Champoux, reported by Daniel Perrett)
-
-    [ BUG FIXES ]
-    * GH #794: Upload data was not kept for forwarded requests. 
-        (reported by William Wolf)
-    * GH #898: calling halt() doesn't discard set headers anymore. 
-        (Yanick Champoux, reported by Nicolas Franck)
-    * GH #842: embedded 'prefix' now properly localized. 
-        (Yanick Champoux, reported by Jashank Jeremy)
-
-    [ DOCUMENTATION ]
-    * GH #938: fix doc typos in Dancer::Serializer. (Fabrice Gabolde)
-    * GH #712: add all status codes known to Dancer to Dancer::HTTP. 
-        (Yanick Champoux, reported by Brian J Miller)
-    * Add warning that 'forward' doesn't preserver the session. (Alberto Simões)
-    * GH #941: minor correction to code snippets in documentation. 
-        (Grzegorz Rożniecki)
-    * GH #929: add warning on the use of Corona as underlying web server. 
-        (issue reported by berekuk)
-    * GH #943: remove mention to 'Dancer::Plugin::Validation', 
-        clean 'dancer -a' sample output. (Grzegorz Rożniecki)
-
-1.3116 03.07.2013
-
-    [ ENHANCEMENTS ]
-    * GH #767: forwarded_for_address() now looks for HTTP_X_FORWARDED_FOR if
-        X_FORWARDED_FOR is not there. (Jakob Voss)
-    * GH #936: Add file locking to file logger. (David Golden)
-    * GH #937: Add details to tutorial. (Craig Treptow)
-
-1.3115 09.06.2013 
-
-    [ BUG FIXES ]
-    * GH #605: pass'ed megasplat with no further routes cause 404, not 500.
-        (vlyon)
-
-    [ DOCUMENTATION ]
-    * GH #934: Added example of HAProxy deployment. (Anton Gerasimov)
-
-    [ MISC ]
-    * Tests now require Test::TCP v1.30+ (previous version had too short a
-        timeout and tests were failing). (Yanick Champoux)
-
-1.3114 02.06.2013
-
-    [ ENHANCEMENTS ]
-    * GH #919: 'dancer' script exits with code 255 if application 
-        name is invalid. (ppisar)
-    * GH #871: now recognize HTTP_X_FORWARDED_PROTO. (mlbarrow)
-    * GH #926: make messages from fatal warnings show up in the logs. 
-        (Max Maischein)
-    * GH #930: speed improvement. (ichesnokov)
-    * GH #859: strip illegal characters from cookie name. (Colin Keith)
-    * GH #924: non-'/' apps behind proxies now possible using 'request-base'
-        header. (Mikolaj Kucharski)
-
-    [ BUG FIXES ]
-    * GH #724: app.pl obeys --confdir. (Yanick Champoux)
-    * GH #927: logging format using 'h' now play nicely if no header present.
-        (ironcamel)
-
-    [ DOCUMENTATION ]
-    * GH #922: Add example of request parameters. (Gabor Szabo)
-    * Add scheme line for ngnix config in D::Deployment.
-
-1.3113 08.05.2013
-
-    [ ENHANCEMENTS ]
-    * GH #869: leave body parameters alone if deserialization failed
-        (brianphillips).
-    * GH #912: send_file was returning 500 instead of 404 for non-existent
-        files. (Fabrice Gabolde)
-    * GH #914: add link to melezhik's psgi chef cookbook.
-    * GH #923: implement lazy session flushing. (David Golden)
-
-    [ BUG FIXES ]
-    * GH #920: fix pod for Dancer::Development. (ppisar)
-
-    [ DOCUMENTATION ]
-    * GH #915: add warning about behaviour of hooks with multiple packages
-     loaded by load_app (racke).
-    * GH #918: Fix headers syntax in Dancer::Response perldoc
-      (Vyacheslav Matyukhin).
-
-
-1.3112 10.04.2013
-
-    [ ENHANCEMENTS ]
-    * GH #897 dancer script diagnostic more explicit if target directory   
-        does not exist or is not writable (reported by Andrew Grangaard).
-    * GH #907: skip tests of deprecated features (mokko).
-
-    [ BUG FIXES ]
-    * GH #900: backport the security patch for Dancer::ModuleLoader
-        from Dancer2 (mokko).
-
-1.3111_02 01.04.2013
-
-    [ BUG FIXES ]
-    * RT #84198: silencing wide-character in-memory file handle error
-        (Tom Wyant).
-    * wrong number of tests to skip in t/14_serializer/01_helpers.t.
-
-
-1.3111_01 30.03.2013
-
-    [ ENHANCEMENTS ]
-    * GH #895: JSON serializer now uses JSON's "-support_by_pp"
-        (Jonathan Schatz).
-
-    [ BUG FIXES ]
-    * GH #891: silenced warnings from non-numeric versions in Makefile.PL
-        (Olof Johansson).
-    * GH #702: fix request->header call throwing exceptions inside routes 
-        of Dancer->dance($request)  (Perlover).
-    * GH #893, GH #636: handle binary files for uploads in Dancer::Test
-        (Andrei).
-    * GH #903: add plan for subtest (bug report by wfaulk).
-
-    [ DOCUMENTATION ]
-    * GH #899: mention that response_exist and response_doesnt_exist are
-        deprecated (Fabrice Gabolde).
-    * GH #902, #903: change example to use path_info() instead of path()
-        (Anton Ukolov, Lee Carmichael).
-
-1.3111      24.02.2013
-
-    [ BUG FIXES ]
-    * GH #877: fix Dancer Error when so that 'exception' object is not passed
-      to serializers, because XML/JSON serializers don't understand objects
-      (rikbrown).
-    * GH #858: Check for definedness, not truth, when testing if we read
-      into the buffer when parsing a request body (florolf).
-    * GH #845: Fix uninitialized warning when loading modules (Fabrice Gabolde).
-    * GH #851, GH #853: Atomic YAML session writing (Roman Galeev).
-    * GH #852: Saner UTF logging (Roman Galeev).
-    * GH #849, GH #850: Serve autopages with text/html content type.
-      (Philippe Bruhat - BooK)
-    * GH #848: Handle If-Modified-Since header in the request for static files.
-      (Philippe Bruhat - BooK)
-    * GH #848: Send a Last-Modified header for static files.
-      (Philippe Bruhat - BooK)
-    * GH #856: Don't export non-existing subroutine (mokko).
-    * GH #874: Reduce dependence on %ENV for internal code (Kent Fredric).
-    * GH #875: Don't expect specific order in cookies (Yanick Champoux).
-    * Remove 'exception' object from message being passed to serializers. 
-        (Rik Brown)
-    * Added .travis.yml to MANIFEST.SKIP so t/manifest.t passes (Kaitlyn Parkhurst).
-    * GH #887, GH #890: keyword 'global_warnings' added to replace 'import_warnings'
-        (Kaitlyn Parkhurst).
-    * GH #892: add 'private_key' to the list of potentially sensitive keys (Tom Heady).
-
-    [ DOCUMENTATION ]
-    * GH #847: Fix typo (John Wittkoski).
-    * GH #865: Correct 'before' hook documentation (David Precious, Maurice).
-    * GH #860, GH #844, GH #760: Misleading plack middleware documentation.
-      (Paul Fenwick)
-    * GH #862: Fix heading level for strict_config entry in Dancer::Config.
-      (Stefan Hornburg - Racke)
-    * GH #863: Correct example apache config (John Wittkoski).
-    * GH #867: correct doc for ModuleLoader::load_with_params (mokko).
-    * Document route_cache option (David Precious).
-    * Docs for route_cache_size_limit & route_cache_path_limit (David Precious).
-    * Remove meaningless 'encoding' to TT config (David Precious).
-    * Remove docs for mounting multiple apps (Naveed Massjouni).
-    * Update doc URLs (David Precious).
-    * Fix inconsistency in Perlbal deployment example (Slaven Rezić, Racke).
-    * GH #894: Replace spurious character in Dancer::Session's POD (Racke).
-    * GH #880: Add deprecation mention for 'after' (pdl and Yanick Champoux).
-
-
-1.3110      06.10.2012
-
-    [ BUG FIXES ]
-    * GH #817, #823, #825: Removing Clone from core. Pure-perl environments
-      supported again (Sawyer X).
-    * GH #755, #819, #827, #828: HTTP::Headers accepted by dancer_response
-      (Roberto Patriarca, Dagfinn Ilmari Mannsåker, draxil, perlpong).
-
-    [ ENHANCEMENTS ]
-    * GH #826: The version of wallflower shipped with Dancer has been removed.
-      It was well out of date.  BooK is now maintaining it as a more general
-      solution under the name App::Wallflower. (BooK)
-    * GH #834: Provide empty Headers object if not defined (Yanick Champoux).
-    * GH #840, #841: Dancer::Plugin::Ajax now has content_type (Lee Carmichael).
-
-    [ DOCUMENTATION ]
-    * GH #821: Pointing to new homepage (alfie).
-    * GH #822: Typos in documentation (Stefan Hornburg - racke).
-    * GH #824: Fix in Dancer/Session.pm (pdl).
-    * GH #830: Fix Github links to https:// (Olivier Mengué).
-    * GH #838: Error in Dancer::Plugin::Ajax Documentation (Lee Carmichael).
-    * GH #839: Typo (goblin).
-
-1.3100      25.08.2012
-
-    [ BUG FIXES ]
-    * GH #816: Improve wording when failed to load engine. (Sawyer X)
-    * GH #817: Fix CODE reference uncloned using Clone::clone.
-      (David Previous, Sawyer X)
-
-    [ ENHANCEMENTS ]
-    * GH #755: HTTP::Headers accepted by dancer_response. (Roberto Patriarca)
-
-    [ DOCUMENTATION ]
-    * GH #818: Use "MyWeb::App" instead of "mywebapp" in examples. (pdl)
-
-1.3099      11.08.2012
-
-    [ BUG FIXES ]
-    * GH #683: Fix uninitialized warnings. (Sawyer X)
-    * GH #700: Take into account the app name in route caching. (Perlover)
-    * GH #775: Clone variables for templates.
-      (Reported by Wanradt Koell, fixed by David Precious, Sawyer X)
-    * GH #776: get should be default to get/head even it's inside any.
-      (Fayland Lam)
-    * GH #788: Make sure ID key in sessions are clobbered. (kocoureasy)
-    * Fix uninitialized variables in config file path. (Sawyer X)
-    * GH #809: Require all necessarily modules in Dancer::Config.
-      (John Wittkoski)
-
-    [ ENHANCEMENTS ]
-    * GH #799: New test function: response_redirect_location_is. (Martin Schut)
-    * send_file now accepts an IO::Scalar. (David Precious)
-    * Clean up $VERSION. (Damien Krotkine)
-
-    [ DOCUMENTATION ]
-    * GH #784: Synopsis fix in Dancer::Error. (Alex C)
-    * Document session_domain in Dancer::Config. (David Precious)
-    * Pod fixes in abstract session. (David Precious)
-    * Synopsis fix in Dancer::Test. (Stefan Hornburg <Racke>)
-
-1.3098      28.07.2012
-
-    [ ENHANCEMENTS ]
-    * New keyword 'plugin_args' exported by Dancer::Plugin to provide
-      a consistent way with Dancer 2 to obtain arguments from a plugin
-      keyword. (Alberto Simões).
-    * Add 'execute_hook' and deprecate 'execute_hooks' for homogeneity
-      with Dancer 2.
-    * send_file will do the right thing if given an IO::Scalar object
-      (David Precious, prompted by Ilya Chesnokov).
-
-    [ DOCUMENTATION ]
-    * Fix escaping on some docs (Stefan Hornburg @racke).
-
-1.3097      08.07.2012
-
-    [ ENHANCEMENTS ]
-    * New keywords 'register_hook' and 'execute_hooks' exported by
-      Dancer::Plugin to provide a consistent way with Dancer 2 to declare and
-      run hooks from within a plugin (Alexis Sukrieh, idea from David Precious).
-
-1.3096      06.07.2012
-    ** Codename: Chop Hooey // Neil Hooey **
-
-    [ ENHANCEMENTS ]
-    * Finally released, thanks to Neil Hooey bugging my sorry ass.
-
-1.3095_02   03.07.2012
-
-    [ BUG FIXES ]
-    * fix exception tests in some cases (GH #734) (Damien Krotkine & katkad )
-
-    [ ENHANCEMENTS ]
-    * If YAML does not load, Dancer::Config now reports why (Ovid)
-
-    [ DOCUMENTATION ]
-    * Clarify serialization in introduction POD (Mark A. Stratman)
-    * Typo fix (Sam Kington)
-
-1.3095_01   22.06.2012
-
-    [ BUG FIXES ]
-    * Don't assume returned references are blessed when considering
-      continuations (Neil Hooey, GH-778)
-    * Malformed/missing cookies caused warnings 
-      (James Aitken/LoonyPandora, GH-782 and GH-783)
-    * Avoid potential crash in t/14_serializer/06_api.t if tmp dir is replaced
-      when %ENV gets cleared (Adam Kennedy)
-    * Properly initialize %callbacks to default empty hashref  in _send_file if 
-      not provided (Gary Mullen)
-
-    [ ENHANCEMENTS ]
-    * Add UTC timestamp options for logger_format (Alex C - perlpong).
-    * Tests can now run in parallel (Richard Simões).
-    * dancer_version keyword added (Damien "dams" Krotkine).
-    * New session_domain paramter allows you to set the domain of the default
-      session cookie (William Wolf)
-
-    [ DOCUMENTATION ]
-    * Update Ubic service example (Vyacheslav Matyukhin)
-    * Silly typo fixing (Paul Fenwick)
-    * Typo in Dancer::Test file upload example (Jonathan "Duke" Leto)
-    * UTF-8 fixes in POD (ambs)
-
-1.3095      01.04.2012
-
-    [ BUG FIXES ]
-    * Small fix to skip tests when YAML is not available.
-      (Sawyer X)
-
-    [ ENHANCEMENTS ]
-    * Added 'info' log level for messages that should always go to the logs
-      but aren't really debug, warning or error messages (Ovid)
-
-1.3094      31.03.2012
-
-    [ BUG FIXES ]
-    * GH #763: Fix exceptions in ajax routes clobbering layout (ilmari)
-    * GH #748 & GH 647: Don't force override environment from PLACK_ENV (jwittkoski)
-    * GH #762: fix param parsing lacking limit on split (leejo)
-    * GH #758: Fix Dancer::Test: make sure the request is properly converted to
-      a response. (Ovid)
-    * GH #729: Fix dancer exception composition, and message pattern application
-      (Damien Krotkine)
-    * GH #752: Exceptions raised in hooks were not propagated back to the route
-      code, but instead canceleld and replaced by a Dancer halt exception. That
-      was wrong. Now it is fixed, exceptions raised in hooks can be properly
-      caught in route code.
-      (Damien Krotkine)
-    * Be more flexible in single vs. mutliple values in key hiding.
-      (Sam Kington)
-    * Use isa() for checking relationships instead of ref() in Dancer::Test.
-      (Ovid)
-
-    [ ENHANCEMENTS ]
-    * Added 'strict_config' option to have the config return an object instead
-      of a hashref. (Ovid)
-    * GH #708: Added support for query strings in dancer_request (Jacob Rideout)
-    * It's possible for the user to set the environments directory using a new
-      environment variable (DANCER_ENVDIR) or using `set envdir => $path`
-    * Sort hash keys when serializing references in log messages (Ovid).
-
-    [ DOCUMENTATION ]
-    * Explain in POD that if there are multiple fields with the same name,
-      params('fieldname') returns an arrayref of them (alexrj).
-    * GH #750: Fix in Dancer::Deployment: appdir needs to be set before calling
-      load_app (Paul Johnson)
-    * Update 'before' hook document (David Cantrell).
-
-1.3093      29.02.2012
-
-    [ BUG FIXES ]
-    * GH #738: Define exception type ::Core::Request, to avoid things blowing 
-      up when Dancer::Request raises exceptions of that type
-      (David Precious, thanks to damog for reporting)
-    * GH #671: Fix Dancer::Plugin::Ajax with Plack::Builders.
-      (Activeg, Sawyer X)
-    * Auto-page feature cleanup and fixup. (David Precious)
-    * Remove uninitialized warnings. (Sawyer X, David Precious)
-
-    [ ENHANCEMENTS ]
-    * Winning release race to Catalyst (nice try rafl++!)
-    * Add exception type ::Core::Request. (David Precious)
-    * JSON decode from UTF8. (Sam Kington)
-    * Provide the method when a route crashes to help debug. (Sam Kington)
-    * More helpful log messages. (David Precious)
-
-    [ DOCUMENTATION ]
-    * Fix examples for multi-app deployment under Plack::Builder in deployment.
-    * Deployment docs. (c0bra)
-    * Update tutorial. (David Precious)
-    * Clean up EXPORTS. (David Precious)
-    * Keyword documentation fixups. (Kirk Kimmel)
-    * Clarify forward docs with better examples. (David Precious)
-
-1.3092      27.01.2012
-
-    [ BUG FIXES ]
-    * Don't call isa() on unblessed refs in Dancer::Exception. (Sam Kington)
-    * Assume UTF-8 by default when serialising JSON. (Sam Kington)
-    * GH #725: If a cookie is set multiple times, last value wins.
-      (David Precious)
-    * More intuitive, backwards compatible appending of default template 
-      extension. (GH #716, David Precious)
-    * Prevent recursion in censoring. (Yanick Champoux, Damien dams Krotkine)
-    * GH #734: More tests flexibility (Sawyer X, reported by @birdy-)
-
-    [ ENHANCEMENTS ]
-    * Return the current set prefix using prefix(). (Michal Wojciechowski)
-    * More intuitive appending of default template extension. Makes for cleaner
-      more DWIM code. (David Precious, reported by Nick Knutov)
-    * Allow any options to JSON serializer. (Lee Johnson)
-    * Support complex views with multiple document roots. (Pedro Melo)
-
-    [ DOCUMENTATION ]
-    * Document how to work with Dotcloud. (Oliver Gorwits)
-    * Clean ups and fix ups. (David Precious, Sawyer X, Michal Wojciechowski)
-
-1.3091      17.12.2011
-
-    [ BUG FIXES ]
-    * Reverting template() behavior by popular demand. (Damien Krotkine)
-    * GH #714: Run post-request hooks when custom continuations were created.
-      (Damien Krotkine)
-    * Always call write_session_id() to update expires. (David Precious)
-
-    [ ENHANCEMENTS ]
-    * GH #711, #652: Add server_tokens variable to allow removal of headers.
-      (John Wittkoski)
-
-    [ DOCUMENTATION ]
-    * GH #680: Document problems with multiple apps in Dancer using
-      Plack::Handler::Apache2 and recommend a workaround.
-      (Asaf Gordon, Pedro Melo)
-    * RT #73258: Spelling glitches. (Damyan Ivanov)
-    * Use ":script" instead of ":syntax" in Cookbook. (John Barrett)
-    * Typos in Deployment doc. (David Precious)
-
-1.3090      13.12.2011
-    ** Codename: Hornburg of Hannover // Stefan Hornburg (racke) **
-
-    [ BUG FIXES ]
-    * GH #685: Set VERSION for Dancer::Plugin::Ajax.
-      (Sawyer X, Naveed Massjouni)
-
-    [ DOCUMENTATION ]
-    * GH #694: Typo fix. (Yanick Champoux)
-    * GH #698: Document further TT init options. (Dennis Lichtenthaeler)
-    * GH #709: Update POD documentation regarding hook. (Stefan Hornburg)
-
-1.3089_01   26.11.2011
-
-    [ BUG FIXES ]
-    * Fix bug that made system() fail with -1 under Dancer (felixdo).
-    * Support for 'content_type' option on send_file when sending a
-      system wide file (Emmanuel Rodriguez).
-    * Support HTTP_X_FORWARDED_HOST in behing proxy (Ipaponov).
-    * Deserialize PATCH requests (Sam Kington).
-    * Encode log messages properly if charset UTF-8 is set (David Precious,
-      thanks to Penfold for the fix & MiklerGM for reporting).
-
-    [ ENHANCEMENTS ]
-    * Continuations-style exception system! (Damien Krotkine).
-    * The ability for dancer_response to send file contents for file uploads
-      as a scalar, instead of reading from file on disk (Squeeks).
-
-    [ DOCUMENTATION ]
-    * Clean up "plack_middlewares" example in docs (Richard Simões).
-
-1.3080      25.10.2011
-    ** Codename: Sawyer's Sugar Stream // Sawyer X **
-
-    [ ENHANCEMENTS ]
-    * No functional changes, just releasing as stable.
-
-1.3079_05   02.10.2011
-
-    [ API CHANGES ]
-    * Deprecation of 'before', 'before_template' and 'after' in favor of hook
-      (Alberto Simões)
-
-    [ BUG FIXES ]
-    * Minor corrections (jamhed, felixdo)
-    * Log if a view and or a layout is not found (Alberto Simões, reported
-      by David Previous)
-
-    [ ENHANCEMENTS ]
-    * Add support for the HTTP 'PATCH' verb (David Precious)
-
-1.3079_04   02.10.2011
-
-    [ ENHANCEMENTS ]
-    * PSGI handler code cleaned up (chromatic).
-    * Improved warning localizations (chromatic).
-
-    [ DOCUMENTATION ]
-    * Dancer::Plugins typos (Olof Johansson).
-    * PSGI handler documented (chromatic).
-
-1.3079_03   10.09.2011
-
-    [ ENHANCEMENTS ]
-    * Support XML::Simple configuration for serializing/deserializing
-      (Alberto Simões)
-    * Hard deprecate lots of stuff (Alberto Simões)
-
-    [ BUG FIXES ]
-    * Don't clobber TT INCLUDE_PATH if the user set it specifically in the
-      config file - Issue 643 (David Precious, reported by meraxes)
-    * Don't require a space after semi-colon delimiting multiple name=value
-      cookie pairs - Issue 642 (David Precious, reported by travisbeck)
-
-1.3079_02   28.08.2011
-
-    [ BUG FIXES ]
-    * Remove hard-coded version from 404.html and 500.html (Alberto Simões)
-    * Fix logging of UTF8-encoded strings (jamhed)
-    * Do not clean 'vars' during forward (Alberto Simões)
-
-    [ ENHANCEMENTS ]
-    * Add streaming support to send_file. (Sawyer X)
-
-1.3072      23.08.2011
-    ** Codename: Precious David Precious // David Precious (bigpresh) **
-
-    [ ENHANCEMENTS ]
-    * No functional changes, just releasing as stable.
-
-1.3079_01   17.08.2011
-
-    [ BUG FIXES ]
-    * Fix prefix behavior with load_app (alexrj)
-    * send_file() shouldn't clobber previously-set response status
-      (David Precious, reported by tylerdu - thanks!)
-    * Depend on URI 1.59 - Fixes problems when redirecting with
-      UTF-8 strings (Alberto Simões)
-    * Fix before_serializer POD fix (Yanick Champoux)
-
-    [ ENHANCEMENTS ]
-    * send_file can send data (pass a reference to a scalar), and can
-      specify a content-disposition filename. (Alberto Simões)
-    * Set 'Server' HTTP response header as well as 'X-Powered-By'.  For cases
-      where Dancer is being accessed directly, or the proxy passes on this
-      header, it's nice to see it.  (David Precious)
-
-    [ DOCUMENTATION ]
-    * Cookbook links to canonical documentation of keywords in Dancer.pm, so
-      readers encountering a new keyword can easily see the docs for it
-      (David Precious)
-    * Docs for debug/warning/error link to Dancer::Logger for details on how to
-      control where logs go (David Precious)
-    * Document import_warnings option, and mention it & link to that
-      documentation in opportune places.
-    * Document that 'get' also creates a route for 'HEAD' requests
-      (David Precious, prompted by Matt S Trout)
-    * Extend request() keyword docs with examples (David Precious)
-    * Correct port in Lighty/FCGI example in Dancer::Deployment
-      (David Precious, thanks to pwfraley in Issue 621)
-
-1.3071     26.07.2011
-    ** Security release based on 1.3070 **
-
-    [ SECURITY ]
-    * FIX directory traversal issue
-      Since 1.3070, it was possible to abuse the static file serving feature to
-      obtain files from a directory immediately above the directory configured to
-      serve static files from.
-      (Vladimir Lettiev and David Precious)
-
-1.3070      14.07.2011
-    ** Codename: The Exceptional Mr. Dams // Damien Krotkine (dams) **
-
-    [ ENHANCEMENTS ]
-    * No functional changes, just releasing as stable.
-
-1.3069_02   10.07.2011
-
-    [ BUG FIXES ]
-    * Fix a bunch of cpan testers reports 
-      (Alberto Simões)
-
-1.3069_01   07.07.2011
-
-    [ BUG FIXES ]
-    * Fix a bug while parsing some cookies
-      (Franck Cuny)
-    * Documentation and tests on how to use many Dancer application
-      inside one PSGI file (PR 564)
-      (Alex Kalderimis and Franck Cuny)
-    * More flexible test for locale-aware logging (Alberto Simões)
-    * Do not re-read config files when dance starts if they were
-      already loaded.  (Alberto Simões)
-    * Fixed shell-dependent tests for Window testing. (Alberto Simões)
-    * Die properly if halt is call inside an hook.
-      (Damien Krotkine and Alberto Simões)
-    * Make template work outside of requests (Issue 592) (David Precious)
-    * Cleanup session tests folder (Issue 594) (Sawyer X)
-
-    [ ENHANCEMENTS ]
-    * Error Hook (PR 563 - JT Smith)
-    * Exceptions system (Damien Krotkine)
-    * The no prefix can be set using 'prefix "/";' (Alberto Simões)
-    * Support for nested prefixes (Alberto Simões)
-    * Cleanup on Dancer::FileUtils (Sawyer X)
-    * Cleanup on File::Temp dependencies (Sawyer X)
-
-    [ DOCUMENTATION ]
-    * Documentation on tokens automatically added to templates.
-      (Alberto Simões)
-    * Documentation on serializer magical access to put/posted data.
-      (Alberto Simões)
-
-1.3060      15.06.2011
-    ** Codename: Pirouetting Pedro // Pedro Melo **
-
-    [ ENHANCEMENTS ]
-    * No functional changes, just releasing as stable.
-
-1.3059_04   12.06.2011
-
-    [ BUG FIXES ]
-    * Fix a bunch of cpan testers reports 
-    (Alberto Simões)
-
-1.3059_03   11.06.2011
-
-    [ BUG FIXES ]
-    * Fix for issue #539
-      https://github.com/sukria/Dancer/issues/539
-      Don't decode twice entries in the params hash table, file 
-      uploads with UTF-8 characters in their name are now possible.
-      (Toby Corkindale, Alexis Sukrieh)
-    * Fix broken test with old version of HTTP::Parser::XS
-      (Franck Cuny)
-    * #492 - Don't run Test::TCP tests on win32
-      (Franck Cuny)
-    * Fix a bug that when forwarding a post with post data stalled the
-      code (read on no data handle).  (Alberto Simões)
-    * Tweak tests regular expression to be more flexible (Pedro Melo)
-    * Require a recent Test::TCP (1.13) to run tests. (Alberto Simões)
-    * Fix hooks implementation that failed when user messes $_ (Pedro Melo)
-    * Fix broken params('query') and params('body') during forward and
-      dancer_request test function. (Alberto Simões and Squeek)
-
-    [ ENHANCEMENTS ]
-    * Fix for issue #516
-      https://github.com/sukria/Dancer/issues/516
-      No more legacy code in Dancer::Route to handle routes created 
-      with the deprecated keyword "r". The related code is now more 
-      concise and should be slightly more efficient.
-      (Alexis Sukrieh)
-    * Merge PR #541
-      https://github.com/sukria/Dancer/pull/541
-      New "param" accessor to retrieve a parameter easily.
-      (Alberto Simões)
-    * Implement session directory testing cache for Session::YAML
-      (Damien Krotkine)
-    * Tests rework (improve speed, remove useless tests, ...)
-      (Alberto Simões and Franck Cuny)
-    * Configuration for log_dir and log_file.
-      (Alberto Simões)
-    * Pass vars to templates automatically (David Precious)
-    * Support lexical prefix (Pedro Melo)
-
-    [ DOCUMENTATION ]
-    * Improve FileUtils documentation. (mokko)
-
-1.3059_02   29.05.2011
-
-    [ BUG FIXES ]
-    * Fix for smoker failure under Perl 5.13.4
-      http://www.cpantesters.org/cpan/report/b37416b8-88df-11e0-9c74-cad5bcb8094c
-      Better use of Time::Hires in t/22_hooks/04_template.t
-      (Franck Cuny)
-
-1.3059_01   27.05.2011
-
-    [ API CHANGES ]
-    * Second level of deprecation for render_with_layout method.
-      (Alberto Simões)
-    * Second level of deprecation for mime_type method.
-      (Alberto Simões)
-
-    [ BUG FIXES ]
-    * Dancer::Test was broken for tests using data in POST (GH#534)
-      (Franck Cuny)
-    * Multiple setter implemented at 1.3039_01 was broken for App
-      specific settings.
-      (Alberto Simões)
-
-    [ ENHANCEMENTS ]
-    * Cookie accessor to manipulate cookies directly.
-      (Niko)
-
-    [ DOCUMENTATION ]
-    * Improve Serializers documentation
-      (Damien Krotkine)
-
-1.3051      27.05.2011
-    ** Security release based on 1.3050 **
-
-    [ SECURITY ]
-    * FIX CVE-2011-1589 (Mojolicious report, but Dancer was vulnerable as well).
-      Return "400 Bad Request" when requested filename seems suspicious
-      http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-1589
-      (Vladimir Lettiev and Franck Cuny)
-
-1.3050      20.05.2011
-    ** Codename: The Captain Hook Adventure // Franck Cuny **
-
-    [ ENHANCEMENTS ]
-    * No functional changes, just releasing as stable.
-
-    [ DOCUMENTATION ]
-    * Improve Dancer documentation
-      (Damien Krotkine)
-
-1.3049_01   14.05.2011
-
-    [ API CHANGES ]
-    * Deprecation of 'logger' (use set). (Alberto Simões)
-    * Deprecate 'layout' (use set). (Alberto Simões)
-    * Definitely remove plack_middlewares HashRef deprecation.
-      (Alberto Simões & Damien Krotkine)
-
-    [ BUG FIXES ]
-    * Unbreaking auto_page somewhat - the catch-all route added will
-      pass unless a suitable view exists.  This means that routes like
-      /foo are not obscured, and made up URLs will result in a proper
-      404, not 500.  A little more work required here, though. 
-      (David Precious)
-    * Anchor regular expression routes. Before regular expressions
-      were matching anywhere in the URL.
-      (Alberto Simões)
-
-    [ ENHANCEMENTS ]
-    * GH #519: remove redundant lines from CSS
-      (Alberto Simões)
-    * When scaffolding an app, show a warning if YAML not installed.
-      Prompted by Issue 496.  (David Precious)
-    * Hooks! add new positions for hooks, and possibility to create
-      your own hooks inside your application and your plugin.
-      (Franck Cuny)
-    * Don't try to read/set session vars with empty/undef keys.  It
-      doesn't make sense to do so, and can cause warnings elsewhere.
-      (David Precious)
-    * Check HTTP status code/alias passed to status() is valid;
-      previously, and invalid code would result in the response status
-      being unset
-      (David Precious, prompted on IRC by jonas)
-    * Lowercase status aliases and swap spaces for underscores before
-      trying to match
-      (David Precious, suggested on IRC by jonas)
-    * Added 'behind_proxy' setting, making Dancer honor
-      X_FORWARDED_PROTOCOL and X_FORWARDED_HOST
-      (Alberto Simões, requested by sukria and others)
-
-1.3040      01.05.2011
-    ** Codename: Yanick in Black // Yanick Champoux, Labor Day - May Day **
-
-    [ ENHANCEMENTS ]
-    * No functional changes, just releasing as stable.
-
-1.3039_01   27.04.2011
-
-    [ BUG FIXES ]
-    * Fix 404 results from forwarding.
-      (Alberto Simões)
-    * Don't remove trailing slashes from route patterns under prefix.
-      (Brian E. Lozier)
-    * Remove deprecated r() function from list of exports.
-      (Stefan Hornburg)
-    * GH #402: make session_expires honor +2h style formatting.
-      (Michael G. Schwern)
-    * GH #433: encoding issues with forward().
-      (Alberto Simões)
-    * GH #390: Renaming access_log to startup_info (+doc).
-      (Sawyer X)
-    * Rewrite scalar usage of qw() that is incompatible with 5.14.
-      (Alberto Simões)
-    * Don't parse ARGV when under PSGI (closes #473)
-      (Franck Cuny)
-
-    [ ENHANCEMENTS ]
-    * Forward can change method GH#493
-      (Alberto Simões)
-    * Introducing the "megasplat"!
-      (Yanick Champoux)
-    * More tests for versions, setings and variables.
-      (Alberto Simões)
-    * Improve Dancer::Test so failures report the correct line numbers.
-      (Michael G. Schwern)
-    * GH #466: Can now set cookies with http_only => 0 for JS integration.
-      (Alberto Simões)
-    * Session engine can be told to set cookies without HttpOnly attribute using
-      new session_is_http_only setting.
-      (Alberto Simões, requested by JT Smith)
-    * GH #296: Show versions of loaded modules in startup info.
-      (Sawyer X)
-    * Able to set more than one value at once using set().
-      (Alberto Simões)
-    * GH #253: Use Clone::clone() if available to clone data before censoring.
-      (Sawyer X)
-    * GH #246: Dancer::Test can now test for file uploads as well.
-      (Franck Cuny)
-    * Allow parameters in forward().
-      (Alberto Simões)
-
-    [ DOCUMENTATION ]
-    * Major rewrite/reorganization on Dancer::Config documentation.
-      (David Precious, pushed by Alberto Simões PR)
-    * GH #284: Document hosting multiples Dancer apps in a single PSGI file.
-      (Franck Cuny)
-    * Dancer::Session POD typos and spurious characters.
-      (Stefan Hornburg)
-
-1.3030      13.04.2011
-    ** Codename: Silence of the ambs // Alberto Simões **
-
-    [ ENHANCEMENTS ]
-    * Change the flag for sending system-wide path with send_file to
-      'system_path' (was 'absolute').
-      (Alberto Simões)
-
-1.3029_03   10.04.2011
-
-    [ BUG FIXES ]
-    * Dancer::Session::Cookie 0.14 is required for dependency test.
-    * Only test for undef serializer if we have the default (JSON) available.
-      (Sawyer X)
-
-    [ ENHANCEMENTS ]
-    * Test before_template & auto_page.
-
-1.3029_02   08.04.2011
-
-    [ BUG FIXES ]
-    * Better way to initialize the logdir in Dancer::Logger::File.
-      Works now cleanly if the appdir is not writable but the logdir exist and
-      is writable.
-      (Alberto Simões)
-    * fix warnings in t/03_route_handler/28_plack_mount.t.
-      (Franck Cuny)
-
-    [ ENHANCEMENTS ]
-    * Support for error templates.
-      If the setting "error_template" is set, it is used when building an error
-      page instead of using the default template.
-      Added the appropirate documentation as well.
-      (Alberto Simões)
-    * Dancer::Test::dancer_response() returns a 404 response when no route
-      handler is found. This is consistent with what Dancer does internally.
-      (Alberto Simões)
-    * Dancer::Test provides a new helper for inspecting subsets of headers:
-      "response_headers_include".
-      (Alberto Simões, Alexis Sukrieh)
-    * dancer_response now handles the rendering of static pages as well.
-      (Alberto Simões)
-    * Cleanup some tests.
-      (Alberto Simões)
-
-    [ DOCUMENTATION ]
-    * POD fix.
-      (Stefan Hornburg - Racke)
-
-1.3029_01   01.04.2011
-
-    [ BUG FIXES ]
-    * Fix t/14_serializer/02_json.t to work with older JSON (relates to GH#416)
-      (Damien Krotkine)
-    * the Changelog test now supports Codenames. It suggests to add codenames
-      for table releaes as well
-      (Damien Krotkine)
-    * GH #420: Extra content generated
-      (Alberto Simões, Damien Krotkine)
-    * GH #409: If pass has no more matching routes, return 404.
-      (Alberto Simões)
-
-    [ ENHANCEMENTS ]
-    * GH #396: Test that Dancer::Session::Cookie isn't broken
-      (Michael G. Schwern)
-    * GH #399: Make sure session can have their name changed.
-      (Michael G. Schwern)
-    * Dancer::Test tests assumes 'GET' if their first argument is scalar.
-      (Yanick Champoux)
-    * send_file accepts optional content-type declaration, to override guessed
-      MIME type, e.g. send_file $filename, content_type => 'image/png'
-      (Alberto Simões, requested by Michael G Schwern)
-    * send_file accepts optional absolute option, to send an absolute path
-      (Alberto Simões)
-    * Have `dancer` cmd tool create MANIFEST and MANIFEST.SKIP.
-      (Alberto Simões)
-    * mime_type is deprecated; new keyword 'mime'; new config key
-      'default_mime_type';
-      (Alberto Simões and Michael G. Schwern)
-    * Recognize absolute redirects 
-      (Yanick Champoux)
-
-    [ DOCUMENTATION ]
-    * Add documentation to send_file optional argument
-      (Alberto Simões)
-    * Fix plack_middlewares example in the cookbook
-      (Michael G. Schwern)
-    * Extend the POD on plugin_setting to prevent a pitfall with plugin
-      modules more than 3 levels deep.
-      (Stefan Hornburg)
-    * GH #400: Documenting the plack_middlewares_map.
-      (Michael G. Schwern, Sawyer X)
-    * GH #422: Documenting no need for caret when you have a prefix.
-      (Sawyer X)
-
-1.3020      21.03.2011
-    ** Codename: The Schwern Cometh // Michael G. Schwern **
-
-    [ ENHANCEMENTS ]
-    * No functional changes, just releasing as stable.
-
-1.3019_02   14.03.2011
-
-    [ BUG FIXES ]
-    * GH #354: Tokens are not passed to layout if no params are passed to
-      template.
-      (Damien Krotkine)
-
-1.3019_01   13.03.2011
-
-    [ BUG FIXES ]
-    * GH #393: Reset vars for each new request.
-      (Franck Cuny)
-
-    [ ENHANCEMENTS ]
-    * GH #391: Dancer::Logger::Note now exists. :)
-      (Sawyer X)
-    * Porting documentation on WRAPPER to Dancer::Template::TemplateToolkit.
-      (Sawyer X)
-    * GH #387: Document views and appdir in Dancer::Config.
-      (Michael G. Schwern)
-    * Add a new symbol to exporter ':script'.
-      (Franck Cuny)
-    * GH #397: Support cookie expire times like "+2h".
-      (Michael G. Schwern)
-
-1.3014_01   10.03.2011
-
-    [ BUG FIXES ]
-    * GH #373: Display valid path to the main app file in the welcome screen.
-      (Franck Cuny)
-    * GH #152, GH #170, GH #362: Log dir is not created when logger is not set
-      to 'file', and setting log_path works as expected.
-      (Franck Cuny)
-    * GH #308: Use request's uri_base.
-      (Sawyer X)
-    * GH #378: Some routes with prefix where wrongly matched.
-      (Franck Cuny)
-
-    [ ENHANCEMENTS ]
-    * GH #351: Explicitly exclude some keywords when important Dancer's syntax,
-      add modes that also excludes some keywords (:moose, :tests).
-      (Sawyer X, Naveed Massjouni, Michael G. Schwern, Franck Cuny)
-    * All logging options accept any number of variables.
-      (Sawyer X)
-    * GH #297: All logging options can automatically serialize references.
-      (Sawyer X)
-    * Add Dancer::Logger::Capture to capture and read log messages during
-      testing.
-      (Michael G. Schwern)
-    * Dancer::Cookie make secure (https only) cookies. It also adds the
-      "session_secure" setting instructing sessions to use secure cookies.
-      (Michael G. Schwern)
-    * Adding uri_base to Request.pm.
-      (Sawyer X)
-    * Make Dancer::Test use the capture logger
-      (Michael G. Schwern)
-
-    [ DOCUMENTATION ]
-    * Dancing on command line.
-      (Maurice Mengel)
-    * Improve Dancer::Cookbook.
-      (Maurice Mengel)
-
-1.3014    04.03.2011
-
-    [ BUG FIXES ]
-    * YAML Session UTF-8 Fix
-      (Roman Galeev)
-    * Tests and documentations for Dancer::Request::Upload + type method in
-      Dancer::Request::Upload
-      (Michael G. Schwern)
-    * Dancer::Test::dancer_response handles correctly its 'body' parameter
-      We can now pass a hash ref as the body of dancer_response, it will
-      automatically be serialized as an URL-encoded string with the appropriate
-      content_type header.
-      (Alexis Sukrieh)
-
-1.3013    01.03.2011
-
-    [ ENHANCEMENTS ]
-    * Fix test suite: the changelog test is skipped if not under 
-      RELEASE_TESTING environment.
-
-1.3012    01.03.2011
-
-    [ BUG FIXES ]
-    * Fix cookies disappearing when more than one is set.
-      Complete refactoring of the cookie handling.
-      (Chris Andrews, Geistteufel)
-    * Properly set the settings in Dancer::Test only after config loading.
-      (Sawyer X)
-    * Fix possible loss of last directory in path.
-      (Sawyer X)
-    * No need for default upper directory in Dancer::Test. This fixes an issue
-      raised on the list about the default scaffolded test failing.
-      (Sawyer X)
-    *  Fix anti UNC substitution under Cygwin
-      (Rowan Thorpe)
-    * GH#299 Return appropriate headers on HEAD request (content-type, ...)
-      (franck cuny)
-    * Use the dancer_version variable in scaffolded app.
-      (Sawyer X, reported by Brian E. Lozier)
-
-    [ ENHANCEMENTS ]
-    * Fix manifest
-      (Damien Krotkine)
-    * Various packaging, changelog and test fixes
-      (Damien Krotkine)
-    * Add a new accessor to Dancer::Request: ->uri.
-      (it's an alias to ->request_uri)
-      (Franck Cuny)
-    * Removes Dancer::Helpers, refactor Dancer.pm accordingly.
-      (Franck Cuny)
-    * Introduce changelog test of hell.
-      (Damien Krotkine)
-    * Add Dancer::Logger::Null.
-      (Sawyer X)
-    * Add Dancer::Logger::Diag.
-      (Sawyer X)
-    * Refactor Dancer::Response
-      (franck cuny)
-    * Allow to use a subclass of Template::Toolkit.
-      (Michael G. Schwern)
-    * Dancer::Test now uses Dancer::Logger::Null instead of ::File.
-      (Sawyer X)
-    * Add Dancer::Deprecation. (handle deprecation messages)
-      (franck cuny)
-    * Introduce new timestamp format in logger (%T)
-      (Roman Galeev)
-    * Refactoring of the forward method
-      (Alex Kalderimis)
-    * Refactoring of internal objects in the core, 
-      use more of Dancer::Object. Introduce attributes_defaults
-      (Damien Krotkine)
-    * Add a perl_version variable to all templates, used in scaffolded app.
-      (Sawyer X, reported by Brian E. Lozier)
-    * Better output when template file is missing.
-      (Brian E. Lozier, Sawyer X)
-
-    [ DOCUMENTATION ]
-    * Add missing methods (e.g. "referer"), sorting, clean up.
-      (Flavio Poletti)
-    * Complete working example of deployment under Nginx/Starman in
-      Deployment.pod
-      (Geistteufel)
-
-1.3010_01    12.02.2011
-
-    [ BUG FIXES ]
-    * GH#136: fix again Mime::Type issues in preforking environment
-      (Chris Andrews)
-    * GH#220: fix for path issues under MacOS X and Windows platforms.
-      A new function is provided by Dancer::FileUtils: path_no_verify()
-      (Rowan Thorpe)
-    * Fix for infinite loops detection in before filters
-      (Flavio Poletti)
-
-    [ ENHANCEMENTS ]
-    * Better detection of the application layout under non-UNIX platforms.
-      (Rowan Thorpe, Alexis Sukrieh)
-
-    [ DOCUMENTATION ]
-    * Fix a typo in Dancer::Request::Upload's POD
-      (Rowan Thorpe)
-    * Better documentation for the before filters, explanations about the
-      potential infinite loops that can happen when using before filters (and 
-      what Dancer does in that case).
-      (Flavio Poletti)
-
-1.3011    14.02.2011
-
-    [ BUG FIXES ]
-    * Set binmode in write_data_to_file() to fix image corruption in
-      Windows
-      (Rowan Thorpe)
-    * GH#319, GH#278, GH#276, GH#217: Fix file issues on Cygwin and 
-      Win32 platforms
-      (Rowan Thorpe)
-    * GH#322: Detect errors in scaffolded dispatchers
-      (Alberto Simões)
-    * Fix tests so that they don't fail if JSON is not installed
-      (Damien Krotkine)
-    
-    [ DOCUMENTATION ]
-    * Small spaces fix (Alberto Simões).
-
-1.3010_01	12.02.2011
-
-    [ BUG FIXES ]
-    * GH#136: fix again Mime::Type issues in preforking environment
-      (Chris Andrews)
-	* GH#220: fix for path issues under MacOS X and Windows platforms.
-	  A new function is provided by Dancer::FileUtils: path_no_verify()
-	  (Rowan Thorpe)
-	* Fix for infinite loops detection in before filters
-	  (Flavio Poletti)
-	
-	[ ENHANCEMENTS ]
-	* Better detection of the application layout under non-UNIX platforms.
-	  (Rowan Thorpe, Alexis Sukrieh)
-
-	[ DOCUMENTATION ]
-	* Fix a typo in Dancer::Request::Upload's POD
-	  (Rowan Thorpe)
-	* Better documentation for the before filters, explanations about the
-	  potential infinite loops that can happen when using before filters (and 
-	  what Dancer does in that case).
-	  (Flavio Poletti)
-
-1.3010  10.02.2011
-
-    [ BUG FIXES ]
-    * GH#303: Generated Makefile.PL's clean is done correctly now.
-      (Sawyer X)
-    * Minimum version of HTTP::Headers to avoid test fails.
-      (LoonyPandora)
-    * Do not require JSON to get version number (fixes tests).
-      (Sawyer X)
-
-    [ ENHANCEMENTS ]
-    * Allow read_file DWIMishness using wantarray.
-      (LoonyPandora)
-    * Tidy up Dancer.pm
-      (Damien Krotkine)
-    * Document forward should use return.
-      (Sawyer X)
-    * GH#290: Use return with redirect examples in docs.
-      (Damien Krotkine)
-    * Document that base() returns a URI object.
-      (David Precious)
-    * Show version when starting standalone server.
-      (David Precious)
-
-1.3003  06.02.2011
-
-    [ API CHANGES ]
-    * Remove load_plugin from the core's DSL (was deprecated).
-
-    [ BUG FIXES ]
-    * Eliminate test warnings on Windows.
-      (Gabor Szabo)
-    * GH#271 - use correct VERSION_FROM in scaffolded application.
-      (Sawyer X)
-    * GH#260 - send_file doesn't clobber existing headers
-      (Alexis Sukrieh)
-    * logger unicode bugfix in the formated date
-      (jahmed)
-    * GH#281 - Don't crash if splat is used with no captures
-      (David Precious)
-    * Possible to given "template" a view name with the extenstion.
-      (Alexis Sukrieh)
-    
-    [ ENHANCEMENTS ]
-    * New setting log_path to allow for alternalte logging path in logger
-      "file".
-      (Natal Ngétal)
-    * GH#289: Add more aliases on the ENV, provide more smart accessors to Plack env
-      entries
-      (Franck Cuny)
-    
-
-Dancer 1.3002
-
-	[ API CHANGES ]
-	
-	* to_json and from_json accept options as hashref instead of hash.
-	  Passing arguments as hash is deprecated 
-	  (Franck Cuny).
-
-	[ BUGFIXES ]
-
-	* status is kept even when halt is used in a before filter
-	  (Alexis Sukrieh)
-        * Proper handling of temporary file creation using File::Temp module
-          instead of homebrew solution. (jahmed)
-        * Logger::Abstract unicode bug fix. (jahmed)
-	
-	[ ENHANCEMENTS ]
-
-	* In development, pretty-print JSON serializations for easier development 
-	  (Ask Bjørn Hansen)
-
-Dancer 1.3001
-
-	[ Flavio Poletti ]
-	* Added "git fetch upstream" for remote tracking
-	* turned a tab into the right number of spaces
-	* Fix weird Plack error "status code needs to be an integer greater than
-	  or equal to 100", because of a typo in a call to Dancer::Error
-	  (Closes issue GH#264)
-
-	[ Franck Cuny ]
-	* uri_(un)escape cookie value; closes GH-248 
-	* remove websocket tutorial (it has its own distro now)
-	* add a new tests to make sure unknown templates produce a warning 
-	* path for send_file must be relative from the public directory 
-	* Support for complex values in cookies (scalars, flat arrays and 
-	  flat hashes). Fixes issue GH#249
-
-	[ David Precious ]
-	* Point people towards D::P::Database in the tutorial.
-	* Mention leaving ratings on cpanratings. 
-	* Some minor typo fixed in the documentations.
-	
-	[ mokko ]
-	* typos and a little more substatial changes to Development.pod 
-
-	[ Hagen Fuchs ]
-	* Request.pm Decode HTTP::Request's uploads
-
-	[ Alberto Simoes ]
-	* Support for aliases for content_type and refactoring of 
-	  mime-types handling, with a new class Dancer::MIME
-	  (closes issue GH #124)
-	* Deprecation of Dancer::Config::mime_types (now handled by Dancer::MIME).
-
-	[ jahmed ]
-	* Fix a bug in YAML session backend, during the creation of the session
-	  file.
-
-Dancer 1.3000_02
-
-	[ Sawyer X ]
-	* Added forward() functionality (incl. tests and docs)
-
-	[ Damien Krotkine ]
-	* FIX for --no-check switch in script/dancer
-	* Refactoring of Dancer::Template::Abstract
-	  - add support of apply_layout and apply_renderer
-	  - deprecation of render_with_layout (now handled better)
-	  - add an accessor "engine" to the DSL to access any engine singleton
-	  - better interface for Dancer::Object and Dancer::Object::Singleton
-	  - updated tests accordingly
-
-	[ Jonathan Otsuka ]
-	* Bring dancer application creation pod up-to-date 1.2003
-
-Dancer 1.3000_01
-
-	[ Damien Krotkine ]
-	* Better check of keywords used in plugins.
-	* internal refactoring:
-	  - Dancer::Object::Singleton added to refactor engines later
-	  - Support of inheritance in attributes declared with Dancer::Object
-
-	[ jamhed ]
-	* Fix some unicode issues, refactored all file openings in one function in
-	  Dancer::FileUtils.
-
-	[ Gabor Szabo ]
-	* Adding test for multi-leveled scaffolding.
-
-	[ Maurice Mengel (mokko) ]
-	* Skip file upload tests on Cygwin, not just win32.
-
-	[ Alan Haggai ]
-	* Fixing up typos in various places.
-	* Show the correct filename in usage.
-
-	[ Alexis Sukrieh ]
-	* Update documentation for developers. Dancer::Development reflects the new
-	  releases startegy since 1.2 is out. Also better explaining about how 
-	  to contribute pull-requests to the core team.
-	* New documentation for integrators: Dancer::Development::Integration
-	  describes precisely how integrators should handle pull-requests.
-
-	[ Naveen ]
-	* add a --no-check switch to script/dancer to disable remote check of new
-	  Dancer versions.
-
-	[ Philippe Bruhat ]
-	* add script/wallflower, helper to turn a Dancer application into a static
-	  web site.
-	* better behaviour for plugin_setting (better search, more user-friendly)
-
-	[ Franck Cuny ]
-	* Support for configurable log format in logger engines
-	* Refactoring of Dancer::Route, some optimisations and code cleanup
-	* Add several tests to increase the coverage (reached 92.4%, for 1399 tests)
-
-Dancer 1.2003
-	* Production release.
-
-Dancer 1.2002_02
-	[ Danijel Tasov ]
-	* Correct HTTP.pm POD's 503 entry with 403.
-
-	[ Paul Tomlin ]
-	* Tests for URI object in uri_for.
-	* Update Plack middleware tests compatibility.
-
-Dancer 1.2002_01
-	[ Joel Roth ]
-	* Code fixes in documentation (Dancer::Session, Dancer::Introduction).
-
-	[ Franck Cuny ]
-	* Fix test failures on old machines with Test::More without done_testing.
-
-Dancer 1.2002
-	* Productionized! :)
-
-Dancer 1.2001_01
-	[ David Precious, Ivan Bessarabov ]
-	* Fixing TT example config.
-
-	[ Danijel Tasov ]
-	* Default layout now validates.
-
-Dancer 1.2001
-	[ Sawyer X ]
-	* Fix clash with KiokuDB because of Dancer::Serializer::Dumper.
-
-	[ Franck Cuny ]
-	* Refactoring engine triggers. This resolves an issue of engine inits being
-	  run before all configuration is read. That also crashes D::S::Cookie.
-	  As a side effect we now have a refactored _set_setting() which does not
-	  trigger any engine hooks (unlike setting()).
-	* Fix failing test t/07_apphandlers/06_debug.t
-
-	[ David Precious ]
-	* Doc fixes. Clarifications to Cookbook's REST section.
-	* Don't crash if application name is invalid and provide better information.
-
-Dancer 1.2000
-	** 1.2 is a stable release of Dancer **
-	** We assure consistency and stability for this release and the following **
-	** 1.2xxx releases; you should not have issues updating to any 1.2xxx     **
-	** version because of it.                                                 **
-
-	++ A very special thanks goes to the Dancer community who improved and    ++
-	++ perfected this release and worked hard on reporting bugs, fixing them, ++
-	++ improving the stability, providing important features and everything   ++
-	++ else which makes Dancer so attractive - and above all: its community   ++
-	++ so thank you!                                                          ++
-
-	[ Sawyer X ]
-	* Fixing some more XML tests with missing preqreqs.
-
-Dancer 1.1999_04 (RC4)
-	[ Sawyer X ]
-	* Load Plack::Loader dynamically in test.
-
-	[ Yanick Champoux ]
-	* Doc fix.
-
-Dancer 1.1999_03 (RC3)
-	[ Alexis Sukrieh ]
-	* Transparent unicode support
-	  Dancer now takes care transparently of decoding unicode strings
-	  used within route handlers and encoding them back before sending
-	  a response content. Once the 'charset' setting is set, the user
-	  has nothing more to do to have a working unicode-aware application.
-	* FIX for issue #172
-	  More documentation added to Dancer::Request, all public method
-	  are documented. A pod coverage test has been added for this
-	  module.
-	* Documentation update The deployment documentation is more precise about
-	  cgi/fast-cgi deployment under Apache.
-	* FIX for issue GH#171
-	  Scaffolded configuration files are fully commented in order to quickly
-	  guide the user in her first steps.
-
-	[ Damien Krotkine ]
-	* Fix Dancer::Plugin OO issue
-
-	[ Danijel Tasov ]
-	* Fixed expires in cookies + tests
-
-	[ Philippe Bruhat ]
-	* Dancer::Logger::Abstract: turn _should() into a closure, and avoid
-	  setting up the hash again and agai
-
-	[ Franck Cuny ]
-	* Closes issue 181 (unknown log level)
-	* Plack middlewares must be listed in an arrayref (listing them in a
-	  hashref is now deprecated)
-
-	[ Al Newkirk ]
-	* fixed redirect to redirect immediately (+ refactoring by franck)
-
-	[ Dave Doyle ]
-	* clarify Pod as to how before_template works
-
-	[ Sawyer X ]
-	* Overhaul tests to use lib t/lib instead of t::lib::.
-	  (fixes Windows test fails)
-	* PSGI envs on Windows is in capital letters.
-	  (fixes Windows test fails)
-	* Add tests on every required directory to create a fake environment.
-	  (realpath() on Windows fails when path doesn't exist)
-
-Dancer 1.1999_02 (RC2)
-
-	[ Mark Allen ]
-	* Add a tutorial (Dancer::Tutorial)
-	* example application 'Dancr', provided in example/
-
-	[ Franck Cuny ]
-	* Dancer::Test load D::Session::Simple
-	* rewrite how Dancer handle HTTP headers
-	  - no more Dancer::Headers
-	  - all headers are HTTP::Headers object
-
-	[ Philippe Bruhat ]
-	* use Pod::Usage
-
-	[ Damien Krotkine ]
-	* replace all die and warn with croak and carp
-
-	[ Alexis Sukrieh ]
-	* FIX for issue GH #151
-	  utf8 pragma is imported automatically when Dancer is loaded
-	  to allow the usage of UTF-8 strings in the application code.
-	  (Thanks to kocoureasy for the report).
-	* FIX for "UTF-8" issues (GH#153):
-	  - response content is encoded only if content_type is text
-	  - charset setting is normalized to UTF-8 when appropriate
-	  - automatically decode UTF-8 strings in params
-	* FIX scaffolded dispatchers (script/dancer)
-	  The PLACK_ENV variable is not propagated by Apoache to the dispatchers (at
-	  least with our Deployment examples) so the dispatchers aren't aware of the
-	  PSGI context if we don't tell them explicitly.
-	  This patch forces the dispatchers in PSGI mode.
-	* FIX (unknown bug)
-	  When a serializer is set and show_errors is true, don't expose internal
-	  errors caught.
-
-	[ Naveen ]
-	* add --version to the dancer CLI
-	* changed the URI fetched by the dancer script to check Dancer's version
-
-Dancer 1.1999_01 (RC1)
-
-	[ Alexis Sukrieh ]
-	* FIX for utf8 content in views
-	  Dancer now handles correctly templates with non-ASCII characters in views.
-	  All you have to do is to set the "charset" setting in your config. Your
-	  content response will then be encoded appropriately on-the-fly by Dancer.
-	* Scaffolded app sets the charset to "utf8" by default.
-	* Better design for the scaffolded app (logo, favicon and background image
-	  added)
-	* Environment info available on scaffolded app
-	* LWP is used by the dancer helper to download files
-	* jQuery 1.4.2 (minified) is included in the scaffolded app
-	* default layout uses <% request.base %> in order to support mounted apps
-	  (Thanks to Naveed Massjouni and Franck Cuny for the concept/idea).
-	* The main.tt layout sources jQuery first from Google CDN and falls back to
-	  the local minified version if on offline mode.
-	* New default token provided to the "template" helper: dancer_version
-
-	[ Sebastian de Castelberg ]
-	* The dancer helper is able to download files via a transparent proxy
-	  (thanks to LWP).
-
-	[ Adam J. Foxson ]
-	* FIX for issue GH#136:
-	  "readline() on closed filehandle DATA" error that appears when running
-	  the app with Starman
-
-	[ Naveed Massjouni ]
-	* Dancer::Test function get_response is renamed to dancer_response
-	  get_response still works but is deprecated
-	* dispatch.f?cgi scripts use FindBin to resolve their location.
-	  FIX a bug when using symlinks.
-
-	[ Franck Cuny ]
-	* FIX for issue GH#129
-	  don't add multiple content-type to headers
-	* fix broken tests (they were testing incorrect content type)
-
-	[ Damien Krotkine ]
-	* FIX for issue GH#115
-	  documentation about compression in Dancer::Deployment
-
-	[ David Precious ]
-	* Make the 'layout' param to the template keyword work as you'd expect and
-	  allow you to set a custom layout to use, e.g.:
-	  template 'templatename', {}, { layout => 'layoutname' };
-
-	[ Philippe Bruhat ]
-	* Make sure a plugin refuse to register a keyword twice
-
-	[ Sawyer X ]
-	* Lots of documentation updates
-	* Dancer now logs caught crashes in rendering
-	  (easier to debug Ajax routes)
-
-Dancer 1.1904
-	[ Sawyer X, Franck Cuny ]
-	* SAX, not Sax.
-	* Check for XML::Parser or XML::SAX in test as well.
-
-Dancer 1.1903
-	[ Sawyer X, Franck Cuny ]
-	* XML::Simple needs either XML::SAX or XML::Parser.
-	  (fixed test fails from Dancer::Serializer::XML)
-
-Dancer 1.1902
-
-	[ Adam J. Foxson ]
-	* Addresses issue #136: "readline() on closed filehandle DATA"
-
-Dancer 1.1901 (1.2RC0)
-
-	[ Franck Cuny ]
-	* implemented GH#120:
-	  - methods {to,from}_{xml,json,yaml} accept more than one arguments. The
-	    first argument is the data to transform. All the remainings arguments
-	    are parameters to alter the behavior of the serializers. Refer to the
-	    documentation for more informations.
-	* more tests added
-
-	[ Alexis Sukrieh ]
-	* load_plugin is DEPRECATED; 'use' should be used instead to load a plugin.
-	  This is fixes the major issue with plugins about symbol exports that
-	  didn't work well (issue #101).
-	* All paths built in a scaffolded application are dynamic, it's now
-	  possible to move a scaffolded application after it's been generated.
-	  (fixes issues #88,
-	* The auto_reload feature is now disabled by default due to too many
-	  unsolved issues (it works most of the time, but some race conditions are
-	  still present) This feature is still being working on, but it's now
-	  flagged "experimental").
-	* Default log level in development environment is now 'core' in order to
-	  provide more information.
-	* New scaffolded application design. More neutral and with lots of
-	  information for a beginner, and links to useful material.
-	  Based on the Ruby on Rails start page (kudos to the Rails team,
-	  http://www.rubyonrails.org).
-
-	[ Boris Shomodjvarac ]
-	* Support for a clean way for Template engines to define their template
-	  file extensions (issue #126).
-
-Dancer 1.1812
-
-	[ Franck Cuny ]
-	* Skip bogus uploads test on Win32 (thanks to Alias for reporting)
-
-	[ Alexis Sukrieh ]
-	* Fix for scaffolded apps
-	* Dancer::Deployment cleanup (CGI section)
-	* Declare LWP explicitly (already implied by HTTP::Body and HTTP::Headers)
-
-	[ Sawyer X ]
-	* Nitpicking at tabs and spaces at end of lines
-
-Dancer 1.1811
-
-	[ Franck Cuny ]
-	* FIX for issue #113 and #112
-
-	[ Naveed Massjouni ]
-	* FIX for issues #111 and #108
-
-Dancer 1.1810
-
-	[ Naveed Massjouni ]
-	* FIX for issue #108
-	  replaced Clone::clone() with Storable::dclone().
-	* Fixed the plan of one of the test files.
-
-	[ Alexis Sukrieh ]
-	* Fix a test that depends on YAML (pass if not present)
-	  (Smoker failure '2010-08-30T11:07:59Z').
-
-Dancer 1.1809
-
-	[ Franck Cuny ]
-	* update Deployement.pod and Cookbook.pod
-	* fix bug in route building with prefix
-	* don't use app.psgi anymore in generated scripts
-	* fix GH#106: serializer
-	* fix bug in PSGI handler using HTTP::Headers when using some header
-	* fix bug in ajax query
-	* more tests
-
-	[ Alexis Sukrieh ]
-	* fix plan for t/03_route_handler/24_named_captures.t
-
-Dancer 1.1808
-
-	[ Alexis Sukrieh ]
-	* FIX test failures
-	  - t/08_session/07_session_expires.t
-	  - t/08_session/07_session_expires.t
-
-Dancer 1.1807
-
-	[ Sawyer X ]
-	* Fix for RT #60403: removing Test::Exception requirement
-
-	[ Alexis Sukrieh ]
-	* Global rewrite of Dancer's core to allow support for
-	  sub-application, better route resolution and a better design.
-	* Support for mountable applications via "load_app".
-	  Mounted applications can have their own settings registry and
-	  can be mounted under a given prefix.
-
-	[ Franck Cuny ]
-	* Support for new hooks:
-	  - after: to allow response post-processing
-	  - before_template: to allow defaut tokens to be given at anytime
-	    to the template function.
-	* Fix and test for bug  RT#57829
-	  (Custom response headers lost when using JSON serializer)
-	* FIX PSGI compatibility layer (request->path_info is used when appropriate
-	  instead of request->path)
-	* FIX for GH#100
-	  When loading a module, it's possible to require a minimal
-	  version.
-	* New option "ajax" for route handlers.
-	* Fix a bug in ajax route when processing the route resolution
-	  (when a route is defined with options, it's pushed in the
-	  beggining of the route handler tree).
-
-	[ jamhed ]
-	* Support for new setting "session_expire" in order to allow
-	  session cookies to expire before the browser is closed.
-
-	[ Naveed Massjouni ]
-	* Dancer::Test can now test requests with a body
-
-Dancer 1.1806_02
-
-	[James Aitken]
-	* fix issues GH #84 #86 and #87 (failing tests on < 5.10 due to regex with named captures)
-
-	[franck cuny]
-	* update cookbook
-
-	[François Charlier]
-	* fix for GH#76 and GH#88
-
-	[David Precious]
-	* Add Dancer::Plugins POD, describing useful plugins
-	* Extend sessions & logging in entry in cookbook
-
-Dancer 1.1806_01
-
-	[ sebastian de castelberg ]
-	* Support for path_info() in Dancer::Request so it's possible to
-	  mount an application under a directory.
-
-	[ Alexis Sukrieh ]
-	* Fix for RT#56239
-	  logger calls are better traced
-	* Fix for GH#72
-	  New keyword 'load_plugin' for loading a plugin in the current namespace.
-	  Plugins can be used anywhere thanks to that method.
-	* Fix for issue #77
-	  Passing and caching works well together again.
-	* Applied miyagawa's patch for droping the app.psgi file. Refactoring of
-	  Dancer::Handler::PSGI and friends.
-	* Applied LoonyPandora's patch for checking Dancer's VERSION when running
-	  script/dancer. Changed it a bit so it can check against CPAN rather than
-	  GitHub.
-	* Documentation update: r('') is now DEPRECATED, the method triggers a warning
-	  when called and will be removed in the next stable release (1.2).
-	* Transparent wrapping of Plack middlewares in Dancer's configuration.
-	  It's possible to enable/disable middlewares right from Dancer's config files.
-	  Thanks to Tatsuiko Miyagawa and Franck Cuny for their help.
-
-	[jbarratt]
-	* Dancer::Serializer::JSON supports 'allow_blessed' and 'convert_blessed'
-	  options.
-
-	[ Marc Chantreux ]
-	* Support for regexp objects in route definition
-	* Support for named captures (keyword 'captures' added to Dancer's syntax).
-
-
-Dancer 1.1805
-	[ Alexis Sukrieh ]
-	* Fix for RT#56239
-	  logger calls are better traced
-	* Fix for GH#72
-	  New keyword 'load_plugin' for loading a plugin in the current namespace.
-	  Plugins can be used anywhere thanks to that method.
-
-	[ Minty ]
-	* Update Introduction pod with (required) -a dancer opt (Murray, 5 hours ago)
-	* Bump HTTP::Body dependency to 1.07 (Murray, 6 hours ago)
-
-Dancer 1.804
-	[ sebastian de castelberg ]
-	* Fix priority in D::S::Mutable.
-
-	[ David Precious ]
-	* Fix test failures with old Plack versions (Issue 73).
-	* Don't surround content with <p> tags in layout.
-	* Add $ENV{REMOTE_ADDR} in core log messages
-
-	[ SawyerX ]
-	* Fix issue #75, reported by nanis.
-	  perl -MDancer -e "print $Dancer::VERSION" now works as expected
-
-	[ Daniel Pittman ]
-	* FIX for issue #80
-	  Make sure the tempfiles created during uploads are removed when the
-	  request object dies.
-
-	[ Alexis Sukrieh ]
-	* FIX for bug RT#58355
-	  Rewrite of Dancer::Template::Simple's parser, now more robust,
-	  based on Perl's regexp engine.
-	* FIX a warning when remote_address is undefined
-
-Dancer 1.1803
-	[ Alexis Sukrieh ]
-	* Fix for issue #69
-	  The issue was resolved in 1.1801, this time, the fix is working as
-	  expected.
-
-	[ Sawyer X ]
-	* Fix for RT #57715, require Test::More 0.88 and up.
-
-Dancer 1.1802
-	[ Sawyer X ]
-	* Fix RT #57158 (route_cache does not work with multiple parameters)
-	  Cache revealed a small design overlook of not cloning a route before
-	  returning it to the user, making multiple parameters disabled.
-	  (Thanks to Stéphane Alnet for reporting and adding a test for it!)
-
-Dancer 1.1801
-	[ Alexis Sukrieh ]
-	* FIX issue #69
-	  Error are trapped even if occuring from Dancer's source code.
-	  auto_reload is set to false in scaffolded applications to
-	  prevent errors if Module::Refresh is not installed.
-
-Dancer 1.1800
-	[ Alexis Sukrieh ]
-	* merge of the devel branch into master, first stable release of
-	  1.178_01 and 1.178_02
-
-Dancer 1.178_02
-	[ Alexis Sukrieh ]
-	* Errors are caught in before filters
-	* halt can be given a Dancer::Response object rahter than plain text content
-
-Dancer 1.178_01
-
-	[ Alexis Sukrieh ]
-	* New logger for sending log message to STDERR: Dancer::Logger::Console
-	  Thanks to Gabor Szabo for the idea.
-	* Logger engines don't have anymore to implement _format(), they can use
-	  $self->format_message instead.
-	* New log level: "core" for letting Dancer's core express itself on crucial
-	  events.
-	  That way, when the app config sets log to "core", any core messages is
-	  sent to the logger, and the end-user can see which route is chosen for
-	  each request received.
-	  Thanks to Gabor Szabo for the idea.
-	* New class Dancer::Timer added so any logger engine can now show a timer
-	  string.
-	* Scaffolded applications are now built like a CPAN distribution, with a
-	  Makefile.PL
-	  and test scripts (thanks to Gabor Szabo for the idea).
-	* Added Dancer::Test to provide helpers for writing test script for Dancer
-	  applications
-	* FIX bug when returning a void context after redirecting a route.
-	  Thanks to Juan J. Martínez  for the report.
-	* Add support for request headers in Dancer::Request
-	* Add support for halt() in Dancer's syntax.
-
-	[ Alex Kapranof ]
-	* Support for on-the-fly charset encoding when the setting is set and a
-	  content is sent by Dancer and needs to be encoded.
-	  The response Content-Type is updated accordingly as well.
-
-	[ Sawyer X ]
-	* Adding "import_warnings" settings. On by default, but allows to disable
-	  auto-import of "warnings" pragma. Reported by Adam Kennedy.
-
-Dnacer 1.176
-	* Bringing 1.175_01 into production.
-
-Dancer 1.175_01 (Developer release)
-	[ Sawyer X ]
-	* Documentation for Dancer::FileUtils.
-	* Documentation for Dancer::Cookie.
-	* Fixing PNG bug on IE (reported by Adam Kennedy - thank you).
-
-Dancer 1.175
-	[ Sawyer X ]
-	* RT #56395 reported by Jonathan Yu on behalf of Debian Perl team.
-	* Documentation for Dancer::Error.
-
-	[ Alexis Sukrieh ]
-	* fixed t/15_plugins/02_config.t when YAML is not installed
-
-Dancer 1.174
-	[ Gabor Szabo ]
-	* Docs fixes, typo in warning.
-	* TestUtils.pm is now in "t/lib".
-
-	[ David Precious ]
-	* Support semi-colons as name=value pair separators when parsing
-	  querystring.  Satisfies feature request/issue 59.
-	  Thanks to deepakg for requesting this feature.
-
-	[ Sawyer X ]
-	* RT #56381 reported by Jonathan Yu on behalf of Debian Perl team.
-	  (Adding LICENSE file)
-
-Dancer 1.173_01 (Developer release)
-	[ Franck Cuny ]
-	* Doc fixes.
-	  (Thanks to poisonbit)
-	* Plugins configuration
-	* Cleaning up tests
-
-	[ Alexis Sukrieh ]
-	* New serializer: Dumper for easily output dumped variable
-	  in text/plain.
-	* Before filters can now access route params
-	* Support for '.' as a token separator in params parsing
-	* The standalone server respect the 'access_log' setting,
-	  the starting banner is printed on STDERR only if the
-	  setting is set to true.
-
-	[ Sawyer X ]
-	* Fixed Windows PSGI.URL_SCHEME bug, causing tests to fail
-	  (Thanks to ADAMK for reporting)
-
-Dancer 1.173
-	[ Alexis Sukrieh ]
-	* Documenting set_cookie in Dancer.pm.
-
-	[ Franck Cuny ]
-	* Cleaning up serializer test.
-
-	[ François Charlier ]
-	* Documenting layout disabling.
-
-	[ Sawyer X ]
-	* Fix a few failing tests because of compilation errors.
-	* Add init{} subs for all serializers.
-	* Dancer::Engine documentation
-
-	[ David Precious ]
-	* Fix issue 52 - creating invalid cookie expiration dates.
-	  Thanks to Juanjo (reidrac) for reporting!
-
-Dancer 1.172
-	[ Alexis Sukrieh ]
-	* Plugin support.
-
-	[ Franck Cuny ]
-	* Prevent usage of reserved Dancer keywords in plugins.
-	* Tests cleanups.
-
-	[ Robert Olson ]
-	* Fixing docs to clarify layouts can use variables too.
-
-Dancer 1.171
-	[ Alexis Sukrieh ]
-	* Removed bogus TestApp/ directory
-
-Dancer 1.170
-	[ David Precious ]
-	* Fixed bug with status keyword not converting aliases (e.g. 'not_found') to
-	  real usable status lines with valid HTTP codes.
-	  Thanks to P Kishor for reporting this on the dancer-users mailing list!
-	* Accept end_tag as a synonym for stop_tag when configuring TemplateToolkit.
-	  Thanks to James Ronan for bringing this up.
-
-	[ Sawyer X]
-	* Route::Cache store_route = store_path, beefed up docs
-	* Changed names of limits in settings
-	* Added documentation for it in Dancer.pm
-	* More documentation about Module::Refresh dependency
-	  (closes bug #48)
-	* uri_for now accepts a boolean for not escaping URIs,
-	  and redirect calls uri_for with that boolean.
-	  (closes: bug #47)
-
-	[ Alexis Sukrieh ]
-	* Query string params are not dropped anymore when their value is 0. thanks
-	  to "Squeeks" for the report.
-	  (closes: bug #49)
-	* Support for file uploads
-	  The Dancer::Request class provides a common interface to access file
-	  uploads. Syntactic sugar has been added to Dancer's as well
-	  (keyword 'upload').
-	  (closes whish #36)
-
-	[ Franck Cuny ]
-	* Support for automatic serialization/deserialization
-	  Dancer is now able to serialize route handler's response in various
-	  format (JSON, YAML, XML); and can also deserialize request body when
-	  appropriate.
-	  (closes: wish #29)
-
-
-Dancer 1.160
-
-	[ David Precious ]
-	* Added session backend Dancer::Session::Simple
-	* Dump session contents on development error page, if session is in use
-	* Censor sensitive-looking information on development error page settings /
-	  session dumps, to help avoid passwords / card details etc being leaked.
-	* Add deployment guide
-
-	[ Alexis Sukrieh ]
-	* Dancer helper propagates its perl executable into the generated
-	  $appname.pl script (FIX for RT #54759).
-	* FIX for issue #34
-	  No more warnings undeer Win32 for tests script that needs a tempdir
-	* FIX (unknown bug)
-	  The standalone server now parses commandline options (was broken
-	  since 1.140).
-	* FIX for issue #37
-	  A new setting "confdir" is provided for making Dancer
-	  read the application configuration files from an
-	  alternate location.
-	* Core settings can be initialized via environment
-	  variables, prefixed with "DANCER_" (e.g.  "DANCER_DAEMON"
-	  for the setting "daemon").
-	* Config and command-line arguments are parsed and loaded at import time,
-	  rather than when the handler is initialized.
-	* Routes are compiled at startup instead of being compiled whenever a
-	  request is handled.  This can increase performances up to 50%.
-	* FIX Params are not polluted anymore by the 'splat' keyword when no capture
-	  is needed by the pattern.
-	* New feature 'auto_page' (closes: #41)
-	  Lets the user have automatic route resolution for
-	  requests that match an existing template in the views dir. Thanks to
-	  David Precious for the idea and his help.
-
-	[ Daniel Tasov ]
-	* Plack environment is propagated to Dancer if none specified.
-
-	[ Sawyer X ]
-	* Route Caching with size and path number limits: Dancer::Route::Cache.
-	* FIX for issue #39.
-	* Dancer::ModuleLoader documentation
-	* Cleaned Dancer::Template::Abstract docs
-	* Cleaner die in Dancer::Engine if can't find engine
-	* Added default route example in Dancer::Cookbook
-
-
-Dancer 1.150
-
-	[ Alexis Sukrieh ]
-	* Refactored all core engines with Dancer::Engine
-	* Support for engine configuration via config files
-	* Each core template engine now uses start_tag/stop_tag from the
-	  configuration instead of harcoding '<%' and '%>'.
-	* FIX for issue #34
-	  Cookies can now be used when the application is ran under a Plack
-	  server.
-
-	[ David Precious ]
-	* Lots of documentation cleaning and fixes.
-	* Make the session available to the views, if possible.
-	* Added Dancer::Cookbook to provide lots of concrete examples for
-	  newcomers.
-	* Helper script `dancer' now provides a default favicon.ico in the
-	  application public directory.
-	* FIX for issue #30
-	  Added 'config' method to provide easy access to app config
-
-	[ Anirvan Chatterjee ]
-	* Various documentation typo fixes
-
-	[ Danijel Tasov ]
-	* FIX for issue #24
-	  Dancer now depends on MIME::Types rather than using
-	  File::MimeInfo::Simple which uses a fork().
-
-	[ Paul Driver ]
-	* Support for virtual location.
-	  It's now possible to mount a Dancer app under a user-defined prefix.
-
-	[ Franck Cuny ]
-	* Test scripts cleanup:
-	  + Cleanup is performed in test scripts when necessary
-	    (all temp files are removed at the end of the script).
-	  + FIX for issue #23
-	    Test scripts that try to write logfiles set the appdir.
-
-Dancer 1.140
-
-	* Dancer now depends on HTTP::Server::Simple::PSGI in
-	  order to rely on a PSGI environement even when running
-	  the app with the standalone server
-	  (Thanks to Tatsuiko Miyagawa).
-	* Dancer::Request object enhancements:
-	    + Dancer::Request now provide an accesor to the raw body
-	      of the request.
-	    + FIX for issue #13
-	      The params helper now provides accessors to route
-	      params, query string params and body params so the
-	      user can chose from which source they want to access
-	      params instead of dealing with a mixed structure.
-	    + Added accessors to referer and remote_address
-	* The Standalone server now uses the setting 'server' to
-	  bind itself to the IP address given by the setting.
-	  Default value is 0.0.0.0
-
-Dancer 1.130
-	* Fix a memory leak that could occur between two
-	  requests under mod_perl (Thanks to Nicolas Rennert for
-	  the report and diagnosis).
-	* remove all optional modules from the core, they are now
-	  shipped as separate CPAN distributions:
-	  - Dancer::Template::MicroTemplate
-	  - Dancer::Session::Cookie
-	  - Dancer::Session::Memcached
-	  - Dancer::Logger::LogHandler
-	  - Dancer::Logger::Syslog
-	* support for the `header' keyword in Dancer's syntax.
-	  The user is now able to alter response-headers in route
-	  handlers.
-	* support for `prefix' keyword in Dancer's syntax.
-	  A prefix can be set by the user before defining routes handlers.
-	  All route defined then will be automatically prefixed accordingly.
-
-Dancer 1.122
-
-	* Fix the test suite under Perl 5.8.x
-	* Security Fix: protection from CRLF injection in
-	  response headers (thanks to Mark Stosberg for the report).
-	* Support for multi-valued params in GET/POST data (thanks to
-	  Mark Stosberg for the report).
-	* Backward compatibility with old app.psgi files, don't die
-	  when a request is initialized with a CGI::PSGI object.
-
-Dancer 1.121
-
-	* Fix for POST data parsing (was broken in 1.120)
-	  now Dancer depends on HTTP::Body for that.
-
-Dancer 1.120
-
-	* ROADMAP updated
-	* Dancer is now compliant with Plack::Server::Apache2
-	* Remove the CGI.pm dependency, huge refactoring
-	* POD typo fixes (Naveed)
-	* Support for syntax-only importation (Sawyer X)
-	* Remove the example/ directory, useless and deprecated
-	* New logger engine: Log::Handler (franck cuny)
-	* New template engine Text::Microtemplate (franck cuny)
-	* Remove compilation-time warnings catching (issue #14)
-
-Dancer 1.110
-
-	* Fix test script `t/11_logger/04_syslog.t'
-	* Fix test script `t/10_template/05_template_toolkit.t'
-
-Dancer 1.100
-
-	* Support for multiple method routes at once with 'any'
-	* Templates engines
-	    + Bug fixes in Dancer::Template::Simple (Jury Gorky)
-	    + Refactoring of the factory
-	    + option for disabling the layout in the template helper.
-	* New session engine based on encrypted cookies (Alex Kapranof)
-	* More HTTP codes supported for a better REST compat (Nate Jones)
-	* Documentation updates
-	* script/dancer now requires an appname
-	* New Makefile.PL with better metadata (CPAN Service)
-
-Dancer 1.000
-
-	* Support for Syslog logger (Dancer::Logger::Syslog)
-	* Basic template engine so Template is no more a hard deps.
-	* Memcache Session support (Dancer::Session::Memcache)
-	* YAML file-based session support (Dancer::Session::YAML)
-	* Lots of tests (more than 80% of the code is covered)
-
-Dancer 0.9906
-
-	* move from File::MimeInfo to File::MimeInfo::Simple for
-	  smooth run on Mac OSX and Win32 systems.
-
-Dancer 0.9005
-
-	* Source code extract on error catching
-	* Support for configurable error handling
-	* New design for the starting app built with script/dancer
-
-Dancer 0.9004
-
-	* Support for PSGI/Plack environment
-	* script/dancer helper script for bootstraping a new app
-
-Dancer 0.9003
-
-	* Detect differently compilation-time warnings and runtime warnings
-	  closes bug #48440 (Thanks to Enric Joffrion for the report, and to
-	  Vincent Pit for the diagnosis)
-
@@ -0,0 +1,179 @@
+
+# DANCER CONTRIBUTORS #
+
+This is the (likely incomplete) list of people who have helped
+make this distribution what it is, either via code contributions, 
+patches, bug reports, help with troubleshooting, etc. A huge
+thank to all of them.
+
+    * Achim Adam <achim.adam@(none).com>
+    * Adam J. Foxson <afoxson@pobox.com>
+    * Adam Kennedy <adamk@cpan.org>
+    * Akash Ayare <akash@hairynandgate.com>
+    * Al Newkirk <github@alnewkirk.com>
+    * Al Newkirk <we@ana.im>
+    * Alan Haggai Alavi <alanhaggai@alanhaggai.org>
+    * Alberto Simoes <ambs@cpan.org>
+    * Alberto Simões <ambs@cpan.org>
+    * Alessandro Ranellucci <aar@cpan.org>
+    * Alex C <calyx238@gmail.com>
+    * Alex Kalderimis <alex.kalderimis@gmail.com>
+    * Alex Kapranoff <kapranoff@gmail.com>
+    * Alex Peters <lxp@cpan.org>
+    * Alexis Sukrieh <sukria@sukria.net>
+    * Alfie John <alfiej@opera.com>
+    * Anirvan Chatterjee <anirvan@base.mx.org>
+    * Anton Gerasimov <me@zyxmasta.com>
+    * Ask Bjørn Hansen <ask@develooper.com>
+    * Assaf Gordon <assafgordon@gmail.com>
+    * Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
+    * Brian E. Lozier <brian@massassi.com>
+    * Brian Hann <emailc0bra@gmail.com>
+    * Brian Phillips <brian@thephillips.info>
+    * CPAN Service <cpanservice@chorny.net>
+    * Chris Andrews <chrisandrews@venda.com>
+    * Chris Seymour <chris.j.seymour@hotmail.com>
+    * Christian Walde <walde.christian@googlemail.com>
+    * Colin Keith <colinmkeith@gmail.com>
+    * Colin Kuskie <colink@perldreamer.com>
+    * Craig Treptow <craig.treptow@gmail.com>
+    * Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
+    * Damien Krotkine <dams@cpan.org>
+    * Danijel Tasov <dt@korn.shell.la>
+    * Dave Doyle <dave.s.doyle@gmail.com>
+    * David Cantrell <david@cantrell.org.uk>
+    * David Golden <dagolden@cpan.org>
+    * David Moreno <david@axiombox.com>
+    * David Precious <davidp@preshweb.co.uk>
+    * David Steinbrunner <dsteinbrunner@pobox.com>
+    * David Zurborg <zurborg@cpan.org>
+    * Dennis Lichtenthaeler <dennis.lichtenthaeler@stiftung-tannenhof.de>
+    * Duncan Hutty <dhutty@allgoodbits.org>
+    * Emmanuel Rodriguez <emmanuel.rodriguez@gmail.com>
+    * Fabrice Gabolde <fabrice.gabolde@gmail.com>
+    * Fabrice Gabolde <fabrice.gabolde@uperto.com>
+    * Fayland Lam <fayland@gmail.com>
+    * Felix Dorner <felix_do@web.de>
+    * Flavio Poletti <flavio@polettix.it>
+    * Florian Larysch <florolf@devbraindump.de>
+    * Florian Sojer <sojer@b1-systems.de>
+    * Franck Cuny <franck.cuny@gmail.com>
+    * François Charlier <fcharlier@ploup.net>
+    * François Charlier <naz@pwah.(none)>
+    * Gabor Szabo <gabor@szabgab.com>
+    * Gary Mullen <garymullen@gmail.com>
+    * Grzegorz Rożniecki <xaerxess@gmail.com>
+    * Hagen Fuchs <github@hfuchs.net>
+    * Hans Dieter Pearcey <hdp@weftsoar.net>
+    * Ilmari Vacklin <ilmari@dicole.com>
+    * Ilya Chesnokov <chesnokov.ilya@gmail.com>
+    * Ivan Bessarabov <ivan@bessarabov.ru>
+    * Ivan Paponov <ivan.paponov@gmail.com>
+    * JT Smith <jt@plainblack.com>
+    * Jacob Rideout <jacob.rideout@returnpath.net>
+    * Jakob Voss <jakob@nichtich.de>
+    * James Aitken <loonypandora@gmail.com>
+    * Jesse van Herk <jesse@imaginaryrobots.net>
+    * Joel Roth <joelz@pobox.com>
+    * John Barrett <johna.barrett@gmail.com>
+    * John Wittkoski <jwittkoski@gmail.com>
+    * Jonathan "Duke" Leto <jonathan@leto.net>
+    * Jonathan Otsuka <djgoku@gmail.com>
+    * Jonathan Scott Duff <duff@pobox.com>
+    * Joshua Barratt <jbarratt@serialized.net>
+    * Juan J. Martínez <reidrac@usebox.net>
+    * Jury Gorky <schwein@schwein-laptop.(none)>
+    * Kaitlyn Parkhurst <symkat@symkat.com>
+    * Kent Fredric <kentnl@cpan.org>
+    * Kirk Kimmel <kimmel.k.programmer@gmail.com>
+    * Lars Thegler <lars@thegler.dk>
+    * Lee Carmichael <lecar_red@yahoo.com>
+    * Lee Johnson <lee.johnson@netbanx.com>
+    * LoonyPandora <loonypandora@gmail.com>
+    * Manuel Weiss <manuel@weiss.io>
+    * Marc Chantreux <marc.chantreux@biblibre.com>
+    * Mark A. Stratman <stratman@gmail.com>
+    * Mark Allen <mrallen1@yahoo.com>
+    * Mark Stosberg <mark@stosberg.com>
+    * Martin Schut <github@wommm.nl>
+    * Matthew Horsfall (alh) <wolfsage@gmail.com>
+    * Maurice <mauricemengel@gmail.com>
+    * Max Maischein <corion@corion.net>
+    * Michael G. Schwern <schwern@pobox.com>
+    * Michael Genereux <mgenereu@gmail.com>
+    * Michal Wojciechowski <michal@sidnet.info>
+    * Mikolaj Kucharski <mikolaj@kucharski.name>
+    * Murray <murray@minty.org>
+    * Natal Ngétal <hobbestigrou@erakis.im>
+    * Nate Jones <nate@endot.org>
+    * Naveed <naveed@ironcamel.(none)>
+    * Naveed Massjouni <naveedm9@gmail.com>
+    * Naveen <nmani@nashresearch.com>
+    * Neil Hooey <neil@shutterstock.com>
+    * Nicolas Oudard <noudard@weborama.com>
+    * Oliver Gorwits <oliver@cpan.org>
+    * Olivier Mengué <dolmen@cpan.org>
+    * Olof Johansson <olof@ethup.se>
+    * Ovid <curtis@weborama.com>
+    * Paul Driver <frodwith@gmail.com>
+    * Paul Fenwick <pjf@perltraining.com.au>
+    * Paul Johnson <paul@pjcj.net>
+    * Paul Tomlin <ptomli@gmail.com>
+    * Pedro Melo <melo@simplicidade.org>
+    * Perlover <perlover@perlover.com>
+    * Philippe Bruhat (BooK) <book@cpan.org>
+    * Richard Simões <rsimoes@cpan.org>
+    * Rick Myers <rick@jrmyers.net>
+    * Rik Brown <rik@rikbrown.co.uk>
+    * Roberto Patriarca <rp@staged.org>
+    * Roman Galeev <ip@ncom-ufa.ru>
+    * Roman Nuritdinov <ky6uk.kun@gmail.com>
+    * Rowan Thorpe <rowanthorpe@gmail.com>
+    * Sam Kington <github@illuminated.co.uk>
+    * Sapphire Paw <devel@sapphirepaw.org>
+    * Sawyer X <xsawyerx@cpan.org>
+    * Scott Penrose <scott.penrose@(none)>
+    * Sebastian de Castelberg <sebu@kpricorn.org>
+    * Skeeve <github.mails.skeeve@xoxy.net>
+    * Squeeks <squeek@cpan.org>
+    * Stefan Hornburg (Racke) <racke@linuxia.de>
+    * Tatsuhiko Miyagawa <miyagawa@bulknews.net>
+    * Tim King <timk@JTimothyKing.com>
+    * Tom Heady <tom@punch.net>
+    * Tom Hukins <tom@eborcom.com>
+    * Tom Wyant <wyant@cpan.org>
+    * Vyacheslav Matyukhin <mmcleric@yandex-team.ru>
+    * William Wolf <throughnothing@gmail.com>
+    * Xaerxess <xaerxess@gmail.com>
+    * YOUR_NAME <YOUR_EMAIL>
+    * Yanick Champoux <yanick@cpan.org>
+    * Zefram <zefram@fysh.org>
+    * a-adam <ac@univie.ac.at>
+    * andy <andy@broadbean.com>
+    * asergei <asergei@gmail.com>
+    * boris shomodjvarac <shomodj@oginwm09.(none)>
+    * brian <brian@massassi.com>
+    * burnersk <burnersk@(none.com)>
+    * chromatic <chromatic@wgz.org>
+    * franck cuny <franck.cuny@gmail.com>
+    * geistteufel <geistteufel@yahoo.fr>
+    * isync <o.zucker@web.de>
+    * jamhed <ip@ncom-ufa.ru>
+    * jamhed <jamhed@lenobook.jh>
+    * jamhed.nb <ip@ncom-ufa.ru>
+    * jonasreinsch <jonas.reinsch@gmail.com>
+    * jonathan schatz <jon@divisionbyzero.com>
+    * miyagawa <miyagawa@gmail.com>
+    * mlbarrow <mlbarrow@(none)>
+    * mokko <mauricemengel@gmail.com>
+    * niko <nikomomo@gmail.com>
+    * pdl <perrettdl@googlemail.com>
+    * ppisar <ppisar@(none)>
+    * rowanthorpe <rowanthorpe@gmail.com>
+    * scoopio <valiouk@yahoo.co.uk>
+    * sdeseille <sebastien.deseille@gmail.com>
+    * sebastian de castelberg <sebu@kpricorn.org>
+    * smashz <mestre.smash@gmail.com>
+    * tednolan <tednolan@(none).com>
+
+
@@ -0,0 +1,2008 @@
+Revision history for Dancer
+
+1.3130 2014-09-15
+ [BUG FIXES]
+ - Bogus dependency for 'mro'. (GH#1069)
+
+ [STATISTICS]
+ - code churn: 2 files changed, 21 insertions(+), 12 deletions(-)
+
+1.3129 2014-09-09
+ [BUG FIXES]
+ - Dzil conversion left 'dancer' script behind. (GH#1066)
+
+ [STATISTICS]
+ - code churn: 17 files changed, 1425 insertions(+), 1432 deletions(-)
+
+1.3128 2014-09-09
+ [BUG FIXES]
+ - Remove test dependency for Person and Person::Child. (GH#1063)
+
+1.3127 2014-09-08
+ [BUG FIXES]
+ - Test was using deprecated 'import_warnings'. (GH#1045, mokko)
+ - Fix default test names for headers and redirection test methods.
+   (GH#1048, odyniec)
+ - DANCER_SERVER_TOKENS and DANCER_SESSION_INFO are now
+   DANCER_NO_SERVER_TOKENS and DANCER_NO_SESSION_INFO. And working. :-)
+   (GH#1014, Yanick Champoux)
+ - 'any' wasn't understanding 'del' (only 'delete').  (GH#1044, Yanick
+   Champoux)
+
+ [DISTRIBUTION]
+ - Now using Dist::Zilla as package manager.
+
+ [DOCUMENTATION]
+ - Correct POD formatting for HTTP methods in introduction.pod. (GH#1047,
+   Lx)
+
+ [ENHANCEMENTS]
+ - environment configs are now merged with the global config, versus the
+   previous behavior that was overriding the whole config segments.
+   (GH#1016, Yanick Champoux)
+ - Dancer::Handler::Debug now accepts env variables from the command-line.
+   (GH#1056, Yanick Champoux)
+ - Accessing values abstracted as methods in Dancer::Session. (GH#1000,
+   John Wittkoski)
+
+1.3126 2014-07-14
+ [BUG FIXES]
+ - Bunch of files were not in the MANIFEST.
+
+1.3125 2014-07-12
+ [DOCUMENTATION]
+ - Improve the wording of the params() section in Dancer. (GH#1025, Warren
+   Young)
+ - Explain how to access config in Dancer::Config's POD.  (GH#1026, Gabor
+   Szabo)
+ - Cookbook typo fix. (GH#1031, Florian Sojer)
+
+ [ENHANCEMENT]
+ - Skip bad cookie definitions. (GH#1036, Manuel Weiss)
+ - 'dancer' script warns and die if trying to create  an app with the same
+   name of an existing module. (GH#1038, Racke)
+ - In Dancer::Logger::Abstract, default host name to '-' if not available.
+   (GH#1029, John Wittkoski)
+ - Add Dancer::Serializer::JSONP. (GH#1035, David Zurborg)
+
+1.3124 2014-05-09
+ [BUG FIXES]
+ - Remove print statement in Dancer::ModuleLoad::require.  (GH#1021, John
+   Wittkoski)
+ - Test was failing if JSON module was absent.			    
+   (GH#1022, Yanick Champoux)
+ - Allow for routes evaluating to false ('0', '', etc).  (GH#1020, Yanick
+   Champoux)
+
+ [DOCUMENTATION]
+ - Specify defaults in POD. (GH#1023, isync)
+ - Fix doc for params(). (GH#1025, reported by Warren Young)
+
+ [ENHANCEMENTS]
+ - Also check X-Forwarded-Proto. (GH#1015, Andy Jones)
+ - Update bundle jQuery to v1.11.0. (GH#1018, Michal Wojciechowski)
+ - Add session support to the skeleton config. (GH#1008. Gabor Szabo)
+
+ [MISC]
+ - Update mailing list url in README. (GH#1017, Racke)
+ - Markdownify the README. (GH#986, Chris Seymour)
+
+1.3123 2014-04-12
+ [BUG FIXES]
+ - Test was skipping wrong number of tests if JSON was absent.
+
+1.3122 2014-04-10
+ [BUG FIXES]
+ - Serializer::Mutable now consider 'Accept' before 'Content-Type'.
+   (GH#996, Bernhard Reutner-Fischer)
+ - Serializer::Mutable now correctly deals with content-types with
+   charsets. (GH#996, Bernhard Reutner-Fischer)
+ - Without Clone(), Dancer::Error::dumper() could clobber values in deep
+   structures. (GH#1006, fix by asergei)
+ - 'session_name' in Dancer::Session::Abstract couldn't be redefined.
+   (GH#1004, patch by Lee Carmichael)
+
+ [DOCUMENTATION]
+ - GH #995: Documentation improvements. (Colin Kuskie)
+
+ [MISC]
+ - Unused function 'path_no_verify' removed. (GH#998,  reported by
+   mjemmeson)
+
+1.3121 2014-02-02
+ [DOCUMENTATION]
+ - GH #983: Correction of various typos. (Akash Ayare)
+ - GH #981: Add synopsis to Dancer::Request::Upload. (smashz)
+ - GH #985: Change mentions of 'PerlHandler' to 'PerlResponseHandler'
+   (Xaerxess)
+
+ [ENHANCEMENTS]
+ - GH #994: change heuristic so that
+   'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' is
+   not recognized as text. (Skeeve)
+ - GH #987: get_current_session() now accepts option 'no_update'. (Lee
+   Carmichael)
+
+1.3120 2013-12-24
+ [DOCUMENTATION]
+ - GH #972: Correction of a truckload of typos. (David Steinbrunner)
+ - GH #971: Stress that the request's 'env()' method is prefered over
+   accessing '%ENV' directly. (isync)
+ - GH #968: Fix 'ScriptAlias' example in Deployment docs. (reported by
+   tednolan)
+ - GH #976: Document and trap limitation in Dancer::Test. (Tom Hukins)
+ - GH #976: Improve references to related modules. (Tom Hukins)
+
+ [ENHANCEMENTS]
+ - GH #974: Make plugins play nicely with mro 'c3'. (Fabrice Gabolde)
+
+1.3119 2013-10-26
+ [BUG FIXES]
+ - GH #959: hash randomization could cause .pl MIME to vary and test to
+   fail. (Olof Johansson)
+ - GH #961: fix bug in require_environment's logic. (reported by
+   sapphirecat)
+
+ [DOCUMENTATION]
+ - GH #962: Improvements of the Dancer::Test docs. (Tom Hukins)
+ - GH #970: Small documentation edit. (Matthew Horsfall)
+
+ [ENHANCEMENTS]
+ - GH #965: Serializer also serialize content for DELETE. (reported by
+   Achim Adam)
+
+1.3118 2013-09-01
+ [BUG FIXES]
+ - GH #655: clarify logger error message. (Yanick Champoux,  reported by
+   Gabor Szabo)
+ - GH #951: fix quoting of TemplateToolkit start_tag/stop_tag. (Rick Myers)
+ - GH #940: carry over the session when we forward().  (Yanick Champoux,
+   reported by sciurius)
+ - GH #954: don't die on autoflush for older perls.  (Yanick Champoux,
+   reported by metateck and David Golden)
+ - GH #950: Dancer::Test functions now populate REQUEST_URI. (Yanick
+   Champoux, reported by Sören Kornetzki)
+
+ [DOCUMENTATION]
+ - GH #942: simpilify the Apache deployment docs for cgi/fcgi. (bug report
+   by Scott Penrose)
+
+ [ENHANCEMENTS]
+ - GH #946: new 'require_environment' setting. (Jesse van Herk)
+ - GH #952: don't set defaults for Template subclasses for 
+   Dancer::Template::TemplateToolkit. (Rick Myers)
+ - GH #945: add function 'template_or_serialize' to
+   Dancer::Serializer::Mutable. (Yanick Champoux)
+
+ [MISC]
+ - GH #949: fixes a few errors in the serializer testsuite.  (Franck Cuny)
+
+1.3117 2013-07-31
+ [BUG FIXES]
+ - GH #794: Upload data was not kept for forwarded requests.  (reported by
+   William Wolf)
+ - GH #898: calling halt() doesn't discard set headers anymore.  (Yanick
+   Champoux, reported by Nicolas Franck)
+ - GH #842: embedded 'prefix' now properly localized.  (Yanick Champoux,
+   reported by Jashank Jeremy)
+
+ [DOCUMENTATION]
+ - GH #938: fix doc typos in Dancer::Serializer. (Fabrice Gabolde)
+ - GH #712: add all status codes known to Dancer to Dancer::HTTP.  (Yanick
+   Champoux, reported by Brian J Miller)
+ - Add warning that 'forward' doesn't preserver the session. (Alberto
+   Simões)
+ - GH #941: minor correction to code snippets in documentation.  (Grzegorz
+   Rożniecki)
+ - GH #929: add warning on the use of Corona as underlying web server. 
+   (issue reported by berekuk)
+ - GH #943: remove mention to 'Dancer::Plugin::Validation',  clean 'dancer
+   -a' sample output. (Grzegorz Rożniecki)
+
+ [ENHANCEMENTS]
+ - GH #836: Provide more information when an engine fails to load. (Yanick
+   Champoux, reported by Daniel Perrett)
+
+1.3116 2013-07-03
+ [ENHANCEMENTS]
+ - GH #767: forwarded_for_address() now looks for HTTP_X_FORWARDED_FOR if
+   X_FORWARDED_FOR is not there. (Jakob Voss)
+ - GH #936: Add file locking to file logger. (David Golden)
+ - GH #937: Add details to tutorial. (Craig Treptow)
+
+1.3115 2013-06-09
+ [BUG FIXES]
+ - GH #605: pass'ed megasplat with no further routes cause 404, not 500.
+   (vlyon)
+
+ [DOCUMENTATION]
+ - GH #934: Added example of HAProxy deployment. (Anton Gerasimov)
+
+ [MISC]
+ - Tests now require Test::TCP v1.30+ (previous version had too short a
+   timeout and tests were failing). (Yanick Champoux)
+
+1.3114 2013-06-02
+ [BUG FIXES]
+ - GH #724: app.pl obeys --confdir. (Yanick Champoux)
+ - GH #927: logging format using 'h' now play nicely if no header present.
+   (ironcamel)
+
+ [DOCUMENTATION]
+ - GH #922: Add example of request parameters. (Gabor Szabo)
+ - Add scheme line for ngnix config in D::Deployment.
+
+ [ENHANCEMENTS]
+ - GH #919: 'dancer' script exits with code 255 if application		   
+      name is invalid. (ppisar)
+ - GH #871: now recognize HTTP_X_FORWARDED_PROTO. (mlbarrow)
+ - GH #926: make messages from fatal warnings show up in the logs.  (Max
+   Maischein)
+ - GH #930: speed improvement. (ichesnokov)
+ - GH #859: strip illegal characters from cookie name. (Colin Keith)
+ - GH #924: non-'/' apps behind proxies now possible using 'request-base'
+   header. (Mikolaj Kucharski)
+
+1.3113 2013-05-08
+ [BUG FIXES]
+ - GH #920: fix pod for Dancer::Development. (ppisar)
+
+ [DOCUMENTATION]
+ - GH #915: add warning about behaviour of hooks with multiple packages
+   loaded by load_app (racke).
+ - GH #918: Fix headers syntax in Dancer::Response perldoc (Vyacheslav
+   Matyukhin).
+
+ [ENHANCEMENTS]
+ - GH #869: leave body parameters alone if deserialization failed
+   (brianphillips).
+ - GH #912: send_file was returning 500 instead of 404 for non-existent
+   files. (Fabrice Gabolde)
+ - GH #914: add link to melezhik's psgi chef cookbook.
+ - GH #923: implement lazy session flushing. (David Golden)
+
+1.3112 2013-04-10
+ [BUG FIXES]
+ - GH #900: backport the security patch for Dancer::ModuleLoader from
+   Dancer2 (mokko).
+
+ [ENHANCEMENTS]
+ - GH #897 dancer script diagnostic more explicit if target directory	   
+      does not exist or is not writable (reported by Andrew Grangaard).
+ - GH #907: skip tests of deprecated features (mokko).
+
+1.3111_02 2013-04-01
+ [BUG FIXES]
+ - RT #84198: silencing wide-character in-memory file handle error (Tom
+   Wyant).
+ - wrong number of tests to skip in t/14_serializer/01_helpers.t.
+
+1.3111_01 2013-03-30
+ [BUG FIXES]
+ - GH #891: silenced warnings from non-numeric versions in Makefile.PL
+   (Olof Johansson).
+ - GH #702: fix request->header call throwing exceptions inside routes	   
+      of Dancer->dance($request)  (Perlover).
+ - GH #893, GH #636: handle binary files for uploads in Dancer::Test
+   (Andrei).
+ - GH #903: add plan for subtest (bug report by wfaulk).
+
+ [DOCUMENTATION]
+ - GH #899: mention that response_exist and response_doesnt_exist are
+   deprecated (Fabrice Gabolde).
+ - GH #902, #903: change example to use path_info() instead of path()
+   (Anton Ukolov, Lee Carmichael).
+
+ [ENHANCEMENTS]
+ - GH #895: JSON serializer now uses JSON's "-support_by_pp" (Jonathan
+   Schatz).
+
+1.3111 2013-02-24
+ [BUG FIXES]
+ - GH #877: fix Dancer Error when so that 'exception' object is not passed
+   to serializers, because XML/JSON serializers don't understand objects
+   (rikbrown).
+ - GH #858: Check for definedness, not truth, when testing if we read into
+   the buffer when parsing a request body (florolf).
+ - GH #845: Fix uninitialized warning when loading modules (Fabrice
+   Gabolde).
+ - GH #851, GH #853: Atomic YAML session writing (Roman Galeev).
+ - GH #852: Saner UTF logging (Roman Galeev).
+ - GH #849, GH #850: Serve autopages with text/html content type. (Philippe
+   Bruhat - BooK)
+ - GH #848: Handle If-Modified-Since header in the request for static
+   files. (Philippe Bruhat - BooK)
+ - GH #848: Send a Last-Modified header for static files. (Philippe Bruhat
+   - BooK)
+ - GH #856: Don't export non-existing subroutine (mokko).
+ - GH #874: Reduce dependence on %ENV for internal code (Kent Fredric).
+ - GH #875: Don't expect specific order in cookies (Yanick Champoux).
+ - Remove 'exception' object from message being passed to serializers. 
+   (Rik Brown)
+ - Added .travis.yml to MANIFEST.SKIP so t/manifest.t passes (Kaitlyn
+   Parkhurst).
+ - GH #887, GH #890: keyword 'global_warnings' added to replace
+   'import_warnings' (Kaitlyn Parkhurst).
+ - GH #892: add 'private_key' to the list of potentially sensitive keys
+   (Tom Heady).
+
+ [DOCUMENTATION]
+ - GH #847: Fix typo (John Wittkoski).
+ - GH #865: Correct 'before' hook documentation (David Precious, Maurice).
+ - GH #860, GH #844, GH #760: Misleading plack middleware documentation.
+   (Paul Fenwick)
+ - GH #862: Fix heading level for strict_config entry in Dancer::Config.
+   (Stefan Hornburg - Racke)
+ - GH #863: Correct example apache config (John Wittkoski).
+ - GH #867: correct doc for ModuleLoader::load_with_params (mokko).
+ - Document route_cache option (David Precious).
+ - Docs for route_cache_size_limit & route_cache_path_limit (David
+   Precious).
+ - Remove meaningless 'encoding' to TT config (David Precious).
+ - Remove docs for mounting multiple apps (Naveed Massjouni).
+ - Update doc URLs (David Precious).
+ - Fix inconsistency in Perlbal deployment example (Slaven Rezić, Racke).
+ - GH #894: Replace spurious character in Dancer::Session's POD (Racke).
+ - GH #880: Add deprecation mention for 'after' (pdl and Yanick Champoux).
+
+1.3110 2012-10-06
+ [BUG FIXES]
+ - GH #817, #823, #825: Removing Clone from core. Pure-perl environments
+   supported again (Sawyer X).
+ - GH #755, #819, #827, #828: HTTP::Headers accepted by dancer_response
+   (Roberto Patriarca, Dagfinn Ilmari Mannsåker, draxil, perlpong).
+
+ [DOCUMENTATION]
+ - GH #821: Pointing to new homepage (alfie).
+ - GH #822: Typos in documentation (Stefan Hornburg - racke).
+ - GH #824: Fix in Dancer/Session.pm (pdl).
+ - GH #830: Fix Github links to https:// (Olivier Mengué).
+ - GH #838: Error in Dancer::Plugin::Ajax Documentation (Lee Carmichael).
+ - GH #839: Typo (goblin).
+
+ [ENHANCEMENTS]
+ - GH #826: The version of wallflower shipped with Dancer has been removed.
+   It was well out of date.  BooK is now maintaining it as a more general
+   solution under the name App::Wallflower. (BooK)
+ - GH #834: Provide empty Headers object if not defined (Yanick Champoux).
+ - GH #840, #841: Dancer::Plugin::Ajax now has content_type (Lee
+   Carmichael).
+
+1.3100 2012-08-25
+ [BUG FIXES]
+ - GH #816: Improve wording when failed to load engine. (Sawyer X)
+ - GH #817: Fix CODE reference uncloned using Clone::clone. (David
+   Previous, Sawyer X)
+
+ [DOCUMENTATION]
+ - GH #818: Use "MyWeb::App" instead of "mywebapp" in examples. (pdl)
+
+ [ENHANCEMENTS]
+ - GH #755: HTTP::Headers accepted by dancer_response. (Roberto Patriarca)
+
+1.3099 2012-08-11
+ [BUG FIXES]
+ - GH #683: Fix uninitialized warnings. (Sawyer X)
+ - GH #700: Take into account the app name in route caching. (Perlover)
+ - GH #775: Clone variables for templates. (Reported by Wanradt Koell,
+   fixed by David Precious, Sawyer X)
+ - GH #776: get should be default to get/head even it's inside any.
+   (Fayland Lam)
+ - GH #788: Make sure ID key in sessions are clobbered. (kocoureasy)
+ - Fix uninitialized variables in config file path. (Sawyer X)
+ - GH #809: Require all necessarily modules in Dancer::Config. (John
+   Wittkoski)
+
+ [DOCUMENTATION]
+ - GH #784: Synopsis fix in Dancer::Error. (Alex C)
+ - Document session_domain in Dancer::Config. (David Precious)
+ - Pod fixes in abstract session. (David Precious)
+ - Synopsis fix in Dancer::Test. (Stefan Hornburg <Racke>)
+
+ [ENHANCEMENTS]
+ - GH #799: New test function: response_redirect_location_is. (Martin
+   Schut)
+ - send_file now accepts an IO::Scalar. (David Precious)
+ - Clean up $VERSION. (Damien Krotkine)
+
+1.3098 2012-07-28
+ [DOCUMENTATION]
+ - Fix escaping on some docs (Stefan Hornburg @racke).
+
+ [ENHANCEMENTS]
+ - New keyword 'plugin_args' exported by Dancer::Plugin to provide a
+   consistent way with Dancer 2 to obtain arguments from a plugin keyword.
+   (Alberto Simões).
+ - Add 'execute_hook' and deprecate 'execute_hooks' for homogeneity with
+   Dancer 2.
+ - send_file will do the right thing if given an IO::Scalar object (David
+   Precious, prompted by Ilya Chesnokov).
+
+1.3097 2012-07-08
+ [ENHANCEMENTS]
+ - New keywords 'register_hook' and 'execute_hooks' exported by
+   Dancer::Plugin to provide a consistent way with Dancer 2 to declare and
+   run hooks from within a plugin (Alexis Sukrieh, idea from David
+   Precious).
+
+1.3096 2012-07-06
+ - Codename: Chop Hooey // Neil Hooey **
+
+ [ENHANCEMENTS]
+ - Finally released, thanks to Neil Hooey bugging my sorry ass.
+
+1.3095_02 2012-07-03
+ [BUG FIXES]
+ - fix exception tests in some cases (GH #734) (Damien Krotkine & katkad )
+
+ [DOCUMENTATION]
+ - Clarify serialization in introduction POD (Mark A. Stratman)
+ - Typo fix (Sam Kington)
+
+ [ENHANCEMENTS]
+ - If YAML does not load, Dancer::Config now reports why (Ovid)
+
+1.3095_01 2012-06-22
+ [BUG FIXES]
+ - Don't assume returned references are blessed when considering
+   continuations (Neil Hooey, GH-778)
+ - Malformed/missing cookies caused warnings  (James Aitken/LoonyPandora,
+   GH-782 and GH-783)
+ - Avoid potential crash in t/14_serializer/06_api.t if tmp dir is replaced
+   when %ENV gets cleared (Adam Kennedy)
+ - Properly initialize %callbacks to default empty hashref  in _send_file
+   if  not provided (Gary Mullen)
+
+ [DOCUMENTATION]
+ - Update Ubic service example (Vyacheslav Matyukhin)
+ - Silly typo fixing (Paul Fenwick)
+ - Typo in Dancer::Test file upload example (Jonathan "Duke" Leto)
+ - UTF-8 fixes in POD (ambs)
+
+ [ENHANCEMENTS]
+ - Add UTC timestamp options for logger_format (Alex C - perlpong).
+ - Tests can now run in parallel (Richard Simões).
+ - dancer_version keyword added (Damien "dams" Krotkine).
+ - New session_domain paramter allows you to set the domain of the default
+   session cookie (William Wolf)
+
+1.3095 2012-04-01
+ [BUG FIXES]
+ - Small fix to skip tests when YAML is not available. (Sawyer X)
+
+ [ENHANCEMENTS]
+ - Added 'info' log level for messages that should always go to the logs
+   but aren't really debug, warning or error messages (Ovid)
+
+1.3094 2012-03-31
+ [BUG FIXES]
+ - GH #763: Fix exceptions in ajax routes clobbering layout (ilmari)
+ - GH #748 & GH 647: Don't force override environment from PLACK_ENV
+   (jwittkoski)
+ - GH #762: fix param parsing lacking limit on split (leejo)
+ - GH #758: Fix Dancer::Test: make sure the request is properly converted
+   to a response. (Ovid)
+ - GH #729: Fix dancer exception composition, and message pattern
+   application (Damien Krotkine)
+ - GH #752: Exceptions raised in hooks were not propagated back to the
+   route code, but instead canceleld and replaced by a Dancer halt
+   exception. That was wrong. Now it is fixed, exceptions raised in hooks
+   can be properly caught in route code. (Damien Krotkine)
+ - Be more flexible in single vs. mutliple values in key hiding. (Sam
+   Kington)
+ - Use isa() for checking relationships instead of ref() in Dancer::Test.
+   (Ovid)
+
+ [DOCUMENTATION]
+ - Explain in POD that if there are multiple fields with the same name,
+   params('fieldname') returns an arrayref of them (alexrj).
+ - GH #750: Fix in Dancer::Deployment: appdir needs to be set before
+   calling load_app (Paul Johnson)
+ - Update 'before' hook document (David Cantrell).
+
+ [ENHANCEMENTS]
+ - Added 'strict_config' option to have the config return an object instead
+   of a hashref. (Ovid)
+ - GH #708: Added support for query strings in dancer_request (Jacob
+   Rideout)
+ - It's possible for the user to set the environments directory using a new
+   environment variable (DANCER_ENVDIR) or using `set envdir => $path`
+ - Sort hash keys when serializing references in log messages (Ovid).
+
+1.3093 2012-02-29
+ [BUG FIXES]
+ - GH #738: Define exception type ::Core::Request, to avoid things blowing 
+   up when Dancer::Request raises exceptions of that type (David Precious,
+   thanks to damog for reporting)
+ - GH #671: Fix Dancer::Plugin::Ajax with Plack::Builders. (Activeg, Sawyer
+   X)
+ - Auto-page feature cleanup and fixup. (David Precious)
+ - Remove uninitialized warnings. (Sawyer X, David Precious)
+
+ [DOCUMENTATION]
+ - Fix examples for multi-app deployment under Plack::Builder in
+   deployment.
+ - Deployment docs. (c0bra)
+ - Update tutorial. (David Precious)
+ - Clean up EXPORTS. (David Precious)
+ - Keyword documentation fixups. (Kirk Kimmel)
+ - Clarify forward docs with better examples. (David Precious)
+
+ [ENHANCEMENTS]
+ - Winning release race to Catalyst (nice try rafl++!)
+ - Add exception type ::Core::Request. (David Precious)
+ - JSON decode from UTF8. (Sam Kington)
+ - Provide the method when a route crashes to help debug. (Sam Kington)
+ - More helpful log messages. (David Precious)
+
+1.3092 2012-01-27
+ [BUG FIXES]
+ - Don't call isa() on unblessed refs in Dancer::Exception. (Sam Kington)
+ - Assume UTF-8 by default when serialising JSON. (Sam Kington)
+ - GH #725: If a cookie is set multiple times, last value wins. (David
+   Precious)
+ - More intuitive, backwards compatible appending of default template 
+   extension. (GH #716, David Precious)
+ - Prevent recursion in censoring. (Yanick Champoux, Damien dams Krotkine)
+ - GH #734: More tests flexibility (Sawyer X, reported by @birdy-)
+
+ [DOCUMENTATION]
+ - Document how to work with Dotcloud. (Oliver Gorwits)
+ - Clean ups and fix ups. (David Precious, Sawyer X, Michal Wojciechowski)
+
+ [ENHANCEMENTS]
+ - Return the current set prefix using prefix(). (Michal Wojciechowski)
+ - More intuitive appending of default template extension. Makes for
+   cleaner more DWIM code. (David Precious, reported by Nick Knutov)
+ - Allow any options to JSON serializer. (Lee Johnson)
+ - Support complex views with multiple document roots. (Pedro Melo)
+
+1.3091 2011-12-17
+ [BUG FIXES]
+ - Reverting template() behavior by popular demand. (Damien Krotkine)
+ - GH #714: Run post-request hooks when custom continuations were created.
+   (Damien Krotkine)
+ - Always call write_session_id() to update expires. (David Precious)
+
+ [DOCUMENTATION]
+ - GH #680: Document problems with multiple apps in Dancer using
+   Plack::Handler::Apache2 and recommend a workaround. (Asaf Gordon, Pedro
+   Melo)
+ - RT #73258: Spelling glitches. (Damyan Ivanov)
+ - Use ":script" instead of ":syntax" in Cookbook. (John Barrett)
+ - Typos in Deployment doc. (David Precious)
+
+ [ENHANCEMENTS]
+ - GH #711, #652: Add server_tokens variable to allow removal of headers.
+   (John Wittkoski)
+
+1.3090 2011-12-13
+ - Codename: Hornburg of Hannover // Stefan Hornburg (racke) **
+
+ [BUG FIXES]
+ - GH #685: Set VERSION for Dancer::Plugin::Ajax. (Sawyer X, Naveed
+   Massjouni)
+
+ [DOCUMENTATION]
+ - GH #694: Typo fix. (Yanick Champoux)
+ - GH #698: Document further TT init options. (Dennis Lichtenthaeler)
+ - GH #709: Update POD documentation regarding hook. (Stefan Hornburg)
+
+1.3089_01 2011-11-26
+ [BUG FIXES]
+ - Fix bug that made system() fail with -1 under Dancer (felixdo).
+ - Support for 'content_type' option on send_file when sending a system
+   wide file (Emmanuel Rodriguez).
+ - Support HTTP_X_FORWARDED_HOST in behing proxy (Ipaponov).
+ - Deserialize PATCH requests (Sam Kington).
+ - Encode log messages properly if charset UTF-8 is set (David Precious,
+   thanks to Penfold for the fix & MiklerGM for reporting).
+
+ [DOCUMENTATION]
+ - Clean up "plack_middlewares" example in docs (Richard Simões).
+
+ [ENHANCEMENTS]
+ - Continuations-style exception system! (Damien Krotkine).
+ - The ability for dancer_response to send file contents for file uploads
+   as a scalar, instead of reading from file on disk (Squeeks).
+
+1.3080 2011-10-25
+ - Codename: Sawyer's Sugar Stream // Sawyer X **
+
+ [ENHANCEMENTS]
+ - No functional changes, just releasing as stable.
+
+1.3079_05 2011-10-02
+ [API CHANGES]
+ - Deprecation of 'before', 'before_template' and 'after' in favor of hook
+   (Alberto Simões)
+
+ [BUG FIXES]
+ - Minor corrections (jamhed, felixdo)
+ - Log if a view and or a layout is not found (Alberto Simões, reported by
+   David Previous)
+
+ [ENHANCEMENTS]
+ - Add support for the HTTP 'PATCH' verb (David Precious)
+
+1.3079_04 2011-10-02
+ [DOCUMENTATION]
+ - Dancer::Plugins typos (Olof Johansson).
+ - PSGI handler documented (chromatic).
+
+ [ENHANCEMENTS]
+ - PSGI handler code cleaned up (chromatic).
+ - Improved warning localizations (chromatic).
+
+1.3079_03 2011-09-10
+ [BUG FIXES]
+ - Don't clobber TT INCLUDE_PATH if the user set it specifically in the
+   config file - Issue 643 (David Precious, reported by meraxes)
+ - Don't require a space after semi-colon delimiting multiple name=value
+   cookie pairs - Issue 642 (David Precious, reported by travisbeck)
+
+ [ENHANCEMENTS]
+ - Support XML::Simple configuration for serializing/deserializing (Alberto
+   Simões)
+ - Hard deprecate lots of stuff (Alberto Simões)
+
+1.3079_02 2011-08-28
+ [BUG FIXES]
+ - Remove hard-coded version from 404.html and 500.html (Alberto Simões)
+ - Fix logging of UTF8-encoded strings (jamhed)
+ - Do not clean 'vars' during forward (Alberto Simões)
+
+ [ENHANCEMENTS]
+ - Add streaming support to send_file. (Sawyer X)
+
+1.3079_01 2011-08-17
+ [BUG FIXES]
+ - Fix prefix behavior with load_app (alexrj)
+ - send_file() shouldn't clobber previously-set response status (David
+   Precious, reported by tylerdu - thanks!)
+ - Depend on URI 1.59 - Fixes problems when redirecting with UTF-8 strings
+   (Alberto Simões)
+ - Fix before_serializer POD fix (Yanick Champoux)
+
+ [DOCUMENTATION]
+ - Cookbook links to canonical documentation of keywords in Dancer.pm, so
+   readers encountering a new keyword can easily see the docs for it (David
+   Precious)
+ - Docs for debug/warning/error link to Dancer::Logger for details on how
+   to control where logs go (David Precious)
+ - Document import_warnings option, and mention it & link to that
+   documentation in opportune places.
+ - Document that 'get' also creates a route for 'HEAD' requests (David
+   Precious, prompted by Matt S Trout)
+ - Extend request() keyword docs with examples (David Precious)
+ - Correct port in Lighty/FCGI example in Dancer::Deployment (David
+   Precious, thanks to pwfraley in Issue 621)
+
+ [ENHANCEMENTS]
+ - send_file can send data (pass a reference to a scalar), and can specify
+   a content-disposition filename. (Alberto Simões)
+ - Set 'Server' HTTP response header as well as 'X-Powered-By'.  For cases
+   where Dancer is being accessed directly, or the proxy passes on this
+   header, it's nice to see it.  (David Precious)
+
+1.3072 2011-08-23
+ - Codename: Precious David Precious // David Precious (bigpresh) **
+
+ [ENHANCEMENTS]
+ - No functional changes, just releasing as stable.
+
+1.3071 2011-07-26
+ - Security release based on 1.3070 **
+
+ [SECURITY]
+ - FIX directory traversal issue Since 1.3070, it was possible to abuse the
+   static file serving feature to obtain files from a directory immediately
+   above the directory configured to serve static files from. (Vladimir
+   Lettiev and David Precious)
+
+1.3070 2011-07-14
+ - Codename: The Exceptional Mr. Dams // Damien Krotkine (dams) **
+
+ [ENHANCEMENTS]
+ - No functional changes, just releasing as stable.
+
+1.3069_02 2011-07-10
+ [BUG FIXES]
+ - Fix a bunch of cpan testers reports			     (Alberto
+   Simões)
+
+1.3069_01 2011-07-07
+ [BUG FIXES]
+ - Fix a bug while parsing some cookies (Franck Cuny)
+ - Documentation and tests on how to use many Dancer application inside one
+   PSGI file (PR 564) (Alex Kalderimis and Franck Cuny)
+ - More flexible test for locale-aware logging (Alberto Simões)
+ - Do not re-read config files when dance starts if they were already
+   loaded.  (Alberto Simões)
+ - Fixed shell-dependent tests for Window testing. (Alberto Simões)
+ - Die properly if halt is call inside an hook. (Damien Krotkine and
+   Alberto Simões)
+ - Make template work outside of requests (Issue 592) (David Precious)
+ - Cleanup session tests folder (Issue 594) (Sawyer X)
+
+ [DOCUMENTATION]
+ - Documentation on tokens automatically added to templates. (Alberto
+   Simões)
+ - Documentation on serializer magical access to put/posted data. (Alberto
+   Simões)
+
+ [ENHANCEMENTS]
+ - Error Hook (PR 563 - JT Smith)
+ - Exceptions system (Damien Krotkine)
+ - The no prefix can be set using 'prefix "/";' (Alberto Simões)
+ - Support for nested prefixes (Alberto Simões)
+ - Cleanup on Dancer::FileUtils (Sawyer X)
+ - Cleanup on File::Temp dependencies (Sawyer X)
+
+1.3060 2011-06-15
+ - Codename: Pirouetting Pedro // Pedro Melo **
+
+ [ENHANCEMENTS]
+ - No functional changes, just releasing as stable.
+
+1.3059_04 2011-06-12
+ [BUG FIXES]
+ - Fix a bunch of cpan testers reports 
+ - (Alberto Simões)
+
+1.3059_03 2011-06-11
+ [BUG FIXES]
+ - Fix for issue #539 https://github.com/sukria/Dancer/issues/539 Don't
+   decode twice entries in the params hash table, file			   
+	 uploads with UTF-8 characters in their name are now possible.
+   (Toby Corkindale, Alexis Sukrieh)
+ - Fix broken test with old version of HTTP::Parser::XS (Franck Cuny)
+ - #492 - Don't run Test::TCP tests on win32 (Franck Cuny)
+ - Fix a bug that when forwarding a post with post data stalled the code
+   (read on no data handle).  (Alberto Simões)
+ - Tweak tests regular expression to be more flexible (Pedro Melo)
+ - Require a recent Test::TCP (1.13) to run tests. (Alberto Simões)
+ - Fix hooks implementation that failed when user messes $_ (Pedro Melo)
+ - Fix broken params('query') and params('body') during forward and
+   dancer_request test function. (Alberto Simões and Squeek)
+
+ [DOCUMENTATION]
+ - Improve FileUtils documentation. (mokko)
+
+ [ENHANCEMENTS]
+ - Fix for issue #516 https://github.com/sukria/Dancer/issues/516 No more
+   legacy code in Dancer::Route to handle routes created  with the
+   deprecated keyword "r". The related code is now more  concise and should
+   be slightly more efficient. (Alexis Sukrieh)
+ - Merge PR #541 https://github.com/sukria/Dancer/pull/541 New "param"
+   accessor to retrieve a parameter easily. (Alberto Simões)
+ - Implement session directory testing cache for Session::YAML (Damien
+   Krotkine)
+ - Tests rework (improve speed, remove useless tests, ...) (Alberto Simões
+   and Franck Cuny)
+ - Configuration for log_dir and log_file. (Alberto Simões)
+ - Pass vars to templates automatically (David Precious)
+ - Support lexical prefix (Pedro Melo)
+
+1.3059_02 2011-05-29
+ [BUG FIXES]
+ - Fix for smoker failure under Perl 5.13.4
+   http://www.cpantesters.org/cpan/report/b37416b8-88df-11e0-9c74-cad5bcb80
+   94c Better use of Time::Hires in t/22_hooks/04_template.t (Franck Cuny)
+
+1.3059_01 2011-05-27
+ [API CHANGES]
+ - Second level of deprecation for render_with_layout method. (Alberto
+   Simões)
+ - Second level of deprecation for mime_type method. (Alberto Simões)
+
+ [BUG FIXES]
+ - Dancer::Test was broken for tests using data in POST (GH#534) (Franck
+   Cuny)
+ - Multiple setter implemented at 1.3039_01 was broken for App specific
+   settings. (Alberto Simões)
+
+ [DOCUMENTATION]
+ - Improve Serializers documentation (Damien Krotkine)
+
+ [ENHANCEMENTS]
+ - Cookie accessor to manipulate cookies directly. (Niko)
+
+1.3051 2011-05-27
+ - Security release based on 1.3050 **
+
+ [SECURITY]
+ - FIX CVE-2011-1589 (Mojolicious report, but Dancer was vulnerable as
+   well). Return "400 Bad Request" when requested filename seems suspicious
+   http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-1589 (Vladimir
+   Lettiev and Franck Cuny)
+
+1.3050 2011-05-20
+ - Codename: The Captain Hook Adventure // Franck Cuny **
+
+ [DOCUMENTATION]
+ - Improve Dancer documentation (Damien Krotkine)
+
+ [ENHANCEMENTS]
+ - No functional changes, just releasing as stable.
+
+1.3049_01 2011-05-14
+ [API CHANGES]
+ - Deprecation of 'logger' (use set). (Alberto Simões)
+ - Deprecate 'layout' (use set). (Alberto Simões)
+ - Definitely remove plack_middlewares HashRef deprecation. (Alberto Simões
+   & Damien Krotkine)
+
+ [BUG FIXES]
+ - Unbreaking auto_page somewhat - the catch-all route added will pass
+   unless a suitable view exists.  This means that routes like /foo are not
+   obscured, and made up URLs will result in a proper 404, not 500.  A
+   little more work required here, though.  (David Precious)
+ - Anchor regular expression routes. Before regular expressions were
+   matching anywhere in the URL. (Alberto Simões)
+
+ [ENHANCEMENTS]
+ - GH #519: remove redundant lines from CSS (Alberto Simões)
+ - When scaffolding an app, show a warning if YAML not installed. Prompted
+   by Issue 496.  (David Precious)
+ - Hooks! add new positions for hooks, and possibility to create your own
+   hooks inside your application and your plugin. (Franck Cuny)
+ - Don't try to read/set session vars with empty/undef keys.  It doesn't
+   make sense to do so, and can cause warnings elsewhere. (David Precious)
+ - Check HTTP status code/alias passed to status() is valid; previously,
+   and invalid code would result in the response status being unset (David
+   Precious, prompted on IRC by jonas)
+ - Lowercase status aliases and swap spaces for underscores before trying
+   to match (David Precious, suggested on IRC by jonas)
+ - Added 'behind_proxy' setting, making Dancer honor X_FORWARDED_PROTOCOL
+   and X_FORWARDED_HOST (Alberto Simões, requested by sukria and others)
+
+1.3040 2011-05-01
+ - Codename: Yanick in Black // Yanick Champoux, Labor Day - May Day **
+
+ [ENHANCEMENTS]
+ - No functional changes, just releasing as stable.
+
+1.3039_01 2011-04-27
+ [BUG FIXES]
+ - Fix 404 results from forwarding. (Alberto Simões)
+ - Don't remove trailing slashes from route patterns under prefix. (Brian
+   E. Lozier)
+ - Remove deprecated r() function from list of exports. (Stefan Hornburg)
+ - GH #402: make session_expires honor +2h style formatting. (Michael G.
+   Schwern)
+ - GH #433: encoding issues with forward(). (Alberto Simões)
+ - GH #390: Renaming access_log to startup_info (+doc). (Sawyer X)
+ - Rewrite scalar usage of qw() that is incompatible with 5.14. (Alberto
+   Simões)
+ - Don't parse ARGV when under PSGI (closes #473) (Franck Cuny)
+
+ [DOCUMENTATION]
+ - Major rewrite/reorganization on Dancer::Config documentation. (David
+   Precious, pushed by Alberto Simões PR)
+ - GH #284: Document hosting multiples Dancer apps in a single PSGI file.
+   (Franck Cuny)
+ - Dancer::Session POD typos and spurious characters. (Stefan Hornburg)
+
+ [ENHANCEMENTS]
+ - Forward can change method GH#493 (Alberto Simões)
+ - Introducing the "megasplat"! (Yanick Champoux)
+ - More tests for versions, setings and variables. (Alberto Simões)
+ - Improve Dancer::Test so failures report the correct line numbers.
+   (Michael G. Schwern)
+ - GH #466: Can now set cookies with http_only => 0 for JS integration.
+   (Alberto Simões)
+ - Session engine can be told to set cookies without HttpOnly attribute
+   using new session_is_http_only setting. (Alberto Simões, requested by JT
+   Smith)
+ - GH #296: Show versions of loaded modules in startup info. (Sawyer X)
+ - Able to set more than one value at once using set(). (Alberto Simões)
+ - GH #253: Use Clone::clone() if available to clone data before censoring.
+   (Sawyer X)
+ - GH #246: Dancer::Test can now test for file uploads as well. (Franck
+   Cuny)
+ - Allow parameters in forward(). (Alberto Simões)
+
+1.3030 2011-04-13
+ - Codename: Silence of the ambs // Alberto Simões **
+
+ [ENHANCEMENTS]
+ - Change the flag for sending system-wide path with send_file to
+   'system_path' (was 'absolute'). (Alberto Simões)
+
+1.3029_03 2011-04-10
+ [BUG FIXES]
+ - Dancer::Session::Cookie 0.14 is required for dependency test.
+ - Only test for undef serializer if we have the default (JSON) available.
+   (Sawyer X)
+
+ [ENHANCEMENTS]
+ - Test before_template & auto_page.
+
+1.3029_02 2011-04-08
+ [BUG FIXES]
+ - Better way to initialize the logdir in Dancer::Logger::File. Works now
+   cleanly if the appdir is not writable but the logdir exist and is
+   writable. (Alberto Simões)
+ - fix warnings in t/03_route_handler/28_plack_mount.t. (Franck Cuny)
+
+ [DOCUMENTATION]
+ - POD fix. (Stefan Hornburg - Racke)
+
+ [ENHANCEMENTS]
+ - Support for error templates. If the setting "error_template" is set, it
+   is used when building an error page instead of using the default
+   template. Added the appropirate documentation as well. (Alberto Simões)
+ - Dancer::Test::dancer_response() returns a 404 response when no route
+   handler is found. This is consistent with what Dancer does internally.
+   (Alberto Simões)
+ - Dancer::Test provides a new helper for inspecting subsets of headers:
+   "response_headers_include". (Alberto Simões, Alexis Sukrieh)
+ - dancer_response now handles the rendering of static pages as well.
+   (Alberto Simões)
+ - Cleanup some tests. (Alberto Simões)
+
+1.3029_01 2011-04-01
+ [BUG FIXES]
+ - Fix t/14_serializer/02_json.t to work with older JSON (relates to
+   GH#416) (Damien Krotkine)
+ - the Changelog test now supports Codenames. It suggests to add codenames
+   for table releaes as well (Damien Krotkine)
+ - GH #420: Extra content generated (Alberto Simões, Damien Krotkine)
+ - GH #409: If pass has no more matching routes, return 404. (Alberto
+   Simões)
+
+ [DOCUMENTATION]
+ - Add documentation to send_file optional argument (Alberto Simões)
+ - Fix plack_middlewares example in the cookbook (Michael G. Schwern)
+ - Extend the POD on plugin_setting to prevent a pitfall with plugin
+   modules more than 3 levels deep. (Stefan Hornburg)
+ - GH #400: Documenting the plack_middlewares_map. (Michael G. Schwern,
+   Sawyer X)
+ - GH #422: Documenting no need for caret when you have a prefix. (Sawyer
+   X)
+
+ [ENHANCEMENTS]
+ - GH #396: Test that Dancer::Session::Cookie isn't broken (Michael G.
+   Schwern)
+ - GH #399: Make sure session can have their name changed. (Michael G.
+   Schwern)
+ - Dancer::Test tests assumes 'GET' if their first argument is scalar.
+   (Yanick Champoux)
+ - send_file accepts optional content-type declaration, to override guessed
+   MIME type, e.g. send_file $filename, content_type => 'image/png'
+   (Alberto Simões, requested by Michael G Schwern)
+ - send_file accepts optional absolute option, to send an absolute path
+   (Alberto Simões)
+ - Have `dancer` cmd tool create MANIFEST and MANIFEST.SKIP. (Alberto
+   Simões)
+ - mime_type is deprecated; new keyword 'mime'; new config key
+   'default_mime_type'; (Alberto Simões and Michael G. Schwern)
+ - Recognize absolute redirects  (Yanick Champoux)
+
+1.3020 2011-03-21
+ - Codename: The Schwern Cometh // Michael G. Schwern **
+
+ [ENHANCEMENTS]
+ - No functional changes, just releasing as stable.
+
+1.3019_02 2011-03-14
+ [BUG FIXES]
+ - GH #354: Tokens are not passed to layout if no params are passed to
+   template. (Damien Krotkine)
+
+1.3019_01 2011-03-13
+ [BUG FIXES]
+ - GH #393: Reset vars for each new request. (Franck Cuny)
+
+ [ENHANCEMENTS]
+ - GH #391: Dancer::Logger::Note now exists. :) (Sawyer X)
+ - Porting documentation on WRAPPER to Dancer::Template::TemplateToolkit.
+   (Sawyer X)
+ - GH #387: Document views and appdir in Dancer::Config. (Michael G.
+   Schwern)
+ - Add a new symbol to exporter ':script'. (Franck Cuny)
+ - GH #397: Support cookie expire times like "+2h". (Michael G. Schwern)
+
+1.3014_01 2011-03-10
+ [BUG FIXES]
+ - GH #373: Display valid path to the main app file in the welcome screen.
+   (Franck Cuny)
+ - GH #152, GH #170, GH #362: Log dir is not created when logger is not set
+   to 'file', and setting log_path works as expected. (Franck Cuny)
+ - GH #308: Use request's uri_base. (Sawyer X)
+ - GH #378: Some routes with prefix where wrongly matched. (Franck Cuny)
+
+ [DOCUMENTATION]
+ - Dancing on command line. (Maurice Mengel)
+ - Improve Dancer::Cookbook. (Maurice Mengel)
+
+ [ENHANCEMENTS]
+ - GH #351: Explicitly exclude some keywords when important Dancer's
+   syntax, add modes that also excludes some keywords (:moose, :tests).
+   (Sawyer X, Naveed Massjouni, Michael G. Schwern, Franck Cuny)
+ - All logging options accept any number of variables. (Sawyer X)
+ - GH #297: All logging options can automatically serialize references.
+   (Sawyer X)
+ - Add Dancer::Logger::Capture to capture and read log messages during
+   testing. (Michael G. Schwern)
+ - Dancer::Cookie make secure (https only) cookies. It also adds the
+   "session_secure" setting instructing sessions to use secure cookies.
+   (Michael G. Schwern)
+ - Adding uri_base to Request.pm. (Sawyer X)
+ - Make Dancer::Test use the capture logger (Michael G. Schwern)
+
+1.3014 2011-03-04
+ [BUG FIXES]
+ - YAML Session UTF-8 Fix (Roman Galeev)
+ - Tests and documentations for Dancer::Request::Upload + type method in
+   Dancer::Request::Upload (Michael G. Schwern)
+ - Dancer::Test::dancer_response handles correctly its 'body' parameter We
+   can now pass a hash ref as the body of dancer_response, it will
+   automatically be serialized as an URL-encoded string with the
+   appropriate content_type header. (Alexis Sukrieh)
+
+1.3013 2011-03-01
+ [ENHANCEMENTS]
+ - Fix test suite: the changelog test is skipped if not under 
+   RELEASE_TESTING environment.
+
+1.3012 2011-03-01
+ [BUG FIXES]
+ - Fix cookies disappearing when more than one is set. Complete refactoring
+   of the cookie handling. (Chris Andrews, Geistteufel)
+ - Properly set the settings in Dancer::Test only after config loading.
+   (Sawyer X)
+ - Fix possible loss of last directory in path. (Sawyer X)
+ - No need for default upper directory in Dancer::Test. This fixes an issue
+   raised on the list about the default scaffolded test failing. (Sawyer X)
+ - Fix anti UNC substitution under Cygwin (Rowan Thorpe)
+ - GH#299 Return appropriate headers on HEAD request (content-type, ...)
+   (franck cuny)
+ - Use the dancer_version variable in scaffolded app. (Sawyer X, reported
+   by Brian E. Lozier)
+
+ [DOCUMENTATION]
+ - Add missing methods (e.g. "referer"), sorting, clean up. (Flavio
+   Poletti)
+ - Complete working example of deployment under Nginx/Starman in
+   Deployment.pod (Geistteufel)
+
+ [ENHANCEMENTS]
+ - Fix manifest (Damien Krotkine)
+ - Various packaging, changelog and test fixes (Damien Krotkine)
+ - Add a new accessor to Dancer::Request: ->uri. (it's an alias to
+   ->request_uri) (Franck Cuny)
+ - Removes Dancer::Helpers, refactor Dancer.pm accordingly. (Franck Cuny)
+ - Introduce changelog test of hell. (Damien Krotkine)
+ - Add Dancer::Logger::Null. (Sawyer X)
+ - Add Dancer::Logger::Diag. (Sawyer X)
+ - Refactor Dancer::Response (franck cuny)
+ - Allow to use a subclass of Template::Toolkit. (Michael G. Schwern)
+ - Dancer::Test now uses Dancer::Logger::Null instead of ::File. (Sawyer X)
+ - Add Dancer::Deprecation. (handle deprecation messages) (franck cuny)
+ - Introduce new timestamp format in logger (%T) (Roman Galeev)
+ - Refactoring of the forward method (Alex Kalderimis)
+ - Refactoring of internal objects in the core,  use more of
+   Dancer::Object. Introduce attributes_defaults (Damien Krotkine)
+ - Add a perl_version variable to all templates, used in scaffolded app.
+   (Sawyer X, reported by Brian E. Lozier)
+ - Better output when template file is missing. (Brian E. Lozier, Sawyer X)
+
+1.3011 2011 .02.14
+ [BUG FIXES]
+ - Set binmode in write_data_to_file() to fix image corruption in Windows
+   (Rowan Thorpe)
+ - GH#319, GH#278, GH#276, GH#217: Fix file issues on Cygwin and  Win32
+   platforms (Rowan Thorpe)
+ - GH#322: Detect errors in scaffolded dispatchers (Alberto Simões)
+ - Fix tests so that they don't fail if JSON is not installed (Damien
+   Krotkine)
+
+ [DOCUMENTATION]
+ - Small spaces fix (Alberto Simões).
+
+1.3010_01 2011 .02.12
+ [BUG FIXES]
+ - GH#136: fix again Mime::Type issues in preforking environment (Chris
+   Andrews) * GH#220: fix for path issues under MacOS X and Windows
+   platforms. A new function is provided by Dancer::FileUtils:
+   path_no_verify() (Rowan Thorpe) * Fix for infinite loops detection in
+   before filters (Flavio Poletti)
+
+ [DOCUMENTATION]
+ - Fix a typo in Dancer::Request::Upload's POD (Rowan Thorpe)
+ - Better documentation for the before filters, explanations about the
+   potential infinite loops that can happen when using before filters (and 
+   what Dancer does in that case). (Flavio Poletti)
+
+ [ENHANCEMENTS]
+ - Better detection of the application layout under non-UNIX platforms.
+   (Rowan Thorpe, Alexis Sukrieh)
+
+1.3010 2011 .02.10
+ [BUG FIXES]
+ - GH#303: Generated Makefile.PL's clean is done correctly now. (Sawyer X)
+ - Minimum version of HTTP::Headers to avoid test fails. (LoonyPandora)
+ - Do not require JSON to get version number (fixes tests). (Sawyer X)
+
+ [ENHANCEMENTS]
+ - Allow read_file DWIMishness using wantarray. (LoonyPandora)
+ - Tidy up Dancer.pm (Damien Krotkine)
+ - Document forward should use return. (Sawyer X)
+ - GH#290: Use return with redirect examples in docs. (Damien Krotkine)
+ - Document that base() returns a URI object. (David Precious)
+ - Show version when starting standalone server. (David Precious)
+
+1.3003 2011 .02.06
+ [API CHANGES]
+ - Remove load_plugin from the core's DSL (was deprecated).
+
+ [BUG FIXES]
+ - Eliminate test warnings on Windows. (Gabor Szabo)
+ - GH#271 - use correct VERSION_FROM in scaffolded application. (Sawyer X)
+ - GH#260 - send_file doesn't clobber existing headers (Alexis Sukrieh)
+ - logger unicode bugfix in the formated date (jahmed)
+ - GH#281 - Don't crash if splat is used with no captures (David Precious)
+ - Possible to given "template" a view name with the extenstion. (Alexis
+   Sukrieh)
+
+ [ENHANCEMENTS]
+ - New setting log_path to allow for alternalte logging path in logger
+   "file". (Natal Ngétal)
+ - GH#289: Add more aliases on the ENV, provide more smart accessors to
+   Plack env entries (Franck Cuny)
+
+1.3002 2011-02-02
+ [API CHANGES]
+ - to_json and from_json accept options as hashref instead of hash. Passing
+   arguments as hash is deprecated  (Franck Cuny).
+
+ [BUGFIXES]
+ - status is kept even when halt is used in a before filter (Alexis
+   Sukrieh) * Proper handling of temporary file creation using File::Temp
+   module instead of homebrew solution. (jahmed) * Logger::Abstract unicode
+   bug fix. (jahmed)
+
+ [ENHANCEMENTS]
+ - In development, pretty-print JSON serializations for easier development 
+   (Ask Bjørn Hansen)
+
+1.3001 2011-01-27
+ [Alberto Simoes]
+ - Support for aliases for content_type and refactoring of  mime-types
+   handling, with a new class Dancer::MIME (closes issue GH #124)
+ - Deprecation of Dancer::Config::mime_types (now handled by Dancer::MIME).
+
+ [David Precious]
+ - Point people towards D::P::Database in the tutorial.
+ - Mention leaving ratings on cpanratings. 
+ - Some minor typo fixed in the documentations.
+
+ [Flavio Poletti]
+ - Added "git fetch upstream" for remote tracking
+ - turned a tab into the right number of spaces
+ - Fix weird Plack error "status code needs to be an integer greater than
+   or equal to 100", because of a typo in a call to Dancer::Error (Closes
+   issue GH#264)
+
+ [Franck Cuny]
+ - uri_(un)escape cookie value; closes GH-248 
+ - remove websocket tutorial (it has its own distro now)
+ - add a new tests to make sure unknown templates produce a warning 
+ - path for send_file must be relative from the public directory 
+ - Support for complex values in cookies (scalars, flat arrays and  flat
+   hashes). Fixes issue GH#249
+
+ [Hagen Fuchs]
+ - Request.pm Decode HTTP::Request's uploads
+
+ [jahmed]
+ - Fix a bug in YAML session backend, during the creation of the session
+   file.
+
+ [mokko]
+ - typos and a little more substatial changes to Development.pod 
+
+1.3000_02 2011-01-03
+ [Damien Krotkine]
+ - FIX for --no-check switch in script/dancer
+ - Refactoring of Dancer::Template::Abstract - add support of apply_layout
+   and apply_renderer - deprecation of render_with_layout (now handled
+   better) - add an accessor "engine" to the DSL to access any engine
+   singleton - better interface for Dancer::Object and
+   Dancer::Object::Singleton - updated tests accordingly
+
+ [Jonathan Otsuka]
+ - Bring dancer application creation pod up-to-date 1.2003
+
+ [Sawyer X]
+ - Added forward() functionality (incl. tests and docs)
+
+1.3000_01 2010-12-22
+ [Alan Haggai]
+ - Fixing up typos in various places.
+ - Show the correct filename in usage.
+
+ [Alexis Sukrieh]
+ - Update documentation for developers. Dancer::Development reflects the
+   new releases startegy since 1.2 is out. Also better explaining about how
+   to contribute pull-requests to the core team.
+ - New documentation for integrators: Dancer::Development::Integration
+   describes precisely how integrators should handle pull-requests.
+
+ [Damien Krotkine]
+ - Better check of keywords used in plugins.
+ - internal refactoring: - Dancer::Object::Singleton added to refactor
+   engines later - Support of inheritance in attributes declared with
+   Dancer::Object
+
+ [Franck Cuny]
+ - Support for configurable log format in logger engines
+ - Refactoring of Dancer::Route, some optimisations and code cleanup
+ - Add several tests to increase the coverage (reached 92.4%, for 1399
+   tests)
+
+ [Gabor Szabo]
+ - Adding test for multi-leveled scaffolding.
+
+ [Maurice Mengel (mokko)]
+ - Skip file upload tests on Cygwin, not just win32.
+
+ [Naveen]
+ - add a --no-check switch to script/dancer to disable remote check of new
+   Dancer versions.
+
+ [Philippe Bruhat]
+ - add script/wallflower, helper to turn a Dancer application into a static
+   web site.
+ - better behaviour for plugin_setting (better search, more user-friendly)
+
+ [jamhed]
+ - Fix some unicode issues, refactored all file openings in one function in
+   Dancer::FileUtils.
+
+1.2003 2010-12-10
+ - Production release.
+
+1.2002_02 2010-12-08
+ [Danijel Tasov]
+ - Correct HTTP.pm POD's 503 entry with 403.
+
+ [Paul Tomlin]
+ - Tests for URI object in uri_for.
+ - Update Plack middleware tests compatibility.
+
+1.2002_01 2010-12-07
+ [Franck Cuny]
+ - Fix test failures on old machines with Test::More without done_testing.
+
+ [Joel Roth]
+ - Code fixes in documentation (Dancer::Session, Dancer::Introduction).
+
+1.2002 2011-01-27
+ - Productionized! :)
+
+1.2001_01 2010-12-02
+ [Danijel Tasov]
+ - Default layout now validates.
+
+ [David Precious, Ivan Bessarabov]
+ - Fixing TT example config.
+
+1.2001 2010-11-30
+ [David Precious]
+ - Doc fixes. Clarifications to Cookbook's REST section.
+ - Don't crash if application name is invalid and provide better
+   information.
+
+ [Franck Cuny]
+ - Refactoring engine triggers. This resolves an issue of engine inits
+   being run before all configuration is read. That also crashes
+   D::S::Cookie. As a side effect we now have a refactored _set_setting()
+   which does not trigger any engine hooks (unlike setting()).
+ - Fix failing test t/07_apphandlers/06_debug.t
+
+ [Sawyer X]
+ - Fix clash with KiokuDB because of Dancer::Serializer::Dumper.
+
+1.2000 2011-01-27
+ - 1.2 is a stable release of Dancer **
+ - We assure consistency and stability for this release and the following
+   **
+ - 1.2xxx releases; you should not have issues updating to any 1.2xxx	   
+      **
+ - version because of it.	       **
+ - A very special thanks goes to the Dancer community who improved and	   
+      ++
+ - perfected this release and worked hard on reporting bugs, fixing them,
+   ++
+ - improving the stability, providing important features and everything  
+   ++
+ - else which makes Dancer so attractive - and above all: its community  
+   ++
+ - so thank you!		       ++
+
+ [Sawyer X]
+ - Fixing some more XML tests with missing preqreqs.
+
+1.1999_04 2010-11-14
+ [Sawyer X]
+ - Load Plack::Loader dynamically in test.
+
+ [Yanick Champoux]
+ - Doc fix.
+
+1.1999_03 2010-11-11
+ [Al Newkirk]
+ - fixed redirect to redirect immediately (+ refactoring by franck)
+
+ [Alexis Sukrieh]
+ - Transparent unicode support Dancer now takes care transparently of
+   decoding unicode strings used within route handlers and encoding them
+   back before sending a response content. Once the 'charset' setting is
+   set, the user has nothing more to do to have a working unicode-aware
+   application.
+ - FIX for issue #172 More documentation added to Dancer::Request, all
+   public method are documented. A pod coverage test has been added for
+   this module.
+ - Documentation update The deployment documentation is more precise about
+   cgi/fast-cgi deployment under Apache.
+ - FIX for issue GH#171 Scaffolded configuration files are fully commented
+   in order to quickly guide the user in her first steps.
+
+ [Damien Krotkine]
+ - Fix Dancer::Plugin OO issue
+
+ [Danijel Tasov]
+ - Fixed expires in cookies + tests
+
+ [Dave Doyle]
+ - clarify Pod as to how before_template works
+
+ [Franck Cuny]
+ - Closes issue 181 (unknown log level)
+ - Plack middlewares must be listed in an arrayref (listing them in a
+   hashref is now deprecated)
+
+ [Philippe Bruhat]
+ - Dancer::Logger::Abstract: turn _should() into a closure, and avoid
+   setting up the hash again and agai
+
+ [Sawyer X]
+ - Overhaul tests to use lib t/lib instead of t::lib::. (fixes Windows test
+   fails)
+ - PSGI envs on Windows is in capital letters. (fixes Windows test fails)
+ - Add tests on every required directory to create a fake environment.
+   (realpath() on Windows fails when path doesn't exist)
+
+1.1999_02 2010-10-15
+ [Alexis Sukrieh]
+ - FIX for issue GH #151 utf8 pragma is imported automatically when Dancer
+   is loaded to allow the usage of UTF-8 strings in the application code.
+   (Thanks to kocoureasy for the report).
+ - FIX for "UTF-8" issues (GH#153): - response content is encoded only if
+   content_type is text - charset setting is normalized to UTF-8 when
+   appropriate - automatically decode UTF-8 strings in params
+ - FIX scaffolded dispatchers (script/dancer) The PLACK_ENV variable is not
+   propagated by Apoache to the dispatchers (at least with our Deployment
+   examples) so the dispatchers aren't aware of the PSGI context if we
+   don't tell them explicitly. This patch forces the dispatchers in PSGI
+   mode.
+ - FIX (unknown bug) When a serializer is set and show_errors is true,
+   don't expose internal errors caught.
+
+ [Damien Krotkine]
+ - replace all die and warn with croak and carp
+
+ [Franck Cuny]
+ - Dancer::Test load D::Session::Simple
+ - rewrite how Dancer handle HTTP headers - no more Dancer::Headers - all
+   headers are HTTP::Headers object
+
+ [Mark Allen]
+ - Add a tutorial (Dancer::Tutorial)
+ - example application 'Dancr', provided in example/
+
+ [Naveen]
+ - add --version to the dancer CLI
+ - changed the URI fetched by the dancer script to check Dancer's version
+
+ [Philippe Bruhat]
+ - use Pod::Usage
+
+1.1999_01 2010-10-14
+ [Adam J. Foxson]
+ - FIX for issue GH#136: "readline() on closed filehandle DATA" error that
+   appears when running the app with Starman
+
+ [Alexis Sukrieh]
+ - FIX for utf8 content in views Dancer now handles correctly templates
+   with non-ASCII characters in views. All you have to do is to set the
+   "charset" setting in your config. Your content response will then be
+   encoded appropriately on-the-fly by Dancer.
+ - Scaffolded app sets the charset to "utf8" by default.
+ - Better design for the scaffolded app (logo, favicon and background image
+   added)
+ - Environment info available on scaffolded app
+ - LWP is used by the dancer helper to download files
+ - jQuery 1.4.2 (minified) is included in the scaffolded app
+ - default layout uses <% request.base %> in order to support mounted apps
+   (Thanks to Naveed Massjouni and Franck Cuny for the concept/idea).
+ - The main.tt layout sources jQuery first from Google CDN and falls back
+   to the local minified version if on offline mode.
+ - New default token provided to the "template" helper: dancer_version
+
+ [Damien Krotkine]
+ - FIX for issue GH#115 documentation about compression in
+   Dancer::Deployment
+
+ [David Precious]
+ - Make the 'layout' param to the template keyword work as you'd expect and
+   allow you to set a custom layout to use, e.g.: template 'templatename',
+   {}, { layout => 'layoutname' };
+
+ [Franck Cuny]
+ - FIX for issue GH#129 don't add multiple content-type to headers
+ - fix broken tests (they were testing incorrect content type)
+
+ [Naveed Massjouni]
+ - Dancer::Test function get_response is renamed to dancer_response
+   get_response still works but is deprecated
+ - dispatch.f?cgi scripts use FindBin to resolve their location. FIX a bug
+   when using symlinks.
+
+ [Philippe Bruhat]
+ - Make sure a plugin refuse to register a keyword twice
+
+ [Sawyer X]
+ - Lots of documentation updates
+ - Dancer now logs caught crashes in rendering (easier to debug Ajax
+   routes)
+
+ [Sebastian de Castelberg]
+ - The dancer helper is able to download files via a transparent proxy
+   (thanks to LWP).
+
+1.1904 2011-01-27
+ [Sawyer X, Franck Cuny]
+ - SAX, not Sax.
+ - Check for XML::Parser or XML::SAX in test as well.
+
+1.1903 2011-01-27
+ [Sawyer X, Franck Cuny]
+ - XML::Simple needs either XML::SAX or XML::Parser. (fixed test fails from
+   Dancer::Serializer::XML)
+
+1.1902 2010-11-02
+ [Adam J. Foxson]
+ - Addresses issue #136: "readline() on closed filehandle DATA"
+
+1.1901 2010-09-24
+ [Alexis Sukrieh]
+ - load_plugin is DEPRECATED; 'use' should be used instead to load a
+   plugin. This is fixes the major issue with plugins about symbol exports
+   that didn't work well (issue #101).
+ - All paths built in a scaffolded application are dynamic, it's now
+   possible to move a scaffolded application after it's been generated.
+   (fixes issues #88,
+ - The auto_reload feature is now disabled by default due to too many
+   unsolved issues (it works most of the time, but some race conditions are
+   still present) This feature is still being working on, but it's now
+   flagged "experimental").
+ - Default log level in development environment is now 'core' in order to
+   provide more information.
+ - New scaffolded application design. More neutral and with lots of
+   information for a beginner, and links to useful material. Based on the
+   Ruby on Rails start page (kudos to the Rails team,
+   http://www.rubyonrails.org).
+
+ [Boris Shomodjvarac]
+ - Support for a clean way for Template engines to define their template
+   file extensions (issue #126).
+
+ [Franck Cuny]
+ - implemented GH#120: - methods {to,from}_{xml,json,yaml} accept more than
+   one arguments. The first argument is the data to transform. All the
+   remainings arguments are parameters to alter the behavior of the
+   serializers. Refer to the documentation for more informations.
+ - more tests added
+
+1.1812 2010-09-21
+ [Alexis Sukrieh]
+ - Fix for scaffolded apps
+ - Dancer::Deployment cleanup (CGI section)
+ - Declare LWP explicitly (already implied by HTTP::Body and HTTP::Headers)
+
+ [Franck Cuny]
+ - Skip bogus uploads test on Win32 (thanks to Alias for reporting)
+
+ [Sawyer X]
+ - Nitpicking at tabs and spaces at end of lines
+
+1.1811 2010-09-03
+ [Franck Cuny]
+ - FIX for issue #113 and #112
+
+ [Naveed Massjouni]
+ - FIX for issues #111 and #108
+
+1.1810 2010-09-01
+ [Alexis Sukrieh]
+ - Fix a test that depends on YAML (pass if not present) (Smoker failure
+   '2010-08-30T11:07:59Z').
+
+ [Naveed Massjouni]
+ - FIX for issue #108 replaced Clone::clone() with Storable::dclone().
+ - Fixed the plan of one of the test files.
+
+1.1809 2010-08-25
+ [Alexis Sukrieh]
+ - fix plan for t/03_route_handler/24_named_captures.t
+
+ [Franck Cuny]
+ - update Deployement.pod and Cookbook.pod
+ - fix bug in route building with prefix
+ - don't use app.psgi anymore in generated scripts
+ - fix GH#106: serializer
+ - fix bug in PSGI handler using HTTP::Headers when using some header
+ - fix bug in ajax query
+ - more tests
+
+1.1808 2010-08-24
+ [Alexis Sukrieh]
+ - FIX test failures - t/08_session/07_session_expires.t -
+   t/08_session/07_session_expires.t
+
+1.1807 2010-08-23
+ [Alexis Sukrieh]
+ - Global rewrite of Dancer's core to allow support for sub-application,
+   better route resolution and a better design.
+ - Support for mountable applications via "load_app". Mounted applications
+   can have their own settings registry and can be mounted under a given
+   prefix.
+
+ [Franck Cuny]
+ - Support for new hooks: - after: to allow response post-processing -
+   before_template: to allow defaut tokens to be given at anytime to the
+   template function.
+ - Fix and test for bug  RT#57829 (Custom response headers lost when using
+   JSON serializer)
+ - FIX PSGI compatibility layer (request->path_info is used when
+   appropriate instead of request->path)
+ - FIX for GH#100 When loading a module, it's possible to require a minimal
+   version.
+ - New option "ajax" for route handlers.
+ - Fix a bug in ajax route when processing the route resolution (when a
+   route is defined with options, it's pushed in the beggining of the route
+   handler tree).
+
+ [Naveed Massjouni]
+ - Dancer::Test can now test requests with a body
+
+ [Sawyer X]
+ - Fix for RT #60403: removing Test::Exception requirement
+
+ [jamhed]
+ - Support for new setting "session_expire" in order to allow session
+   cookies to expire before the browser is closed.
+
+1.1806_02 2010-08-16
+ [David Precious]
+ - Add Dancer::Plugins POD, describing useful plugins
+ - Extend sessions & logging in entry in cookbook
+
+ [François Charlier]
+ - fix for GH#76 and GH#88
+
+ [James Aitken]
+ - fix issues GH #84 #86 and #87 (failing tests on < 5.10 due to regex with
+   named captures)
+
+ [franck cuny]
+ - update cookbook
+
+1.1806_01 2010-08-15
+ [Alexis Sukrieh]
+ - Fix for RT#56239 logger calls are better traced
+ - Fix for GH#72 New keyword 'load_plugin' for loading a plugin in the
+   current namespace. Plugins can be used anywhere thanks to that method.
+ - Fix for issue #77 Passing and caching works well together again.
+ - Applied miyagawa's patch for droping the app.psgi file. Refactoring of
+   Dancer::Handler::PSGI and friends.
+ - Applied LoonyPandora's patch for checking Dancer's VERSION when running
+   script/dancer. Changed it a bit so it can check against CPAN rather than
+   GitHub.
+ - Documentation update: r('') is now DEPRECATED, the method triggers a
+   warning when called and will be removed in the next stable release
+   (1.2).
+ - Transparent wrapping of Plack middlewares in Dancer's configuration.
+   It's possible to enable/disable middlewares right from Dancer's config
+   files. Thanks to Tatsuiko Miyagawa and Franck Cuny for their help.
+
+ [Marc Chantreux]
+ - Support for regexp objects in route definition
+ - Support for named captures (keyword 'captures' added to Dancer's
+   syntax).
+
+ [jbarratt]
+ - Dancer::Serializer::JSON supports 'allow_blessed' and 'convert_blessed'
+   options.
+
+ [sebastian de castelberg]
+ - Support for path_info() in Dancer::Request so it's possible to mount an
+   application under a directory.
+
+1.1805 2010-06-22
+ [Alexis Sukrieh]
+ - Fix for RT#56239 logger calls are better traced
+ - Fix for GH#72 New keyword 'load_plugin' for loading a plugin in the
+   current namespace. Plugins can be used anywhere thanks to that method.
+
+ [Minty]
+ - Update Introduction pod with (required) -a dancer opt (Murray, 5 hours
+   ago)
+ - Bump HTTP::Body dependency to 1.07 (Murray, 6 hours ago)
+
+1.1804 2010-06-18
+ [Alexis Sukrieh]
+ - FIX for bug RT#58355 Rewrite of Dancer::Template::Simple's parser, now
+   more robust, based on Perl's regexp engine.
+ - FIX a warning when remote_address is undefined
+
+ [Daniel Pittman]
+ - FIX for issue #80 Make sure the tempfiles created during uploads are
+   removed when the request object dies.
+
+ [David Precious]
+ - Fix test failures with old Plack versions (Issue 73).
+ - Don't surround content with <p> tags in layout.
+ - Add $ENV{REMOTE_ADDR} in core log messages
+
+ [SawyerX]
+ - Fix issue #75, reported by nanis. perl -MDancer -e "print
+   $Dancer::VERSION" now works as expected
+
+ [sebastian de castelberg]
+ - Fix priority in D::S::Mutable.
+
+1.1803 2010-05-23
+ [Alexis Sukrieh]
+ - Fix for issue #69 The issue was resolved in 1.1801, this time, the fix
+   is working as expected.
+
+ [Sawyer X]
+ - Fix for RT #57715, require Test::More 0.88 and up.
+
+1.1802 2010-05-19
+ [Sawyer X]
+ - Fix RT #57158 (route_cache does not work with multiple parameters) Cache
+   revealed a small design overlook of not cloning a route before returning
+   it to the user, making multiple parameters disabled. (Thanks to Stéphane
+   Alnet for reporting and adding a test for it!)
+
+1.1801 2010-05-19
+ [Alexis Sukrieh]
+ - FIX issue #69 Error are trapped even if occuring from Dancer's source
+   code. auto_reload is set to false in scaffolded applications to prevent
+   errors if Module::Refresh is not installed.
+
+1.1800 2010-05-16
+ [Alexis Sukrieh]
+ - merge of the devel branch into master, first stable release of 1.178_01
+   and 1.178_02
+
+1.178_02 2010-05-11
+ [Alexis Sukrieh]
+ - Errors are caught in before filters
+ - halt can be given a Dancer::Response object rahter than plain text
+   content
+
+1.178_01 2010-05-05
+ [Alex Kapranof]
+ - Support for on-the-fly charset encoding when the setting is set and a
+   content is sent by Dancer and needs to be encoded. The response
+   Content-Type is updated accordingly as well.
+
+ [Alexis Sukrieh]
+ - New logger for sending log message to STDERR: Dancer::Logger::Console
+   Thanks to Gabor Szabo for the idea.
+ - Logger engines don't have anymore to implement _format(), they can use
+   $self->format_message instead.
+ - New log level: "core" for letting Dancer's core express itself on
+   crucial events. That way, when the app config sets log to "core", any
+   core messages is sent to the logger, and the end-user can see which
+   route is chosen for each request received. Thanks to Gabor Szabo for the
+   idea.
+ - New class Dancer::Timer added so any logger engine can now show a timer
+   string.
+ - Scaffolded applications are now built like a CPAN distribution, with a
+   Makefile.PL and test scripts (thanks to Gabor Szabo for the idea).
+ - Added Dancer::Test to provide helpers for writing test script for Dancer
+   applications
+ - FIX bug when returning a void context after redirecting a route. Thanks
+   to Juan J. Martínez	   for the report.
+ - Add support for request headers in Dancer::Request
+ - Add support for halt() in Dancer's syntax.
+
+ [Sawyer X]
+ - Adding "import_warnings" settings. On by default, but allows to disable
+   auto-import of "warnings" pragma. Reported by Adam Kennedy.
+
+1.176 2010-04-22
+ - Bringing 1.175_01 into production.
+
+1.175_01 2010-04-19
+ [Sawyer X]
+ - Documentation for Dancer::FileUtils.
+ - Documentation for Dancer::Cookie.
+ - Fixing PNG bug on IE (reported by Adam Kennedy - thank you).
+
+1.175 2010-04-11
+ [Alexis Sukrieh]
+ - fixed t/15_plugins/02_config.t when YAML is not installed
+
+ [Sawyer X]
+ - RT #56395 reported by Jonathan Yu on behalf of Debian Perl team.
+ - Documentation for Dancer::Error.
+
+1.174 2010-04-08
+ [David Precious]
+ - Support semi-colons as name=value pair separators when parsing
+   querystring.  Satisfies feature request/issue 59. Thanks to deepakg for
+   requesting this feature.
+
+ [Gabor Szabo]
+ - Docs fixes, typo in warning.
+ - TestUtils.pm is now in "t/lib".
+
+ [Sawyer X]
+ - RT #56381 reported by Jonathan Yu on behalf of Debian Perl team. (Adding
+   LICENSE file)
+
+1.173_01 2010-04-04
+ [Alexis Sukrieh]
+ - New serializer: Dumper for easily output dumped variable in text/plain.
+ - Before filters can now access route params
+ - Support for '.' as a token separator in params parsing
+ - The standalone server respect the 'access_log' setting, the starting
+   banner is printed on STDERR only if the setting is set to true.
+
+ [Franck Cuny]
+ - Doc fixes. (Thanks to poisonbit)
+ - Plugins configuration
+ - Cleaning up tests
+
+ [Sawyer X]
+ - Fixed Windows PSGI.URL_SCHEME bug, causing tests to fail (Thanks to
+   ADAMK for reporting)
+
+1.173 2010-04-04
+ [Alexis Sukrieh]
+ - Documenting set_cookie in Dancer.pm.
+
+ [David Precious]
+ - Fix issue 52 - creating invalid cookie expiration dates. Thanks to
+   Juanjo (reidrac) for reporting!
+
+ [Franck Cuny]
+ - Cleaning up serializer test.
+
+ [François Charlier]
+ - Documenting layout disabling.
+
+ [Sawyer X]
+ - Fix a few failing tests because of compilation errors.
+ - Add init{} subs for all serializers.
+ - Dancer::Engine documentation
+
+1.172 2010-03-28
+ [Alexis Sukrieh]
+ - Plugin support.
+
+ [Franck Cuny]
+ - Prevent usage of reserved Dancer keywords in plugins.
+ - Tests cleanups.
+
+ [Robert Olson]
+ - Fixing docs to clarify layouts can use variables too.
+
+1.171 2010-03-24
+ [Alexis Sukrieh]
+ - Removed bogus TestApp/ directory
+
+1.170 2010-03-24
+ [Alexis Sukrieh]
+ - Query string params are not dropped anymore when their value is 0.
+   thanks to "Squeeks" for the report. (closes: bug #49)
+ - Support for file uploads The Dancer::Request class provides a common
+   interface to access file uploads. Syntactic sugar has been added to
+   Dancer's as well (keyword 'upload'). (closes whish #36)
+
+ [David Precious]
+ - Fixed bug with status keyword not converting aliases (e.g. 'not_found')
+   to real usable status lines with valid HTTP codes. Thanks to P Kishor
+   for reporting this on the dancer-users mailing list!
+ - Accept end_tag as a synonym for stop_tag when configuring
+   TemplateToolkit. Thanks to James Ronan for bringing this up.
+
+ [Franck Cuny]
+ - Support for automatic serialization/deserialization Dancer is now able
+   to serialize route handler's response in various format (JSON, YAML,
+   XML); and can also deserialize request body when appropriate. (closes:
+   wish #29)
+
+ [Sawyer X]
+ - Route::Cache store_route = store_path, beefed up docs
+ - Changed names of limits in settings
+ - Added documentation for it in Dancer.pm
+ - More documentation about Module::Refresh dependency (closes bug #48)
+ - uri_for now accepts a boolean for not escaping URIs, and redirect calls
+   uri_for with that boolean. (closes: bug #47)
+
+1.160 2010-03-07
+ [Alexis Sukrieh]
+ - Dancer helper propagates its perl executable into the generated
+   $appname.pl script (FIX for RT #54759).
+ - FIX for issue #34 No more warnings undeer Win32 for tests script that
+   needs a tempdir
+ - FIX (unknown bug) The standalone server now parses commandline options
+   (was broken since 1.140).
+ - FIX for issue #37 A new setting "confdir" is provided for making Dancer
+   read the application configuration files from an alternate location.
+ - Core settings can be initialized via environment variables, prefixed
+   with "DANCER_" (e.g.  "DANCER_DAEMON" for the setting "daemon").
+ - Config and command-line arguments are parsed and loaded at import time,
+   rather than when the handler is initialized.
+ - Routes are compiled at startup instead of being compiled whenever a
+   request is handled. This can increase performances up to 50%.
+ - FIX Params are not polluted anymore by the 'splat' keyword when no
+   capture is needed by the pattern.
+ - New feature 'auto_page' (closes: #41) Lets the user have automatic route
+   resolution for requests that match an existing template in the views
+   dir. Thanks to David Precious for the idea and his help.
+
+ [Daniel Tasov]
+ - Plack environment is propagated to Dancer if none specified.
+
+ [David Precious]
+ - Added session backend Dancer::Session::Simple
+ - Dump session contents on development error page, if session is in use
+ - Censor sensitive-looking information on development error page settings
+   / session dumps, to help avoid passwords / card details etc being
+   leaked.
+ - Add deployment guide
+
+ [Sawyer X]
+ - Route Caching with size and path number limits: Dancer::Route::Cache.
+ - FIX for issue #39.
+ - Dancer::ModuleLoader documentation
+ - Cleaned Dancer::Template::Abstract docs
+ - Cleaner die in Dancer::Engine if can't find engine
+ - Added default route example in Dancer::Cookbook
+
+1.150 2010-02-17
+ [Alexis Sukrieh]
+ - Refactored all core engines with Dancer::Engine
+ - Support for engine configuration via config files
+ - Each core template engine now uses start_tag/stop_tag from the
+   configuration instead of harcoding '<%' and '%>'.
+ - FIX for issue #34 Cookies can now be used when the application is ran
+   under a Plack server.
+
+ [Anirvan Chatterjee]
+ - Various documentation typo fixes
+
+ [Danijel Tasov]
+ - FIX for issue #24 Dancer now depends on MIME::Types rather than using
+   File::MimeInfo::Simple which uses a fork().
+
+ [David Precious]
+ - Lots of documentation cleaning and fixes.
+ - Make the session available to the views, if possible.
+ - Added Dancer::Cookbook to provide lots of concrete examples for
+   newcomers.
+ - Helper script `dancer' now provides a default favicon.ico in the
+   application public directory.
+ - FIX for issue #30 Added 'config' method to provide easy access to app
+   config
+
+ [Franck Cuny]
+ - Test scripts cleanup: + Cleanup is performed in test scripts when
+   necessary (all temp files are removed at the end of the script). + FIX
+   for issue #23 Test scripts that try to write logfiles set the appdir.
+
+ [Paul Driver]
+ - Support for virtual location. It's now possible to mount a Dancer app
+   under a user-defined prefix.
+
+1.140 2010-02-09
+ - Dancer now depends on HTTP::Server::Simple::PSGI in order to rely on a
+   PSGI environement even when running the app with the standalone server
+   (Thanks to Tatsuiko Miyagawa).
+ - Dancer::Request object enhancements: + Dancer::Request now provide an
+   accesor to the raw body of the request. + FIX for issue #13 The params
+   helper now provides accessors to route params, query string params and
+   body params so the user can chose from which source they want to access
+   params instead of dealing with a mixed structure. + Added accessors to
+   referer and remote_address
+ - The Standalone server now uses the setting 'server' to bind itself to
+   the IP address given by the setting. Default value is 0.0.0.0
+
+1.130 2010-01-29
+ - Fix a memory leak that could occur between two requests under mod_perl
+   (Thanks to Nicolas Rennert for the report and diagnosis).
+ - remove all optional modules from the core, they are now shipped as
+   separate CPAN distributions: - Dancer::Template::MicroTemplate -
+   Dancer::Session::Cookie - Dancer::Session::Memcached -
+   Dancer::Logger::LogHandler - Dancer::Logger::Syslog
+ - support for the `header' keyword in Dancer's syntax. The user is now
+   able to alter response-headers in route handlers.
+ - support for `prefix' keyword in Dancer's syntax. A prefix can be set by
+   the user before defining routes handlers. All route defined then will be
+   automatically prefixed accordingly.
+
+1.122 2010-01-16
+ - Fix the test suite under Perl 5.8.x
+ - Security Fix: protection from CRLF injection in response headers (thanks
+   to Mark Stosberg for the report).
+ - Support for multi-valued params in GET/POST data (thanks to Mark
+   Stosberg for the report).
+ - Backward compatibility with old app.psgi files, don't die when a request
+   is initialized with a CGI::PSGI object.
+
+1.121 2010-01-15
+ - Fix for POST data parsing (was broken in 1.120) now Dancer depends on
+   HTTP::Body for that.
+
+1.120 2010-01-15
+ - ROADMAP updated
+ - Dancer is now compliant with Plack::Server::Apache2
+ - Remove the CGI.pm dependency, huge refactoring
+ - POD typo fixes (Naveed)
+ - Support for syntax-only importation (Sawyer X)
+ - Remove the example/ directory, useless and deprecated
+ - New logger engine: Log::Handler (franck cuny)
+ - New template engine Text::Microtemplate (franck cuny)
+ - Remove compilation-time warnings catching (issue #14)
+
+1.110 2010-01-11
+ - Fix test script `t/11_logger/04_syslog.t'
+ - Fix test script `t/10_template/05_template_toolkit.t'
+
+1.100 2009-01-01
+ - Support for multiple method routes at once with 'any'
+ - Templates engines + Bug fixes in Dancer::Template::Simple (Jury Gorky) +
+   Refactoring of the factory + option for disabling the layout in the
+   template helper.
+ - New session engine based on encrypted cookies (Alex Kapranof)
+ - More HTTP codes supported for a better REST compat (Nate Jones)
+ - Documentation updates
+ - script/dancer now requires an appname
+ - New Makefile.PL with better metadata (CPAN Service)
+
+1.000 2009-01-01
+ - Support for Syslog logger (Dancer::Logger::Syslog)
+ - Basic template engine so Template is no more a hard deps.
+ - Memcache Session support (Dancer::Session::Memcache)
+ - YAML file-based session support (Dancer::Session::YAML)
+ - Lots of tests (more than 80% of the code is covered)
+
+0.9906 2009-01-01
+ - move from File::MimeInfo to File::MimeInfo::Simple for smooth run on Mac
+   OSX and Win32 systems.
+
+0.9005 2009-01-01
+ - Source code extract on error catching
+ - Support for configurable error handling
+ - New design for the starting app built with script/dancer
+
+0.9004 2009-01-01
+ - Support for PSGI/Plack environment
+ - script/dancer helper script for bootstraping a new app
+
+0.9003 2009-01-01
+ - Detect differently compilation-time warnings and runtime warnings closes
+   bug #48440 (Thanks to Enric Joffrion for the report, and to Vincent Pit
+   for the diagnosis)
+
@@ -0,0 +1,44 @@
+
+This is the Perl distribution Dancer.
+
+Installing Dancer is straightforward.
+
+## Installation with cpanm
+
+If you have cpanm, you only need one line:
+
+    % cpanm Dancer
+
+If you are installing into a system-wide directory, you may need to pass the
+"-S" flag to cpanm, which uses sudo to install the module:
+
+    % cpanm -S Dancer
+
+## Installing with the CPAN shell
+
+Alternatively, if your CPAN shell is set up, you should just be able to do:
+
+    % cpan Dancer
+
+## Manual installation
+
+As a last resort, you can manually install it. Download the tarball, untar it,
+then build it:
+
+    % perl Makefile.PL
+    % make && make test
+
+Then install it:
+
+    % make install
+
+If you are installing into a system-wide directory, you may need to run:
+
+    % sudo make install
+
+## Documentation
+
+Dancer documentation is available as POD.
+You can run perldoc from a shell to read the documentation:
+
+    % perldoc Dancer
@@ -1,4 +1,4 @@
-This software is copyright (c) 2009-2010 by Alexis Sukrieh.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -12,21 +12,22 @@ b) the "Artistic License"
 
 --- The GNU General Public License, Version 1, February 1989 ---
 
-This software is Copyright (c) 2009-2010 by Alexis Sukrieh.
+This software is Copyright (c) 2010 by Alexis Sukrieh.
 
 This is free software, licensed under:
 
   The GNU General Public License, Version 1, February 1989
 
-		    GNU GENERAL PUBLIC LICENSE
-		     Version 1, February 1989
+                    GNU GENERAL PUBLIC LICENSE
+                     Version 1, February 1989
 
  Copyright (C) 1989 Free Software Foundation, Inc.
-                59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ 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
+                            Preamble
 
   The license agreements of most software companies try to keep users
 at the mercy of those companies.  By contrast, our General Public
@@ -67,7 +68,7 @@ authors' reputations.
   The precise terms and conditions for copying, distribution and
 modification follow.
 
-		    GNU GENERAL PUBLIC LICENSE
+                    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License Agreement applies to any program or other work which
@@ -185,7 +186,7 @@ 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
+                            NO WARRANTY
 
   9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
@@ -207,9 +208,9 @@ 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
+                     END OF TERMS AND CONDITIONS
 
-	Appendix: How to Apply These Terms to Your New Programs
+        Appendix: 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 humanity, the best way to achieve this is to make it
@@ -235,8 +236,9 @@ the exclusion of warranty; and each file should have at least 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
+
 
 Also add information on how to contact you by electronic and paper mail.
 
@@ -270,7 +272,7 @@ That's all there is to it!
 
 --- The Artistic License 1.0 ---
 
-This software is Copyright (c) 2009-2010 by Alexis Sukrieh.
+This software is Copyright (c) 2010 by Alexis Sukrieh.
 
 This is free software, licensed under:
 
@@ -375,4 +377,3 @@ MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 The End
 
-
@@ -1,5 +1,19 @@
 AUTHORS
-CHANGES
+CONTRIBUTORS
+Changes
+INSTALL
+LICENSE
+MANIFEST
+META.json
+META.yml
+Makefile.PL
+README
+README.md
+README.mkdn
+SIGNATURE
+bin/dancer
+cpanfile
+doap.xml
 examples/dancr/dancr.pl
 examples/dancr/public/css/style.css
 examples/dancr/schema.sql
@@ -32,13 +46,13 @@ lib/Dancer/Exception/Base.pm
 lib/Dancer/Factory/Hook.pm
 lib/Dancer/FileUtils.pm
 lib/Dancer/GetOpt.pm
+lib/Dancer/HTTP.pm
 lib/Dancer/Handler.pm
 lib/Dancer/Handler/Debug.pm
 lib/Dancer/Handler/PSGI.pm
 lib/Dancer/Handler/Standalone.pm
 lib/Dancer/Hook.pm
 lib/Dancer/Hook/Properties.pm
-lib/Dancer/HTTP.pm
 lib/Dancer/Introduction.pod
 lib/Dancer/Logger.pm
 lib/Dancer/Logger/Abstract.pm
@@ -67,6 +81,7 @@ lib/Dancer/Serializer.pm
 lib/Dancer/Serializer/Abstract.pm
 lib/Dancer/Serializer/Dumper.pm
 lib/Dancer/Serializer/JSON.pm
+lib/Dancer/Serializer/JSONP.pm
 lib/Dancer/Serializer/Mutable.pm
 lib/Dancer/Serializer/XML.pm
 lib/Dancer/Serializer/YAML.pm
@@ -82,11 +97,8 @@ lib/Dancer/Template/TemplateToolkit.pm
 lib/Dancer/Test.pm
 lib/Dancer/Timer.pm
 lib/Dancer/Tutorial.pod
-LICENSE
-Makefile.PL
-MANIFEST			This list of files
-README
-script/dancer
+t/00-compile.t
+t/000-report-versions-tiny.t
 t/00_base/000_create_fake_env.t
 t/00_base/001_load.t
 t/00_base/002_strict_and_warnings.t
@@ -103,7 +115,6 @@ t/00_base/09_load_app.t
 t/00_base/11_file_utils.t
 t/00_base/12_utf8_charset.t
 t/00_base/13_dancer_singleton.t
-t/00_base/14_changelog.t
 t/00_base/15_dependent_modules.t
 t/00_base/16_version.t
 t/00_base/17_globalwarnings_config_on.t
@@ -154,9 +165,11 @@ t/03_route_handler/06_redirect.t
 t/03_route_handler/07_compilation_warning.t
 t/03_route_handler/08_errors.t
 t/03_route_handler/12_response.t
+t/03_route_handler/12_response_halt.t
 t/03_route_handler/14_options.t
 t/03_route_handler/15_prefix.t
 t/03_route_handler/16_caching.t
+t/03_route_handler/16_embedded_prefixes.t
 t/03_route_handler/18_auto_page.t
 t/03_route_handler/21_ajax.t
 t/03_route_handler/23_filter_error_catching.t
@@ -165,10 +178,12 @@ t/03_route_handler/24_named_captures.t
 t/03_route_handler/28_plack_mount.t
 t/03_route_handler/29_forward.t
 t/03_route_handler/29_redirect_immediately.t
+t/03_route_handler/30_forward_session.t
 t/03_route_handler/31_infinite_loop.t
 t/03_route_handler/33_vars.t
 t/03_route_handler/34_forward_body_post.t
 t/03_route_handler/35_no_further_routes.t
+t/03_route_handler/36_false_routes.t
 t/03_route_handler/99_bugs.t
 t/03_route_handler/public/404.html
 t/03_route_handler/public/utf8file.txt
@@ -210,6 +225,7 @@ t/07_apphandlers/05_middlewares.t
 t/07_apphandlers/05_psgi_api.t
 t/07_apphandlers/06_debug.t
 t/07_apphandlers/07_middleware_map.t
+t/07_apphandlers/08_is_text.t
 t/08_session/000_create_fake_env.t
 t/08_session/01_load.t
 t/08_session/02_dependency_check.t
@@ -267,6 +283,7 @@ t/12_response/07_cookies.t
 t/12_response/08_drop_content.t
 t/12_response/09_headers_to_array.t
 t/12_response/10_error_dumper.t
+t/12_response/10_error_dumper_without_clone.t
 t/12_response/11_CVE-2012-5572.t
 t/13_engines/00_load.t
 t/13_engines/02_template_init.t
@@ -276,7 +293,9 @@ t/14_serializer/03_request_yaml.t
 t/14_serializer/04_request_xml.t
 t/14_serializer/05_request_mutable.t
 t/14_serializer/06_api.t
+t/14_serializer/07_request_jsonp.t
 t/14_serializer/17_clear_serializer.t
+t/14_serializer/18_mutable_template_or_serialize.t
 t/14_serializer/99_bugs.t
 t/15_plugins/000_create_fake_env.t
 t/15_plugins/01_register.t
@@ -285,6 +304,7 @@ t/15_plugins/03_namespace.t
 t/15_plugins/04_apps_and_plugins.t
 t/15_plugins/05_keywords.t
 t/15_plugins/05_plugins_and_OO.t
+t/15_plugins/05b_plugins_and_c3.t
 t/15_plugins/06_hook.t
 t/15_plugins/07_ajax_plack_builder.t
 t/16_timer/00_base.t
@@ -314,6 +334,7 @@ t/22_hooks/views/index.tt
 t/22_hooks/views/layouts/main.tt
 t/23_dancer_tests/01_basic.t
 t/23_dancer_tests/02_tests_functions.t
+t/23_dancer_tests/03_uris.t
 t/24_deployment/01_multi_webapp.t
 t/25_exceptions/01_exceptions.t
 t/25_exceptions/02_exceptions.t
@@ -322,6 +343,8 @@ t/25_exceptions/04_exceptions_warn.t
 t/25_exceptions/views/error.tt
 t/25_exceptions/views/index.tt
 t/25_exceptions/views/layouts/main.tt
+t/TestAppExt.pm
+t/TestPlugin.pm
 t/lib/EasyMocker.pm
 t/lib/Forum.pm
 t/lib/Hookee.pm
@@ -330,11 +353,7 @@ t/lib/TestApp.pm
 t/lib/TestAppUnicode.pm
 t/lib/TestPlugin.pm
 t/lib/TestPlugin2.pm
+t/lib/TestPluginMRO.pm
 t/lib/TestUtils.pm
 t/manifest.t
 t/pod.t
-t/TestAppExt.pm
-t/TestPlugin.pm
-TODO
-META.yml                                 Module YAML meta-data (added by MakeMaker)
-META.json                                Module JSON meta-data (added by MakeMaker)
@@ -1,10 +1,10 @@
 {
-   "abstract" : "A minimal-effort oriented web application framework",
+   "abstract" : "lightweight yet powerful web application framework",
    "author" : [
-      "unknown"
+      "Dancer Core Developers"
    ],
-   "dynamic_config" : 1,
-   "generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.120921",
+   "dynamic_config" : 0,
+   "generated_by" : "Dist::Zilla version 5.020, CPAN::Meta::Converter version 2.140640",
    "license" : [
       "perl_5"
    ],
@@ -13,37 +13,358 @@
       "version" : "2"
    },
    "name" : "Dancer",
-   "no_index" : {
-      "directory" : [
-         "t",
-         "inc"
-      ]
-   },
    "prereqs" : {
-      "build" : {
+      "configure" : {
          "requires" : {
-            "Test::More" : "0.94"
+            "ExtUtils::MakeMaker" : "0"
          }
       },
-      "configure" : {
+      "develop" : {
          "requires" : {
-            "ExtUtils::MakeMaker" : "0"
+            "version" : "0.9901"
          }
       },
       "runtime" : {
          "requires" : {
+            "Carp" : "0",
+            "Cwd" : "0",
+            "Data::Dumper" : "0",
             "Encode" : "0",
+            "Exporter" : "0",
+            "Fcntl" : "0",
             "File::Basename" : "0",
+            "File::Copy" : "0",
+            "File::Path" : "0",
             "File::Spec" : "0",
-            "HTTP::Body" : "1.07",
-            "HTTP::Server::Simple::PSGI" : "0.11",
-            "LWP" : "0",
+            "File::Spec::Functions" : "0",
+            "File::Temp" : "0",
+            "File::stat" : "0",
+            "FindBin" : "0",
+            "Getopt::Long" : "0",
+            "HTTP::Body" : "0",
+            "HTTP::Date" : "0",
+            "HTTP::Headers" : "0",
+            "HTTP::Server::Simple::PSGI" : "0",
+            "Hash::Merge::Simple" : "0",
+            "IO::File" : "0",
+            "LWP::UserAgent" : "0",
             "MIME::Types" : "0",
             "Module::Runtime" : "0",
+            "POSIX" : "0",
+            "Pod::Usage" : "0",
+            "Scalar::Util" : "0",
+            "Test::Builder" : "0",
+            "Test::More" : "0.88",
             "Time::HiRes" : "0",
-            "Try::Tiny" : "0.09",
-            "URI" : "1.59"
+            "Try::Tiny" : "0",
+            "URI" : "0",
+            "URI::Escape" : "0",
+            "base" : "0",
+            "bytes" : "0",
+            "constant" : "0",
+            "lib" : "0",
+            "overload" : "0",
+            "parent" : "0",
+            "strict" : "0",
+            "vars" : "0",
+            "warnings" : "0"
          }
+      },
+      "test" : {
+         "requires" : {
+            "Devel::Hide" : "0",
+            "File::Spec" : "0",
+            "HTTP::Cookies" : "0",
+            "HTTP::Request" : "0",
+            "IO::Handle" : "0",
+            "IPC::Open3" : "0",
+            "Plack::Builder" : "0",
+            "Test::More" : "0.88",
+            "perl" : "5.006",
+            "utf8" : "0"
+         }
+      }
+   },
+   "provides" : {
+      "Dancer" : {
+         "file" : "lib/Dancer.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::App" : {
+         "file" : "lib/Dancer/App.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Config" : {
+         "file" : "lib/Dancer/Config.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Config::Object" : {
+         "file" : "lib/Dancer/Config/Object.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Continuation" : {
+         "file" : "lib/Dancer/Continuation.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Continuation::Halted" : {
+         "file" : "lib/Dancer/Continuation/Halted.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Continuation::Route" : {
+         "file" : "lib/Dancer/Continuation/Route.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Continuation::Route::ErrorSent" : {
+         "file" : "lib/Dancer/Continuation/Route/ErrorSent.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Continuation::Route::FileSent" : {
+         "file" : "lib/Dancer/Continuation/Route/FileSent.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Continuation::Route::Forwarded" : {
+         "file" : "lib/Dancer/Continuation/Route/Forwarded.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Continuation::Route::Passed" : {
+         "file" : "lib/Dancer/Continuation/Route/Passed.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Continuation::Route::Templated" : {
+         "file" : "lib/Dancer/Continuation/Route/Templated.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Cookie" : {
+         "file" : "lib/Dancer/Cookie.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Cookies" : {
+         "file" : "lib/Dancer/Cookies.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Deprecation" : {
+         "file" : "lib/Dancer/Deprecation.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Engine" : {
+         "file" : "lib/Dancer/Engine.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Error" : {
+         "file" : "lib/Dancer/Error.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Exception" : {
+         "file" : "lib/Dancer/Exception.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Exception::Base" : {
+         "file" : "lib/Dancer/Exception/Base.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Factory::Hook" : {
+         "file" : "lib/Dancer/Factory/Hook.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::FileUtils" : {
+         "file" : "lib/Dancer/FileUtils.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::GetOpt" : {
+         "file" : "lib/Dancer/GetOpt.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::HTTP" : {
+         "file" : "lib/Dancer/HTTP.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Handler" : {
+         "file" : "lib/Dancer/Handler.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Handler::Debug" : {
+         "file" : "lib/Dancer/Handler/Debug.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Handler::PSGI" : {
+         "file" : "lib/Dancer/Handler/PSGI.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Handler::Standalone" : {
+         "file" : "lib/Dancer/Handler/Standalone.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Hook" : {
+         "file" : "lib/Dancer/Hook.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Hook::Properties" : {
+         "file" : "lib/Dancer/Hook/Properties.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger" : {
+         "file" : "lib/Dancer/Logger.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger::Abstract" : {
+         "file" : "lib/Dancer/Logger/Abstract.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger::Capture" : {
+         "file" : "lib/Dancer/Logger/Capture.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger::Capture::Trap" : {
+         "file" : "lib/Dancer/Logger/Capture/Trap.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger::Console" : {
+         "file" : "lib/Dancer/Logger/Console.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger::Diag" : {
+         "file" : "lib/Dancer/Logger/Diag.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger::File" : {
+         "file" : "lib/Dancer/Logger/File.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger::Note" : {
+         "file" : "lib/Dancer/Logger/Note.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Logger::Null" : {
+         "file" : "lib/Dancer/Logger/Null.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::MIME" : {
+         "file" : "lib/Dancer/MIME.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::ModuleLoader" : {
+         "file" : "lib/Dancer/ModuleLoader.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Object" : {
+         "file" : "lib/Dancer/Object.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Object::Singleton" : {
+         "file" : "lib/Dancer/Object/Singleton.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Plugin" : {
+         "file" : "lib/Dancer/Plugin.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Plugin::Ajax" : {
+         "file" : "lib/Dancer/Plugin/Ajax.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Renderer" : {
+         "file" : "lib/Dancer/Renderer.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Request" : {
+         "file" : "lib/Dancer/Request.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Request::Upload" : {
+         "file" : "lib/Dancer/Request/Upload.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Response" : {
+         "file" : "lib/Dancer/Response.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Route" : {
+         "file" : "lib/Dancer/Route.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Route::Cache" : {
+         "file" : "lib/Dancer/Route/Cache.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Route::Registry" : {
+         "file" : "lib/Dancer/Route/Registry.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Serializer" : {
+         "file" : "lib/Dancer/Serializer.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Serializer::Abstract" : {
+         "file" : "lib/Dancer/Serializer/Abstract.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Serializer::Dumper" : {
+         "file" : "lib/Dancer/Serializer/Dumper.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Serializer::JSON" : {
+         "file" : "lib/Dancer/Serializer/JSON.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Serializer::JSONP" : {
+         "file" : "lib/Dancer/Serializer/JSONP.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Serializer::Mutable" : {
+         "file" : "lib/Dancer/Serializer/Mutable.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Serializer::XML" : {
+         "file" : "lib/Dancer/Serializer/XML.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Serializer::YAML" : {
+         "file" : "lib/Dancer/Serializer/YAML.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Session" : {
+         "file" : "lib/Dancer/Session.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Session::Abstract" : {
+         "file" : "lib/Dancer/Session/Abstract.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Session::Simple" : {
+         "file" : "lib/Dancer/Session/Simple.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Session::YAML" : {
+         "file" : "lib/Dancer/Session/YAML.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::SharedData" : {
+         "file" : "lib/Dancer/SharedData.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Template" : {
+         "file" : "lib/Dancer/Template.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Template::Abstract" : {
+         "file" : "lib/Dancer/Template/Abstract.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Template::Simple" : {
+         "file" : "lib/Dancer/Template/Simple.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Template::TemplateToolkit" : {
+         "file" : "lib/Dancer/Template/TemplateToolkit.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Test" : {
+         "file" : "lib/Dancer/Test.pm",
+         "version" : "1.3130"
+      },
+      "Dancer::Timer" : {
+         "file" : "lib/Dancer/Timer.pm",
+         "version" : "1.3130"
       }
    },
    "release_status" : "stable",
@@ -51,10 +372,185 @@
       "bugtracker" : {
          "web" : "https://github.com/PerlDancer/Dancer/issues"
       },
-      "homepage" : "http://perldancer.org/",
+      "homepage" : "http://search.cpan.org/dist/Dancer/",
       "repository" : {
-         "url" : "https://github.com/PerlDancer/Dancer"
+         "type" : "git",
+         "url" : "https://github.com/PerlDancer/Dancer.git",
+         "web" : "https://github.com/PerlDancer/Dancer"
       }
    },
-   "version" : "1.3120"
+   "version" : "1.3130",
+   "x_authority" : "cpan:SUKRIA",
+   "x_contributors" : [
+      "Achim Adam <achim.adam@(none).com>",
+      "Adam J. Foxson <afoxson@pobox.com>",
+      "Adam Kennedy <adamk@cpan.org>",
+      "Akash Ayare <akash@hairynandgate.com>",
+      "Al Newkirk <github@alnewkirk.com>",
+      "Al Newkirk <we@ana.im>",
+      "Alan Haggai Alavi <alanhaggai@alanhaggai.org>",
+      "Alberto Simoes <ambs@cpan.org>",
+      "Alberto Simões <ambs@cpan.org>",
+      "Alessandro Ranellucci <aar@cpan.org>",
+      "Alex C <calyx238@gmail.com>",
+      "Alex Kalderimis <alex.kalderimis@gmail.com>",
+      "Alex Kapranoff <kapranoff@gmail.com>",
+      "Alex Peters <lxp@cpan.org>",
+      "Alexis Sukrieh <sukria@sukria.net>",
+      "Alfie John <alfiej@opera.com>",
+      "Anirvan Chatterjee <anirvan@base.mx.org>",
+      "Anton Gerasimov <me@zyxmasta.com>",
+      "Ask Bjørn Hansen <ask@develooper.com>",
+      "Assaf Gordon <assafgordon@gmail.com>",
+      "Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>",
+      "Brian E. Lozier <brian@massassi.com>",
+      "Brian Hann <emailc0bra@gmail.com>",
+      "Brian Phillips <brian@thephillips.info>",
+      "CPAN Service <cpanservice@chorny.net>",
+      "Chris Andrews <chrisandrews@venda.com>",
+      "Chris Seymour <chris.j.seymour@hotmail.com>",
+      "Christian Walde <walde.christian@googlemail.com>",
+      "Colin Keith <colinmkeith@gmail.com>",
+      "Colin Kuskie <colink@perldreamer.com>",
+      "Craig Treptow <craig.treptow@gmail.com>",
+      "Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>",
+      "Damien Krotkine <dams@cpan.org>",
+      "Danijel Tasov <dt@korn.shell.la>",
+      "Dave Doyle <dave.s.doyle@gmail.com>",
+      "David Cantrell <david@cantrell.org.uk>",
+      "David Golden <dagolden@cpan.org>",
+      "David Moreno <david@axiombox.com>",
+      "David Precious <davidp@preshweb.co.uk>",
+      "David Steinbrunner <dsteinbrunner@pobox.com>",
+      "David Zurborg <zurborg@cpan.org>",
+      "Dennis Lichtenthaeler <dennis.lichtenthaeler@stiftung-tannenhof.de>",
+      "Duncan Hutty <dhutty@allgoodbits.org>",
+      "Emmanuel Rodriguez <emmanuel.rodriguez@gmail.com>",
+      "Fabrice Gabolde <fabrice.gabolde@gmail.com>",
+      "Fabrice Gabolde <fabrice.gabolde@uperto.com>",
+      "Fayland Lam <fayland@gmail.com>",
+      "Felix Dorner <felix_do@web.de>",
+      "Flavio Poletti <flavio@polettix.it>",
+      "Florian Larysch <florolf@devbraindump.de>",
+      "Florian Sojer <sojer@b1-systems.de>",
+      "Franck Cuny <franck.cuny@gmail.com>",
+      "François Charlier <fcharlier@ploup.net>",
+      "François Charlier <naz@pwah.(none)>",
+      "Gabor Szabo <gabor@szabgab.com>",
+      "Gary Mullen <garymullen@gmail.com>",
+      "Grzegorz Rożniecki <xaerxess@gmail.com>",
+      "Hagen Fuchs <github@hfuchs.net>",
+      "Hans Dieter Pearcey <hdp@weftsoar.net>",
+      "Ilmari Vacklin <ilmari@dicole.com>",
+      "Ilya Chesnokov <chesnokov.ilya@gmail.com>",
+      "Ivan Bessarabov <ivan@bessarabov.ru>",
+      "Ivan Paponov <ivan.paponov@gmail.com>",
+      "JT Smith <jt@plainblack.com>",
+      "Jacob Rideout <jacob.rideout@returnpath.net>",
+      "Jakob Voss <jakob@nichtich.de>",
+      "James Aitken <loonypandora@gmail.com>",
+      "Jesse van Herk <jesse@imaginaryrobots.net>",
+      "Joel Roth <joelz@pobox.com>",
+      "John Barrett <johna.barrett@gmail.com>",
+      "John Wittkoski <jwittkoski@gmail.com>",
+      "Jonathan \"Duke\" Leto <jonathan@leto.net>",
+      "Jonathan Otsuka <djgoku@gmail.com>",
+      "Jonathan Scott Duff <duff@pobox.com>",
+      "Joshua Barratt <jbarratt@serialized.net>",
+      "Juan J. Martínez <reidrac@usebox.net>",
+      "Jury Gorky <schwein@schwein-laptop.(none)>",
+      "Kaitlyn Parkhurst <symkat@symkat.com>",
+      "Kent Fredric <kentnl@cpan.org>",
+      "Kirk Kimmel <kimmel.k.programmer@gmail.com>",
+      "Lars Thegler <lars@thegler.dk>",
+      "Lee Carmichael <lecar_red@yahoo.com>",
+      "Lee Johnson <lee.johnson@netbanx.com>",
+      "LoonyPandora <loonypandora@gmail.com>",
+      "Manuel Weiss <manuel@weiss.io>",
+      "Marc Chantreux <marc.chantreux@biblibre.com>",
+      "Mark A. Stratman <stratman@gmail.com>",
+      "Mark Allen <mrallen1@yahoo.com>",
+      "Mark Stosberg <mark@stosberg.com>",
+      "Martin Schut <github@wommm.nl>",
+      "Matthew Horsfall (alh) <wolfsage@gmail.com>",
+      "Maurice <mauricemengel@gmail.com>",
+      "Max Maischein <corion@corion.net>",
+      "Michael G. Schwern <schwern@pobox.com>",
+      "Michael Genereux <mgenereu@gmail.com>",
+      "Michal Wojciechowski <michal@sidnet.info>",
+      "Mikolaj Kucharski <mikolaj@kucharski.name>",
+      "Murray <murray@minty.org>",
+      "Natal Ngétal <hobbestigrou@erakis.im>",
+      "Nate Jones <nate@endot.org>",
+      "Naveed <naveed@ironcamel.(none)>",
+      "Naveed Massjouni <naveedm9@gmail.com>",
+      "Naveen <nmani@nashresearch.com>",
+      "Neil Hooey <neil@shutterstock.com>",
+      "Nicolas Oudard <noudard@weborama.com>",
+      "Oliver Gorwits <oliver@cpan.org>",
+      "Olivier Mengué <dolmen@cpan.org>",
+      "Olof Johansson <olof@ethup.se>",
+      "Ovid <curtis@weborama.com>",
+      "Paul Driver <frodwith@gmail.com>",
+      "Paul Fenwick <pjf@perltraining.com.au>",
+      "Paul Johnson <paul@pjcj.net>",
+      "Paul Tomlin <ptomli@gmail.com>",
+      "Pedro Melo <melo@simplicidade.org>",
+      "Perlover <perlover@perlover.com>",
+      "Philippe Bruhat (BooK) <book@cpan.org>",
+      "Richard Simões <rsimoes@cpan.org>",
+      "Rick Myers <rick@jrmyers.net>",
+      "Rik Brown <rik@rikbrown.co.uk>",
+      "Roberto Patriarca <rp@staged.org>",
+      "Roman Galeev <ip@ncom-ufa.ru>",
+      "Roman Nuritdinov <ky6uk.kun@gmail.com>",
+      "Rowan Thorpe <rowanthorpe@gmail.com>",
+      "Sam Kington <github@illuminated.co.uk>",
+      "Sapphire Paw <devel@sapphirepaw.org>",
+      "Sawyer X <xsawyerx@cpan.org>",
+      "Scott Penrose <scott.penrose@(none)>",
+      "Sebastian de Castelberg <sebu@kpricorn.org>",
+      "Skeeve <github.mails.skeeve@xoxy.net>",
+      "Squeeks <squeek@cpan.org>",
+      "Stefan Hornburg (Racke) <racke@linuxia.de>",
+      "Tatsuhiko Miyagawa <miyagawa@bulknews.net>",
+      "Tim King <timk@JTimothyKing.com>",
+      "Tom Heady <tom@punch.net>",
+      "Tom Hukins <tom@eborcom.com>",
+      "Tom Wyant <wyant@cpan.org>",
+      "Vyacheslav Matyukhin <mmcleric@yandex-team.ru>",
+      "William Wolf <throughnothing@gmail.com>",
+      "Xaerxess <xaerxess@gmail.com>",
+      "YOUR_NAME <YOUR_EMAIL>",
+      "Yanick Champoux <yanick@cpan.org>",
+      "Zefram <zefram@fysh.org>",
+      "a-adam <ac@univie.ac.at>",
+      "andy <andy@broadbean.com>",
+      "asergei <asergei@gmail.com>",
+      "boris shomodjvarac <shomodj@oginwm09.(none)>",
+      "brian <brian@massassi.com>",
+      "burnersk <burnersk@(none.com)>",
+      "chromatic <chromatic@wgz.org>",
+      "franck cuny <franck.cuny@gmail.com>",
+      "geistteufel <geistteufel@yahoo.fr>",
+      "isync <o.zucker@web.de>",
+      "jamhed <ip@ncom-ufa.ru>",
+      "jamhed <jamhed@lenobook.jh>",
+      "jamhed.nb <ip@ncom-ufa.ru>",
+      "jonasreinsch <jonas.reinsch@gmail.com>",
+      "jonathan schatz <jon@divisionbyzero.com>",
+      "miyagawa <miyagawa@gmail.com>",
+      "mlbarrow <mlbarrow@(none)>",
+      "mokko <mauricemengel@gmail.com>",
+      "niko <nikomomo@gmail.com>",
+      "pdl <perrettdl@googlemail.com>",
+      "ppisar <ppisar@(none)>",
+      "rowanthorpe <rowanthorpe@gmail.com>",
+      "scoopio <valiouk@yahoo.co.uk>",
+      "sdeseille <sebastien.deseille@gmail.com>",
+      "sebastian de castelberg <sebu@kpricorn.org>",
+      "smashz <mestre.smash@gmail.com>",
+      "tednolan <tednolan@(none).com>"
+   ]
 }
+
@@ -1,36 +1,454 @@
 ---
-abstract: 'A minimal-effort oriented web application framework'
+abstract: 'lightweight yet powerful web application framework'
 author:
-  - unknown
+  - 'Dancer Core Developers'
 build_requires:
-  Test::More: 0.94
+  Devel::Hide: '0'
+  File::Spec: '0'
+  HTTP::Cookies: '0'
+  HTTP::Request: '0'
+  IO::Handle: '0'
+  IPC::Open3: '0'
+  Plack::Builder: '0'
+  Test::More: '0.88'
+  perl: '5.006'
+  utf8: '0'
 configure_requires:
-  ExtUtils::MakeMaker: 0
-dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.120921'
+  ExtUtils::MakeMaker: '0'
+dynamic_config: 0
+generated_by: 'Dist::Zilla version 5.020, CPAN::Meta::Converter version 2.140640'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
-  version: 1.4
+  version: '1.4'
 name: Dancer
-no_index:
-  directory:
-    - t
-    - inc
+provides:
+  Dancer:
+    file: lib/Dancer.pm
+    version: '1.3130'
+  Dancer::App:
+    file: lib/Dancer/App.pm
+    version: '1.3130'
+  Dancer::Config:
+    file: lib/Dancer/Config.pm
+    version: '1.3130'
+  Dancer::Config::Object:
+    file: lib/Dancer/Config/Object.pm
+    version: '1.3130'
+  Dancer::Continuation:
+    file: lib/Dancer/Continuation.pm
+    version: '1.3130'
+  Dancer::Continuation::Halted:
+    file: lib/Dancer/Continuation/Halted.pm
+    version: '1.3130'
+  Dancer::Continuation::Route:
+    file: lib/Dancer/Continuation/Route.pm
+    version: '1.3130'
+  Dancer::Continuation::Route::ErrorSent:
+    file: lib/Dancer/Continuation/Route/ErrorSent.pm
+    version: '1.3130'
+  Dancer::Continuation::Route::FileSent:
+    file: lib/Dancer/Continuation/Route/FileSent.pm
+    version: '1.3130'
+  Dancer::Continuation::Route::Forwarded:
+    file: lib/Dancer/Continuation/Route/Forwarded.pm
+    version: '1.3130'
+  Dancer::Continuation::Route::Passed:
+    file: lib/Dancer/Continuation/Route/Passed.pm
+    version: '1.3130'
+  Dancer::Continuation::Route::Templated:
+    file: lib/Dancer/Continuation/Route/Templated.pm
+    version: '1.3130'
+  Dancer::Cookie:
+    file: lib/Dancer/Cookie.pm
+    version: '1.3130'
+  Dancer::Cookies:
+    file: lib/Dancer/Cookies.pm
+    version: '1.3130'
+  Dancer::Deprecation:
+    file: lib/Dancer/Deprecation.pm
+    version: '1.3130'
+  Dancer::Engine:
+    file: lib/Dancer/Engine.pm
+    version: '1.3130'
+  Dancer::Error:
+    file: lib/Dancer/Error.pm
+    version: '1.3130'
+  Dancer::Exception:
+    file: lib/Dancer/Exception.pm
+    version: '1.3130'
+  Dancer::Exception::Base:
+    file: lib/Dancer/Exception/Base.pm
+    version: '1.3130'
+  Dancer::Factory::Hook:
+    file: lib/Dancer/Factory/Hook.pm
+    version: '1.3130'
+  Dancer::FileUtils:
+    file: lib/Dancer/FileUtils.pm
+    version: '1.3130'
+  Dancer::GetOpt:
+    file: lib/Dancer/GetOpt.pm
+    version: '1.3130'
+  Dancer::HTTP:
+    file: lib/Dancer/HTTP.pm
+    version: '1.3130'
+  Dancer::Handler:
+    file: lib/Dancer/Handler.pm
+    version: '1.3130'
+  Dancer::Handler::Debug:
+    file: lib/Dancer/Handler/Debug.pm
+    version: '1.3130'
+  Dancer::Handler::PSGI:
+    file: lib/Dancer/Handler/PSGI.pm
+    version: '1.3130'
+  Dancer::Handler::Standalone:
+    file: lib/Dancer/Handler/Standalone.pm
+    version: '1.3130'
+  Dancer::Hook:
+    file: lib/Dancer/Hook.pm
+    version: '1.3130'
+  Dancer::Hook::Properties:
+    file: lib/Dancer/Hook/Properties.pm
+    version: '1.3130'
+  Dancer::Logger:
+    file: lib/Dancer/Logger.pm
+    version: '1.3130'
+  Dancer::Logger::Abstract:
+    file: lib/Dancer/Logger/Abstract.pm
+    version: '1.3130'
+  Dancer::Logger::Capture:
+    file: lib/Dancer/Logger/Capture.pm
+    version: '1.3130'
+  Dancer::Logger::Capture::Trap:
+    file: lib/Dancer/Logger/Capture/Trap.pm
+    version: '1.3130'
+  Dancer::Logger::Console:
+    file: lib/Dancer/Logger/Console.pm
+    version: '1.3130'
+  Dancer::Logger::Diag:
+    file: lib/Dancer/Logger/Diag.pm
+    version: '1.3130'
+  Dancer::Logger::File:
+    file: lib/Dancer/Logger/File.pm
+    version: '1.3130'
+  Dancer::Logger::Note:
+    file: lib/Dancer/Logger/Note.pm
+    version: '1.3130'
+  Dancer::Logger::Null:
+    file: lib/Dancer/Logger/Null.pm
+    version: '1.3130'
+  Dancer::MIME:
+    file: lib/Dancer/MIME.pm
+    version: '1.3130'
+  Dancer::ModuleLoader:
+    file: lib/Dancer/ModuleLoader.pm
+    version: '1.3130'
+  Dancer::Object:
+    file: lib/Dancer/Object.pm
+    version: '1.3130'
+  Dancer::Object::Singleton:
+    file: lib/Dancer/Object/Singleton.pm
+    version: '1.3130'
+  Dancer::Plugin:
+    file: lib/Dancer/Plugin.pm
+    version: '1.3130'
+  Dancer::Plugin::Ajax:
+    file: lib/Dancer/Plugin/Ajax.pm
+    version: '1.3130'
+  Dancer::Renderer:
+    file: lib/Dancer/Renderer.pm
+    version: '1.3130'
+  Dancer::Request:
+    file: lib/Dancer/Request.pm
+    version: '1.3130'
+  Dancer::Request::Upload:
+    file: lib/Dancer/Request/Upload.pm
+    version: '1.3130'
+  Dancer::Response:
+    file: lib/Dancer/Response.pm
+    version: '1.3130'
+  Dancer::Route:
+    file: lib/Dancer/Route.pm
+    version: '1.3130'
+  Dancer::Route::Cache:
+    file: lib/Dancer/Route/Cache.pm
+    version: '1.3130'
+  Dancer::Route::Registry:
+    file: lib/Dancer/Route/Registry.pm
+    version: '1.3130'
+  Dancer::Serializer:
+    file: lib/Dancer/Serializer.pm
+    version: '1.3130'
+  Dancer::Serializer::Abstract:
+    file: lib/Dancer/Serializer/Abstract.pm
+    version: '1.3130'
+  Dancer::Serializer::Dumper:
+    file: lib/Dancer/Serializer/Dumper.pm
+    version: '1.3130'
+  Dancer::Serializer::JSON:
+    file: lib/Dancer/Serializer/JSON.pm
+    version: '1.3130'
+  Dancer::Serializer::JSONP:
+    file: lib/Dancer/Serializer/JSONP.pm
+    version: '1.3130'
+  Dancer::Serializer::Mutable:
+    file: lib/Dancer/Serializer/Mutable.pm
+    version: '1.3130'
+  Dancer::Serializer::XML:
+    file: lib/Dancer/Serializer/XML.pm
+    version: '1.3130'
+  Dancer::Serializer::YAML:
+    file: lib/Dancer/Serializer/YAML.pm
+    version: '1.3130'
+  Dancer::Session:
+    file: lib/Dancer/Session.pm
+    version: '1.3130'
+  Dancer::Session::Abstract:
+    file: lib/Dancer/Session/Abstract.pm
+    version: '1.3130'
+  Dancer::Session::Simple:
+    file: lib/Dancer/Session/Simple.pm
+    version: '1.3130'
+  Dancer::Session::YAML:
+    file: lib/Dancer/Session/YAML.pm
+    version: '1.3130'
+  Dancer::SharedData:
+    file: lib/Dancer/SharedData.pm
+    version: '1.3130'
+  Dancer::Template:
+    file: lib/Dancer/Template.pm
+    version: '1.3130'
+  Dancer::Template::Abstract:
+    file: lib/Dancer/Template/Abstract.pm
+    version: '1.3130'
+  Dancer::Template::Simple:
+    file: lib/Dancer/Template/Simple.pm
+    version: '1.3130'
+  Dancer::Template::TemplateToolkit:
+    file: lib/Dancer/Template/TemplateToolkit.pm
+    version: '1.3130'
+  Dancer::Test:
+    file: lib/Dancer/Test.pm
+    version: '1.3130'
+  Dancer::Timer:
+    file: lib/Dancer/Timer.pm
+    version: '1.3130'
 requires:
-  Encode: 0
-  File::Basename: 0
-  File::Spec: 0
-  HTTP::Body: 1.07
-  HTTP::Server::Simple::PSGI: 0.11
-  LWP: 0
-  MIME::Types: 0
-  Module::Runtime: 0
-  Time::HiRes: 0
-  Try::Tiny: 0.09
-  URI: 1.59
+  Carp: '0'
+  Cwd: '0'
+  Data::Dumper: '0'
+  Encode: '0'
+  Exporter: '0'
+  Fcntl: '0'
+  File::Basename: '0'
+  File::Copy: '0'
+  File::Path: '0'
+  File::Spec: '0'
+  File::Spec::Functions: '0'
+  File::Temp: '0'
+  File::stat: '0'
+  FindBin: '0'
+  Getopt::Long: '0'
+  HTTP::Body: '0'
+  HTTP::Date: '0'
+  HTTP::Headers: '0'
+  HTTP::Server::Simple::PSGI: '0'
+  Hash::Merge::Simple: '0'
+  IO::File: '0'
+  LWP::UserAgent: '0'
+  MIME::Types: '0'
+  Module::Runtime: '0'
+  POSIX: '0'
+  Pod::Usage: '0'
+  Scalar::Util: '0'
+  Test::Builder: '0'
+  Test::More: '0.88'
+  Time::HiRes: '0'
+  Try::Tiny: '0'
+  URI: '0'
+  URI::Escape: '0'
+  base: '0'
+  bytes: '0'
+  constant: '0'
+  lib: '0'
+  overload: '0'
+  parent: '0'
+  strict: '0'
+  vars: '0'
+  warnings: '0'
 resources:
   bugtracker: https://github.com/PerlDancer/Dancer/issues
-  homepage: http://perldancer.org/
-  repository: https://github.com/PerlDancer/Dancer
-version: 1.3120
+  homepage: http://search.cpan.org/dist/Dancer/
+  repository: https://github.com/PerlDancer/Dancer.git
+version: '1.3130'
+x_authority: cpan:SUKRIA
+x_contributors:
+  - 'Achim Adam <achim.adam@(none).com>'
+  - 'Adam J. Foxson <afoxson@pobox.com>'
+  - 'Adam Kennedy <adamk@cpan.org>'
+  - 'Akash Ayare <akash@hairynandgate.com>'
+  - 'Al Newkirk <github@alnewkirk.com>'
+  - 'Al Newkirk <we@ana.im>'
+  - 'Alan Haggai Alavi <alanhaggai@alanhaggai.org>'
+  - 'Alberto Simoes <ambs@cpan.org>'
+  - 'Alberto Simões <ambs@cpan.org>'
+  - 'Alessandro Ranellucci <aar@cpan.org>'
+  - 'Alex C <calyx238@gmail.com>'
+  - 'Alex Kalderimis <alex.kalderimis@gmail.com>'
+  - 'Alex Kapranoff <kapranoff@gmail.com>'
+  - 'Alex Peters <lxp@cpan.org>'
+  - 'Alexis Sukrieh <sukria@sukria.net>'
+  - 'Alfie John <alfiej@opera.com>'
+  - 'Anirvan Chatterjee <anirvan@base.mx.org>'
+  - 'Anton Gerasimov <me@zyxmasta.com>'
+  - 'Ask Bjørn Hansen <ask@develooper.com>'
+  - 'Assaf Gordon <assafgordon@gmail.com>'
+  - 'Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>'
+  - 'Brian E. Lozier <brian@massassi.com>'
+  - 'Brian Hann <emailc0bra@gmail.com>'
+  - 'Brian Phillips <brian@thephillips.info>'
+  - 'CPAN Service <cpanservice@chorny.net>'
+  - 'Chris Andrews <chrisandrews@venda.com>'
+  - 'Chris Seymour <chris.j.seymour@hotmail.com>'
+  - 'Christian Walde <walde.christian@googlemail.com>'
+  - 'Colin Keith <colinmkeith@gmail.com>'
+  - 'Colin Kuskie <colink@perldreamer.com>'
+  - 'Craig Treptow <craig.treptow@gmail.com>'
+  - 'Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>'
+  - 'Damien Krotkine <dams@cpan.org>'
+  - 'Danijel Tasov <dt@korn.shell.la>'
+  - 'Dave Doyle <dave.s.doyle@gmail.com>'
+  - 'David Cantrell <david@cantrell.org.uk>'
+  - 'David Golden <dagolden@cpan.org>'
+  - 'David Moreno <david@axiombox.com>'
+  - 'David Precious <davidp@preshweb.co.uk>'
+  - 'David Steinbrunner <dsteinbrunner@pobox.com>'
+  - 'David Zurborg <zurborg@cpan.org>'
+  - 'Dennis Lichtenthaeler <dennis.lichtenthaeler@stiftung-tannenhof.de>'
+  - 'Duncan Hutty <dhutty@allgoodbits.org>'
+  - 'Emmanuel Rodriguez <emmanuel.rodriguez@gmail.com>'
+  - 'Fabrice Gabolde <fabrice.gabolde@gmail.com>'
+  - 'Fabrice Gabolde <fabrice.gabolde@uperto.com>'
+  - 'Fayland Lam <fayland@gmail.com>'
+  - 'Felix Dorner <felix_do@web.de>'
+  - 'Flavio Poletti <flavio@polettix.it>'
+  - 'Florian Larysch <florolf@devbraindump.de>'
+  - 'Florian Sojer <sojer@b1-systems.de>'
+  - 'Franck Cuny <franck.cuny@gmail.com>'
+  - 'François Charlier <fcharlier@ploup.net>'
+  - 'François Charlier <naz@pwah.(none)>'
+  - 'Gabor Szabo <gabor@szabgab.com>'
+  - 'Gary Mullen <garymullen@gmail.com>'
+  - 'Grzegorz Rożniecki <xaerxess@gmail.com>'
+  - 'Hagen Fuchs <github@hfuchs.net>'
+  - 'Hans Dieter Pearcey <hdp@weftsoar.net>'
+  - 'Ilmari Vacklin <ilmari@dicole.com>'
+  - 'Ilya Chesnokov <chesnokov.ilya@gmail.com>'
+  - 'Ivan Bessarabov <ivan@bessarabov.ru>'
+  - 'Ivan Paponov <ivan.paponov@gmail.com>'
+  - 'JT Smith <jt@plainblack.com>'
+  - 'Jacob Rideout <jacob.rideout@returnpath.net>'
+  - 'Jakob Voss <jakob@nichtich.de>'
+  - 'James Aitken <loonypandora@gmail.com>'
+  - 'Jesse van Herk <jesse@imaginaryrobots.net>'
+  - 'Joel Roth <joelz@pobox.com>'
+  - 'John Barrett <johna.barrett@gmail.com>'
+  - 'John Wittkoski <jwittkoski@gmail.com>'
+  - 'Jonathan "Duke" Leto <jonathan@leto.net>'
+  - 'Jonathan Otsuka <djgoku@gmail.com>'
+  - 'Jonathan Scott Duff <duff@pobox.com>'
+  - 'Joshua Barratt <jbarratt@serialized.net>'
+  - 'Juan J. Martínez <reidrac@usebox.net>'
+  - 'Jury Gorky <schwein@schwein-laptop.(none)>'
+  - 'Kaitlyn Parkhurst <symkat@symkat.com>'
+  - 'Kent Fredric <kentnl@cpan.org>'
+  - 'Kirk Kimmel <kimmel.k.programmer@gmail.com>'
+  - 'Lars Thegler <lars@thegler.dk>'
+  - 'Lee Carmichael <lecar_red@yahoo.com>'
+  - 'Lee Johnson <lee.johnson@netbanx.com>'
+  - 'LoonyPandora <loonypandora@gmail.com>'
+  - 'Manuel Weiss <manuel@weiss.io>'
+  - 'Marc Chantreux <marc.chantreux@biblibre.com>'
+  - 'Mark A. Stratman <stratman@gmail.com>'
+  - 'Mark Allen <mrallen1@yahoo.com>'
+  - 'Mark Stosberg <mark@stosberg.com>'
+  - 'Martin Schut <github@wommm.nl>'
+  - 'Matthew Horsfall (alh) <wolfsage@gmail.com>'
+  - 'Maurice <mauricemengel@gmail.com>'
+  - 'Max Maischein <corion@corion.net>'
+  - 'Michael G. Schwern <schwern@pobox.com>'
+  - 'Michael Genereux <mgenereu@gmail.com>'
+  - 'Michal Wojciechowski <michal@sidnet.info>'
+  - 'Mikolaj Kucharski <mikolaj@kucharski.name>'
+  - 'Murray <murray@minty.org>'
+  - 'Natal Ngétal <hobbestigrou@erakis.im>'
+  - 'Nate Jones <nate@endot.org>'
+  - 'Naveed <naveed@ironcamel.(none)>'
+  - 'Naveed Massjouni <naveedm9@gmail.com>'
+  - 'Naveen <nmani@nashresearch.com>'
+  - 'Neil Hooey <neil@shutterstock.com>'
+  - 'Nicolas Oudard <noudard@weborama.com>'
+  - 'Oliver Gorwits <oliver@cpan.org>'
+  - 'Olivier Mengué <dolmen@cpan.org>'
+  - 'Olof Johansson <olof@ethup.se>'
+  - 'Ovid <curtis@weborama.com>'
+  - 'Paul Driver <frodwith@gmail.com>'
+  - 'Paul Fenwick <pjf@perltraining.com.au>'
+  - 'Paul Johnson <paul@pjcj.net>'
+  - 'Paul Tomlin <ptomli@gmail.com>'
+  - 'Pedro Melo <melo@simplicidade.org>'
+  - 'Perlover <perlover@perlover.com>'
+  - 'Philippe Bruhat (BooK) <book@cpan.org>'
+  - 'Richard Simões <rsimoes@cpan.org>'
+  - 'Rick Myers <rick@jrmyers.net>'
+  - 'Rik Brown <rik@rikbrown.co.uk>'
+  - 'Roberto Patriarca <rp@staged.org>'
+  - 'Roman Galeev <ip@ncom-ufa.ru>'
+  - 'Roman Nuritdinov <ky6uk.kun@gmail.com>'
+  - 'Rowan Thorpe <rowanthorpe@gmail.com>'
+  - 'Sam Kington <github@illuminated.co.uk>'
+  - 'Sapphire Paw <devel@sapphirepaw.org>'
+  - 'Sawyer X <xsawyerx@cpan.org>'
+  - 'Scott Penrose <scott.penrose@(none)>'
+  - 'Sebastian de Castelberg <sebu@kpricorn.org>'
+  - 'Skeeve <github.mails.skeeve@xoxy.net>'
+  - 'Squeeks <squeek@cpan.org>'
+  - 'Stefan Hornburg (Racke) <racke@linuxia.de>'
+  - 'Tatsuhiko Miyagawa <miyagawa@bulknews.net>'
+  - 'Tim King <timk@JTimothyKing.com>'
+  - 'Tom Heady <tom@punch.net>'
+  - 'Tom Hukins <tom@eborcom.com>'
+  - 'Tom Wyant <wyant@cpan.org>'
+  - 'Vyacheslav Matyukhin <mmcleric@yandex-team.ru>'
+  - 'William Wolf <throughnothing@gmail.com>'
+  - 'Xaerxess <xaerxess@gmail.com>'
+  - 'YOUR_NAME <YOUR_EMAIL>'
+  - 'Yanick Champoux <yanick@cpan.org>'
+  - 'Zefram <zefram@fysh.org>'
+  - 'a-adam <ac@univie.ac.at>'
+  - 'andy <andy@broadbean.com>'
+  - 'asergei <asergei@gmail.com>'
+  - 'boris shomodjvarac <shomodj@oginwm09.(none)>'
+  - 'brian <brian@massassi.com>'
+  - 'burnersk <burnersk@(none.com)>'
+  - 'chromatic <chromatic@wgz.org>'
+  - 'franck cuny <franck.cuny@gmail.com>'
+  - 'geistteufel <geistteufel@yahoo.fr>'
+  - 'isync <o.zucker@web.de>'
+  - 'jamhed <ip@ncom-ufa.ru>'
+  - 'jamhed <jamhed@lenobook.jh>'
+  - 'jamhed.nb <ip@ncom-ufa.ru>'
+  - 'jonasreinsch <jonas.reinsch@gmail.com>'
+  - 'jonathan schatz <jon@divisionbyzero.com>'
+  - 'miyagawa <miyagawa@gmail.com>'
+  - 'mlbarrow <mlbarrow@(none)>'
+  - 'mokko <mauricemengel@gmail.com>'
+  - 'niko <nikomomo@gmail.com>'
+  - 'pdl <perrettdl@googlemail.com>'
+  - 'ppisar <ppisar@(none)>'
+  - 'rowanthorpe <rowanthorpe@gmail.com>'
+  - 'scoopio <valiouk@yahoo.co.uk>'
+  - 'sdeseille <sebastien.deseille@gmail.com>'
+  - 'sebastian de castelberg <sebu@kpricorn.org>'
+  - 'smashz <mestre.smash@gmail.com>'
+  - 'tednolan <tednolan@(none).com>'
@@ -1,87 +1,151 @@
-use 5.008005;
-use ExtUtils::MakeMaker;
-
-# ctags support
-# run perl Makfefile.PL && make tags
-sub MY::postamble {
-    my $postamble = <<'MAKE_FRAG';
-.PHONY: tags
-
-tags:
-	ctags -f tags --recurse --totals \
-        --exclude=blib \
-        --exclude=.git \
-        --exclude='*.swp' \
-        --languages=Perl --langmap=Perl:+.t 
-
-author_test:
-	RELEASE_TESTING=1 $(MAKE) test
-
-MAKE_FRAG
-}
 
-WriteMakefile1(
-    NAME         => 'Dancer',
-    ABSTRACT     => "A minimal-effort oriented web application framework",
-    LICENSE      => 'perl',
-    VERSION_FROM => 'lib/Dancer.pm',
-    EXE_FILES    => ['script/dancer'],
-
-    META_MERGE => {
-        resources => {
-            repository => 'https://github.com/PerlDancer/Dancer',
-            bugtracker => 'https://github.com/PerlDancer/Dancer/issues',
-            homepage   => 'http://perldancer.org/',
-        },
-    },
-
-    BUILD_REQUIRES => {
-        'Test::More'              => '0.94',
-    },
-
-    PREREQ_PM => {
-
-        # non-core
-        'LWP'                        => '0',
-        'HTTP::Body'                 => '1.07', # needed for cleanup()
-        'HTTP::Server::Simple::PSGI' => '0.11',
-        'MIME::Types'                => '0',
-        'URI'                        => '1.59',
-        'Try::Tiny'                  => '0.09',
-        'Module::Runtime'            => '0',
-
-        # core
-        'File::Basename' => '0',
-        'File::Spec'     => '0',
-        'Encode'         => '0',
-        'Time::HiRes'    => '0', # in core since 5.7
-    },
-
-    test      => {TESTS => join( ' ', (glob( 't/*.t'), glob('t/*/*.t')))},
-    clean     => {FILES => "t/lib/sessions/*.yml logs/*.log t/*/logs/*" }
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.020.
+use strict;
+use warnings;
+
+
+
+use ExtUtils::MakeMaker ;
+
+
+
+my %WriteMakefileArgs = (
+  "ABSTRACT" => "lightweight yet powerful web application framework",
+  "AUTHOR" => "Dancer Core Developers",
+  "CONFIGURE_REQUIRES" => {
+    "ExtUtils::MakeMaker" => 0
+  },
+  "DISTNAME" => "Dancer",
+  "EXE_FILES" => [
+    "bin/dancer"
+  ],
+  "LICENSE" => "perl",
+  "NAME" => "Dancer",
+  "PREREQ_PM" => {
+    "Carp" => 0,
+    "Cwd" => 0,
+    "Data::Dumper" => 0,
+    "Encode" => 0,
+    "Exporter" => 0,
+    "Fcntl" => 0,
+    "File::Basename" => 0,
+    "File::Copy" => 0,
+    "File::Path" => 0,
+    "File::Spec" => 0,
+    "File::Spec::Functions" => 0,
+    "File::Temp" => 0,
+    "File::stat" => 0,
+    "FindBin" => 0,
+    "Getopt::Long" => 0,
+    "HTTP::Body" => 0,
+    "HTTP::Date" => 0,
+    "HTTP::Headers" => 0,
+    "HTTP::Server::Simple::PSGI" => 0,
+    "Hash::Merge::Simple" => 0,
+    "IO::File" => 0,
+    "LWP::UserAgent" => 0,
+    "MIME::Types" => 0,
+    "Module::Runtime" => 0,
+    "POSIX" => 0,
+    "Pod::Usage" => 0,
+    "Scalar::Util" => 0,
+    "Test::Builder" => 0,
+    "Test::More" => "0.88",
+    "Time::HiRes" => 0,
+    "Try::Tiny" => 0,
+    "URI" => 0,
+    "URI::Escape" => 0,
+    "base" => 0,
+    "bytes" => 0,
+    "constant" => 0,
+    "lib" => 0,
+    "overload" => 0,
+    "parent" => 0,
+    "strict" => 0,
+    "vars" => 0,
+    "warnings" => 0
+  },
+  "TEST_REQUIRES" => {
+    "Devel::Hide" => 0,
+    "File::Spec" => 0,
+    "HTTP::Cookies" => 0,
+    "HTTP::Request" => 0,
+    "IO::Handle" => 0,
+    "IPC::Open3" => 0,
+    "Plack::Builder" => 0,
+    "Test::More" => "0.88",
+    "utf8" => 0
+  },
+  "VERSION" => "1.3130",
+  "test" => {
+    "TESTS" => "t/*.t t/00_base/*.t t/01_config/*.t t/02_request/*.t t/03_route_handler/*.t t/04_static_file/*.t t/05_views/*.t t/06_helpers/*.t t/07_apphandlers/*.t t/08_session/*.t t/09_cookies/*.t t/10_template/*.t t/11_logger/*.t t/12_response/*.t t/13_engines/*.t t/14_serializer/*.t t/15_plugins/*.t t/16_timer/*.t t/17_apps/*.t t/19_dancer/*.t t/20_deprecation/*.t t/21_dependents/*.t t/22_hooks/*.t t/23_dancer_tests/*.t t/24_deployment/*.t t/25_exceptions/*.t"
+  }
+);
+
 
+my %FallbackPrereqs = (
+  "Carp" => 0,
+  "Cwd" => 0,
+  "Data::Dumper" => 0,
+  "Devel::Hide" => 0,
+  "Encode" => 0,
+  "Exporter" => 0,
+  "Fcntl" => 0,
+  "File::Basename" => 0,
+  "File::Copy" => 0,
+  "File::Path" => 0,
+  "File::Spec" => 0,
+  "File::Spec::Functions" => 0,
+  "File::Temp" => 0,
+  "File::stat" => 0,
+  "FindBin" => 0,
+  "Getopt::Long" => 0,
+  "HTTP::Body" => 0,
+  "HTTP::Cookies" => 0,
+  "HTTP::Date" => 0,
+  "HTTP::Headers" => 0,
+  "HTTP::Request" => 0,
+  "HTTP::Server::Simple::PSGI" => 0,
+  "Hash::Merge::Simple" => 0,
+  "IO::File" => 0,
+  "IO::Handle" => 0,
+  "IPC::Open3" => 0,
+  "LWP::UserAgent" => 0,
+  "MIME::Types" => 0,
+  "Module::Runtime" => 0,
+  "POSIX" => 0,
+  "Plack::Builder" => 0,
+  "Pod::Usage" => 0,
+  "Scalar::Util" => 0,
+  "Test::Builder" => 0,
+  "Test::More" => "0.88",
+  "Time::HiRes" => 0,
+  "Try::Tiny" => 0,
+  "URI" => 0,
+  "URI::Escape" => 0,
+  "base" => 0,
+  "bytes" => 0,
+  "constant" => 0,
+  "lib" => 0,
+  "overload" => 0,
+  "parent" => 0,
+  "strict" => 0,
+  "utf8" => 0,
+  "vars" => 0,
+  "warnings" => 0
 );
 
-sub WriteMakefile1 {  #Written by Alexandr Ciornii, version 0.21. Added by eumm-upgrade.
-    my %params=@_;
-    my $eumm_version=$ExtUtils::MakeMaker::VERSION;
-    $eumm_version=eval $eumm_version;
-    die "EXTRA_META is deprecated" if exists $params{EXTRA_META};
-    die "License not specified" if not exists $params{LICENSE};
-    if ($params{BUILD_REQUIRES} and $eumm_version < 6.5503) {
-        #EUMM 6.5502 has problems with BUILD_REQUIRES
-        $params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{BUILD_REQUIRES}} };
-        delete $params{BUILD_REQUIRES};
-    }
-    delete $params{CONFIGURE_REQUIRES} if $eumm_version < 6.52;
-    delete $params{MIN_PERL_VERSION} if $eumm_version < 6.48;
-    delete $params{META_MERGE} if $eumm_version < 6.46;
-    delete $params{META_ADD} if $eumm_version < 6.46;
-    delete $params{LICENSE} if $eumm_version < 6.31;
-    delete $params{AUTHOR} if $] < 5.005;
-    delete $params{ABSTRACT_FROM} if $] < 5.005;
-    delete $params{BINARY_LOCATION} if $] < 5.005;
-
-    WriteMakefile(%params);
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+  delete $WriteMakefileArgs{TEST_REQUIRES};
+  delete $WriteMakefileArgs{BUILD_REQUIRES};
+  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
 }
 
+delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+  unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
+
+WriteMakefile(%WriteMakefileArgs);
+
+
+
@@ -1,144 +1,1375 @@
-                                    Dancer
+NAME
+    Dancer - lightweight yet powerful web application framework
 
-                  The easiest way to write a webapp with Perl                                    
+VERSION
+    version 1.3130
 
-=== ABOUT ===
+SYNOPSIS
+        #!/usr/bin/perl
+        use Dancer;
 
-This project is inspired by  Ruby's Sinatra framework: a framework for building
-web applications with minimal effort, allowing a simple webapp to be created with
-very few lines of code, but allowing the flexibility to scale to much more
-complex applications.  Dancer supports plugins to add various extra
-functionality you may want, whilst keeping the core streamlined.
+        get '/hello/:name' => sub {
+            return "Why, hello there " . param('name');
+        };
 
+        dance;
 
-=== NEWS === 
+    The above is a basic but functional web app created with Dancer. If you
+    want to see more examples and get up and running quickly, check out the
+    Dancer::Introduction and the Dancer::Cookbook. For examples on deploying
+    your Dancer applications, see Dancer::Deployment.
 
-Dancer's development moves very quickly, to stay tuned follow PerlDancer on
-Twitter: http://twitter.com/PerlDancer
+DESCRIPTION
+    Dancer is a web application framework designed to be as effortless as
+    possible for the developer, taking care of the boring bits as easily as
+    possible, yet staying out of your way and letting you get on with
+    writing your code.
 
-See also Sukria's blog: http://www.sukria.net/fr/archives/tag/dancer/
+    Dancer aims to provide the simplest way for writing web applications,
+    and offers the flexibility to scale between a very simple lightweight
+    web service consisting of a few lines of code in a single file, all the
+    way up to a more complex fully-fledged web application with session
+    support, templates for views and layouts, etc.
 
-See also the project on Github for the latest changes:
+    If you don't want to write CGI scripts by hand, and find Catalyst too
+    big or cumbersome for your project, Dancer is what you need.
 
-http://github.com/PerlDancer/Dancer
+    Dancer has few pre-requisites, so your Dancer webapps will be easy to
+    deploy.
 
-To keep even more up to date and talk to the developers, join us in #dancer on
-irc.perl.org (if you don't have an IRC client, use http://www.perldancer.org/irc
-for easy access).
+    Dancer apps can be used with a an embedded web server (great for easy
+    testing), and can run under PSGI/Plack for easy deployment in a variety
+    of webserver environments.
 
-=== EXAMPLE ===
+MORE DOCUMENTATION
+    This documentation describes all the exported symbols of Dancer. If you
+    want a quick start guide to discover the framework, you should look at
+    Dancer::Introduction, or Dancer::Tutorial to learn by example.
 
-To create a new Dancer application, use the helper script "dancer" provided
-with this distribution:
+    If you want to have specific examples of code for real-life problems,
+    see the Dancer::Cookbook.
 
-    $ dancer -a MyWeb::App
-    + MyWeb-App/bin
-    + MyWeb-App/bin/app.pl
-    + MyWeb-App/config.yml
-    + MyWeb-App/environments
-    [..]
+    If you want to see configuration examples of different deployment
+    solutions involving Dancer and Plack, see Dancer::Deployment.
 
-You then have a new Dancer application in 'MyWeb::App', which is already a
-functioning "Hello World" application, ready for you to work upon.
+    You can find out more about the many useful plugins available for Dancer
+    in Dancer::Plugins.
 
-Here is an example of a webapp built with Dancer:
+EXPORTS
+    By default, "use Dancer" exports all the functions below plus sets up
+    your app. You can control the exporting through the normal Exporter
+    mechanism. For example:
 
-    # MyWeb-App/bin/app.pl
-    #!/usr/bin/perl
+        # Just export the route controllers
+        use Dancer qw(get post put patch del);
 
-    use Dancer;
+        # Export everything but pass to avoid clashing with Test::More
+        use Test::More;
+        use Dancer qw(!pass);
 
-    get '/' => sub {
-        "Hello There!"
-    };
+    There are also some special tags to control exports and behaviour.
 
-    get '/hello/:name' => sub {
-        "Hey ".params->{name}.", how are you?";
-    };
+  :moose
+    This will export everything except functions which clash with Moose.
+    Currently these are "after" and "before".
 
-    post '/new' => sub {
-        "creating new entry: ".params->{name};
-    };
+  :syntax
+    This tells Dancer to just export symbols and not set up your app. This
+    is most useful for writing Dancer code outside of your main route
+    handler.
 
-    Dancer->dance;
+  :tests
+    This will export everything except functions which clash with commonly
+    used testing modules. Currently these are "pass".
 
-When running this script, a webserver is running and ready to serve:    
+    It can be combined with other export pragmas. For example, while
+    testing...
 
-    $ perl ./bin/app.pl
-    >> Listening on 0.0.0.0:3000
-    == Entering the development dance floor ...
+        use Test::More;
+        use Dancer qw(:syntax :tests);
 
-Then it's possible to access any route defined in the script:
+        # Test::Most also exports "set" and "any"
+        use Test::Most;
+        use Dancer qw(:syntax :tests !set !any);
 
-    $ curl http://localhost:3000/
-    Hello There!
+        # Alternatively, if you want to use Dancer's set and any...
+        use Test::Most qw(!set !any);
+        use Dancer qw(:syntax :tests);
 
-For a more in-depth example, see examples/dancr
+  :script
+    This will export all the keywords, and will also load the configuration.
 
+    This is useful when you want to use your Dancer application from a
+    script.
 
-=== DEPENDENCIES ===
+        use MyApp;
+        use Dancer ':script';
+        MyApp::schema('DBSchema')->deploy();
 
-Dancer depends on the following modules
+    By default, the warnings pragma will also be exported, meaning your
+    app/script will be running under "use warnings". If you do not want
+    this, set the import_warnings setting to a false value.
 
-    - HTTP::Server::Simple::PSGI
-    - HTTP::Body
-    - Exception::Class
-	- MIME::Types
-	- URI
+  !keyword
+    If you want to simply prevent Dancer from exporting specific keywords
+    (perhaps you plan to implement them yourself in a different way, or you
+    don't plan to use them and they clash with another module you're
+    loading), you can simply exclude them:
 
-Optional modules may be needed if you want to use some features (but are not 
-required for a basic usage). 
+        use Dancer qw(!session);
 
-Dependency-checks for additional features are performed at runtime.
+    The above would import all keywords as normal, with the exception of
+    "session".
 
-Most common modules you may want are:
+FUNCTIONS
+  after
+    Deprecated - see the "after" hook.
 
-    - Template (for Template::Toolkit support)
-    - YAML (for configuration files)
-    - Plack (if you want to deploy your application with PSGI)
+  any
+    Defines a route for multiple HTTP methods at once:
 
+        any ['get', 'post'] => '/myaction' => sub {
+            # code
+        };
 
-=== PRODUCTION MATTERS ===
+    Or even, a route handler that would match any HTTP methods:
 
-This is a work in progress.
+        any '/myaction' => sub {
+            # code
+        };
 
-Dancer supports PSGI/Plack, to run a Dancer app with PSGI/Plack just bootstrap
-your application with the helper script `dancer' like the following:
+  before
+    Deprecated - see the "before" hook.
 
-	$ dancer -a MyWeb::App
+  before_template
+    Deprecated - see the "before_template" hook.
 
-You'll find a file in there called `app.psgi', use this file to configure your
-PSGI environment, as explained in the revelant documentation of your PSGI
-server.
+  cookies
+    Accesses cookies values, it returns a HashRef of Dancer::Cookie objects:
 
-For instance, with plackup, just do the following:
+        get '/some_action' => sub {
+            my $cookie = cookies->{name};
+            return $cookie->value;
+        };
 
-	$ plackup -a app.psgi
+    In the case you have stored something else than a Scalar in your cookie:
 
+        get '/some_action' => sub {
+            my $cookie = cookies->{oauth};
+            my %values = $cookie->value;
+            return ($values{token}, $values{token_secret});
+        };
 
-=== WEBSITE ===
+  cookie
+    Accesses a cookie value (or sets it). Note that this method will
+    eventually be preferred over "set_cookie".
 
-For more details about the project, checkout the official website:
-http://perldancer.org/ or checkout the documentation at
-http://search.cpan.org/dist/Dancer/
+        cookie lang => "fr-FR";              # set a cookie and return its value
+        cookie lang => "fr-FR", expires => "2 hours";   # extra cookie info
+        cookie "lang"                        # return a cookie value
 
-See also the Github project page: http://github.com/PerlDancer/Dancer for the latest
-changes.
+    If your cookie value is a key/value URI string, like
 
+        token=ABC&user=foo
 
-=== REPORTING BUGS ===
+    "cookie" will only return the first part ("token=ABC") if called in
+    scalar context. Use list context to fetch them all:
 
-Bug reports are appreciated and will receive prompt attention - the preferred
-method is to raise them using Github's basic issue tracking system:
+        my @values = cookie "name";
 
-http://github.com/PerlDancer/Dancer/issues
+  config
+    Accesses the configuration of the application:
 
+        get '/appname' => sub {
+            return "This is " . config->{appname};
+        };
 
+  content_type
+    Sets the content-type rendered, for the current route handler:
 
-=== CONTACT ===
+        get '/cat/:txtfile' => sub {
+            content_type 'text/plain';
 
-You can reach the development team on IRC: irc://irc.perl.org/#dancer or
-http://www.perldancer.org/irc for a web-based IRC client.
+            # here we can dump the contents of param('txtfile')
+        };
 
+    You can use abbreviations for content types. For instance:
 
+        get '/svg/:id' => sub {
+            content_type 'svg';
+
+            # here we can dump the image with id param('id')
+        };
+
+    Note that if you want to change the default content-type for every
+    route, you have to change the "content_type" setting instead.
+
+  dance
+    Alias for the "start" keyword.
+
+  dancer_version
+    Returns the version of Dancer. If you need the major version, do
+    something like:
+
+      int(dancer_version);
+
+  debug
+    Logs a message of debug level:
+
+        debug "This is a debug message";
+
+    See Dancer::Logger for details on how to configure where log messages
+    go.
+
+  dirname
+    Returns the dirname of the path given:
+
+        my $dir = dirname($some_path);
+
+  engine
+    Given a namespace, returns the current engine object
+
+        my $template_engine = engine 'template';
+        my $html = $template_engine->apply_renderer(...);
+        $template_engine->apply_layout($html);
+
+  error
+    Logs a message of error level:
+
+        error "This is an error message";
+
+    See Dancer::Logger for details on how to configure where log messages
+    go.
+
+  false
+    Constant that returns a false value (0).
+
+  forward
+    Runs an internal redirect of the current request to another request.
+    This helps you avoid having to redirect the user using HTTP and set
+    another request to your application.
+
+    It effectively lets you chain routes together in a clean manner.
+
+        get '/demo/articles/:article_id' => sub {
+
+            # you'll have to implement this next sub yourself :)
+            change_the_main_database_to_demo();
+
+            forward "/articles/" . params->{article_id};
+        };
+
+    In the above example, the users that reach */demo/articles/30* will
+    actually reach */articles/30* but we've changed the database to demo
+    before.
+
+    This is pretty cool because it lets us retain our paths and offer a demo
+    database by merely going to */demo/...*.
+
+    You'll notice that in the example we didn't indicate whether it was GET
+    or POST. That is because "forward" chains the same type of route the
+    user reached. If it was a GET, it will remain a GET (but if you do need
+    to change the method, you can do so; read on below for details.)
+
+    WARNING : using forward will not preserve session data set on the
+    forwarding rule.
+
+    WARNING : Issuing a forward immediately exits the current route, and
+    perform the forward. Thus, any code after a forward is ignored, until
+    the end of the route. e.g.
+
+        get '/foo/:article_id' => sub {
+            if ($condition) {
+                forward "/articles/" . params->{article_id};
+                # The following code is never executed
+                do_stuff();
+            }
+
+            more_stuff();
+        };
+
+    So it's not necessary anymore to use "return" with forward.
+
+    Note that forward doesn't parse GET arguments. So, you can't use
+    something like:
+
+         return forward '/home?authorized=1';
+
+    But "forward" supports an optional HashRef with parameters to be added
+    to the actual parameters:
+
+         return forward '/home', { authorized => 1 };
+
+    Finally, you can add some more options to the forward method, in a third
+    argument, also as a HashRef. That option is currently only used to
+    change the method of your request. Use with caution.
+
+        return forward '/home', { auth => 1 }, { method => 'POST' };
+
+  from_dumper ($structure)
+    Deserializes a Data::Dumper structure.
+
+  from_json ($structure, %options)
+    Deserializes a JSON structure. Can receive optional arguments. Those
+    arguments are valid JSON arguments to change the behaviour of the
+    default "JSON::from_json" function.
+
+  from_yaml ($structure)
+    Deserializes a YAML structure.
+
+  from_xml ($structure, %options)
+    Deserializes a XML structure. Can receive optional arguments. These
+    arguments are valid XML::Simple arguments to change the behaviour of the
+    default "XML::Simple::XMLin" function.
+
+  get
+    Defines a route for HTTP GET requests to the given path:
+
+        get '/' => sub {
+            return "Hello world";
+        }
+
+    Note that a route to match HEAD requests is automatically created as
+    well.
+
+  halt
+    Sets a response object with the content given.
+
+    When used as a return value from a filter, this breaks the execution
+    flow and renders the response immediately:
+
+        hook before sub {
+            if ($some_condition) {
+                halt("Unauthorized");
+                # This code is not executed :
+                do_stuff();
+            }
+        };
+
+        get '/' => sub {
+            "hello there";
+        };
+
+    WARNING : Issuing a halt immediately exits the current route, and
+    perform the halt. Thus, any code after a halt is ignored, until the end
+    of the route. So it's not necessary anymore to use "return" with halt.
+
+  headers
+    Adds custom headers to responses:
+
+        get '/send/headers', sub {
+            headers 'X-Foo' => 'bar', X-Bar => 'foo';
+        }
+
+  header
+    adds a custom header to response:
+
+        get '/send/header', sub {
+            header 'x-my-header' => 'shazam!';
+        }
+
+    Note that it will overwrite the old value of the header, if any. To
+    avoid that, see "push_header".
+
+  push_header
+    Do the same as "header", but allow for multiple headers with the same
+    name.
+
+        get '/send/header', sub {
+            push_header 'x-my-header' => '1';
+            push_header 'x-my-header' => '2';
+            will result in two headers "x-my-header" in the response
+        }
+
+  hook
+    Adds a hook at some position. For example :
+
+      hook before_serializer => sub {
+        my $response = shift;
+        $response->content->{generated_at} = localtime();
+      };
+
+    There can be multiple hooks assigned to a given position, and each will
+    be executed in order. Note that all hooks are always called, even if
+    they are defined in a different package loaded via "load_app".
+
+    (For details on how to register new hooks from within plugins, see
+    Dancer::Hook.) Supported before hooks (in order of execution):
+
+    before_deserializer
+        This hook receives no arguments.
+
+          hook before_deserializer => sub {
+            ...
+          };
+
+    before_file_render
+        This hook receives as argument the path of the file to render.
+
+          hook before_file_render => sub {
+            my $path = shift;
+            ...
+          };
+
+    before_error_init
+        This hook receives as argument a Dancer::Error object.
+
+          hook before_error_init => sub {
+            my $error = shift;
+            ...
+          };
+
+    before_error_render
+        This hook receives as argument a Dancer::Error object.
+
+          hook before_error_render => sub {
+            my $error = shift;
+          };
+
+    before
+        This hook receives one argument, the route being executed (a
+        Dancer::Route object).
+
+          hook before => sub {
+            my $route_handler = shift;
+            ...
+          };
+
+        it is equivalent to the deprecated
+
+          before sub {
+            ...
+          };
+
+    before_template_render
+        This is an alias to 'before_template'.
+
+        This hook receives as argument a HashRef, containing the tokens that
+        will be passed to the template. You can use it to add more tokens,
+        or delete some specific token.
+
+          hook before_template_render => sub {
+            my $tokens = shift;
+            delete $tokens->{user};
+            $tokens->{time} = localtime;
+          };
+
+        is equivalent to
+
+          hook before_template => sub {
+            my $tokens = shift;
+            delete $tokens->{user};
+            $tokens->{time} = localtime;
+          };
+
+    before_layout_render
+        This hook receives two arguments. The first one is a HashRef
+        containing the tokens. The second is a ScalarRef representing the
+        content of the template.
+
+          hook before_layout_render => sub {
+            my ($tokens, $html_ref) = @_;
+            ...
+          };
+
+    before_serializer
+        This hook receives as argument a Dancer::Response object.
+
+          hook before_serializer => sub {
+            my $response = shift;
+            $response->content->{start_time} = time();
+          };
+
+    Supported after hooks (in order of execution):
+
+    after_deserializer
+        This hook receives no arguments.
+
+          hook after_deserializer => sub {
+            ...
+          };
+
+    after_file_render
+        This hook receives as argument a Dancer::Response object.
+
+          hook after_file_render => sub {
+            my $response = shift;
+          };
+
+    after_template_render
+        This hook receives as argument a ScalarRef representing the content
+        generated by the template.
+
+          hook after_template_render => sub {
+            my $html_ref = shift;
+          };
+
+    after_layout_render
+        This hook receives as argument a ScalarRef representing the content
+        generated by the layout
+
+          hook after_layout_render => sub {
+            my $html_ref = shift;
+          };
+
+    after
+        This is an alias for "after".
+
+        This hook runs after a request has been processed, but before the
+        response is sent.
+
+        It receives a Dancer::Response object, which it can modify if it
+        needs to make changes to the response which is about to be sent.
+
+          hook after => sub {
+            my $response = shift;
+          };
+
+        This is equivalent to the deprecated
+
+          after sub {
+            my $response = shift;
+          };
+
+    after_error_render
+        This hook receives as argument a Dancer::Response object.
+
+          hook after_error_render => sub {
+            my $response = shift;
+          };
+
+    on_handler_exception
+        This hook is called when an exception has been caught, at the
+        handler level, just before creating and rendering Dancer::Error.
+        This hook receives as argument a Dancer::Exception object.
+
+          hook on_handler_exception => sub {
+            my $exception = shift;
+          };
+
+    on_reset_state
+        This hook is called when global state is reset to process a new
+        request. It receives a boolean value that indicates whether the
+        reset was called as part of a forwarded request.
+
+          hook on_reset_state => sub {
+            my $is_forward = shift;
+          };
+
+    on_route_exception
+        This hook is called when an exception has been caught, at the route
+        level, just before rethrowing it higher. This hook receives the
+        exception as argument. It can be a Dancer::Exception, or a string,
+        or whatever was used to "die".
+
+          hook on_route_exception => sub {
+            my $exception = shift;
+          };
+
+  info
+    Logs a message of info level:
+
+        info "This is a info message";
+
+    See Dancer::Logger for details on how to configure where log messages
+    go.
+
+  layout
+    This method is deprecated. Use "set":
+
+        set layout => 'user';
+
+  logger
+    Deprecated. Use "<set logger => 'console'"> to change current logger
+    engine.
+
+  load
+    Loads one or more perl scripts in the current application's namespace.
+    Syntactic sugar around Perl's "require":
+
+        load 'UserActions.pl', 'AdminActions.pl';
+
+  load_app
+    Loads a Dancer package. This method sets the libdir to the current
+    "./lib" directory:
+
+        # if we have lib/Webapp.pm, we can load it like:
+        load_app 'Webapp';
+        # or with options
+        load_app 'Forum', prefix => '/forum', settings => {foo => 'bar'};
+
+    Note that the package loaded using load_app must import Dancer with the
+    ":syntax" option.
+
+    To load multiple apps repeat load_app:
+
+        load_app 'one';
+        load_app 'two';
+
+    The old way of loading multiple apps in one go (load_app 'one', 'two';)
+    is deprecated.
+
+  mime
+    Shortcut to access the instance object of Dancer::MIME. You should read
+    the Dancer::MIME documentation for full details, but the most
+    commonly-used methods are summarized below:
+
+        # set a new mime type
+        mime->add_type( foo => 'text/foo' );
+
+        # set a mime type alias
+        mime->add_alias( f => 'foo' );
+
+        # get mime type for an alias
+        my $m = mime->for_name( 'f' );
+
+        # get mime type for a file (based on extension)
+        my $m = mime->for_file( "foo.bar" );
+
+        # get current defined default mime type
+        my $d = mime->default;
+
+        # set the default mime type using config.yml
+        # or using the set keyword
+        set default_mime_type => 'text/plain';
+
+  params
+    *This method should be called from a route handler*. It's an alias for
+    the Dancer::Request params accessor. In list context it returns a list
+    of key/value pair of all defined parameters. In scalar context, it
+    returns a hash reference instead. Check "param" below to access quickly
+    to a single parameter value.
+
+  param
+    *This method should be called from a route handler*. This method is an
+    accessor to the parameters hash table.
+
+       post '/login' => sub {
+           my $username = param "user";
+           my $password = param "pass";
+           # ...
+       }
+
+  pass
+    *This method should be called from a route handler*. Tells Dancer to
+    pass the processing of the request to the next matching route.
+
+    WARNING : Issuing a pass immediately exits the current route, and
+    perform the pass. Thus, any code after a pass is ignored, until the end
+    of the route. So it's not necessary anymore to use "return" with pass.
+
+        get '/some/route' => sub {
+            if (...) {
+                # we want to let the next matching route handler process this one
+                pass(...);
+                # This code will be ignored
+                do_stuff();
+            }
+        };
+
+  patch
+    Defines a route for HTTP PATCH requests to the given URL:
+
+        patch '/resource' => sub { ... };
+
+    ("PATCH" is a relatively new and not-yet-common HTTP verb, which is
+    intended to work as a "partial-PUT", transferring just the changes;
+    please see <http://tools.ietf.org/html/rfc5789|RFC5789> for further
+    details.)
+
+    Please be aware that, if you run your app in standalone mode, "PATCH"
+    requests will not reach your app unless you have a new version of
+    HTTP::Server::Simple which accepts "PATCH" as a valid verb. The current
+    version at time of writing, 0.44, does not. A pull request has been
+    submitted to add this support, which you can find at:
+
+    <https://github.com/bestpractical/http-server-simple/pull/1>
+
+  path
+    Concatenates multiple paths together, without worrying about the
+    underlying operating system:
+
+        my $path = path(dirname($0), 'lib', 'File.pm');
+
+    It also normalizes (cleans) the path aesthetically. It does not verify
+    the path exists.
+
+  post
+    Defines a route for HTTP POST requests to the given URL:
+
+        post '/' => sub {
+            return "Hello world";
+        }
+
+  prefix
+    Defines a prefix for each route handler, like this:
+
+        prefix '/home';
+
+    From here, any route handler is defined to /home/*:
+
+        get '/page1' => sub {}; # will match '/home/page1'
+
+    You can unset the prefix value:
+
+        prefix undef;
+        get '/page1' => sub {}; will match /page1
+
+    For a safer alternative you can use lexical prefix like this:
+
+        prefix '/home' => sub {
+            ## Prefix is set to '/home' here
+
+            get ...;
+            get ...;
+        };
+        ## prefix reset to the previous version here
+
+    This makes it possible to nest prefixes:
+
+       prefix '/home' => sub {
+           ## some routes
+       
+          prefix '/private' => sub {
+             ## here we are under /home/private...
+
+             ## some more routes
+          };
+          ## back to /home
+       };
+       ## back to the root
+
+    Notice: once you have a prefix set, do not add a caret to the regex:
+
+        prefix '/foo';
+        get qr{^/bar} => sub { ... } # BAD BAD BAD
+        get qr{/bar}  => sub { ... } # Good!
+
+  del
+    Defines a route for HTTP DELETE requests to the given URL:
+
+        del '/resource' => sub { ... };
+
+  options
+    Defines a route for HTTP OPTIONS requests to the given URL:
+
+        options '/resource' => sub { ... };
+
+  put
+    Defines a route for HTTP PUT requests to the given URL:
+
+        put '/resource' => sub { ... };
+
+  redirect
+    Generates a HTTP redirect (302). You can either redirect to a complete
+    different site or within the application:
+
+        get '/twitter', sub {
+            redirect 'http://twitter.com/me';
+        };
+
+    You can also force Dancer to return a specific 300-ish HTTP response
+    code:
+
+        get '/old/:resource', sub {
+            redirect '/new/'.params->{resource}, 301;
+        };
+
+    It is important to note that issuing a redirect by itself does not exit
+    and redirect immediately, redirection is deferred until after the
+    current route or filter has been processed. To exit and redirect
+    immediately, use the return function, e.g.
+
+        get '/restricted', sub {
+            return redirect '/login' if accessDenied();
+            return 'Welcome to the restricted section';
+        };
+
+  render_with_layout
+    Allows a handler to provide plain HTML (or other content), but have it
+    rendered within the layout still.
+
+    This method is DEPRECATED, and will be removed soon. Instead, you should
+    be using the "engine" keyword:
+
+        get '/foo' => sub {
+            # Do something which generates HTML directly (maybe using
+            # HTML::Table::FromDatabase or something)
+            my $content = ...;
+
+            # get the template engine
+            my $template_engine = engine 'template';
+
+            # apply the layout (not the renderer), and return the result
+            $template_engine->apply_layout($content)
+        };
+
+    It works very similarly to "template" in that you can pass tokens to be
+    used in the layout, and/or options to control the way the layout is
+    rendered. For instance, to use a custom layout:
+
+        render_with_layout $content, {}, { layout => 'layoutname' };
+
+  request
+    Returns a Dancer::Request object representing the current request.
+
+    See the Dancer::Request documentation for the methods you can call, for
+    example:
+
+        request->referer;         # value of the HTTP referer header
+        request->remote_address;  # user's IP address
+        request->user_agent;      # User-Agent header value
+
+  send_error
+    Returns a HTTP error. By default the HTTP code returned is 500:
+
+        get '/photo/:id' => sub {
+            if (...) {
+                send_error("Not allowed", 403);
+            } else {
+               # return content
+            }
+        }
+
+    WARNING : Issuing a send_error immediately exits the current route, and
+    perform the send_error. Thus, any code after a send_error is ignored,
+    until the end of the route. So it's not necessary anymore to use
+    "return" with send_error.
+
+        get '/some/route' => sub {
+            if (...) {
+                # we want to let the next matching route handler process this one
+                send_error(..);
+                # This code will be ignored
+                do_stuff();
+            }
+        };
+
+  send_file
+    Lets the current route handler send a file to the client. Note that the
+    path of the file must be relative to the public directory unless you use
+    the "system_path" option (see below).
+
+        get '/download/:file' => sub {
+            return send_file(params->{file});
+        }
+
+    WARNING : Issuing a send_file immediately exits the current route, and
+    perform the send_file. Thus, any code after a send_file is ignored,
+    until the end of the route. So it's not necessary anymore to use
+    "return" with send_file.
+
+        get '/some/route' => sub {
+            if (...) {
+                # we want to let the next matching route handler process this one
+                send_file(...);
+                # This code will be ignored
+                do_stuff();
+            }
+        };
+
+    Send file supports streaming possibility using PSGI streaming. The
+    server should support it but normal streaming is supported on most, if
+    not all.
+
+        get '/download/:file' => sub {
+            return send_file( params->{file}, streaming => 1 );
+        }
+
+    You can control what happens using callbacks.
+
+    First, "around_content" allows you to get the writer object and the
+    chunk of content read, and then decide what to do with each chunk:
+
+        get '/download/:file' => sub {
+            return send_file(
+                params->{file},
+                streaming => 1,
+                callbacks => {
+                    around_content => sub {
+                        my ( $writer, $chunk ) = @_;
+                        $writer->write("* $chunk");
+                    },
+                },
+            );
+        }
+
+    You can use "around" to all get all the content (whether a filehandle if
+    it's a regular file or a full string if it's a scalar ref) and decide
+    what to do with it:
+
+        get '/download/:file' => sub {
+            return send_file(
+                params->{file},
+                streaming => 1,
+                callbacks => {
+                    around => sub {
+                        my ( $writer, $content ) = @_;
+
+                        # we know it's a text file, so we'll just stream
+                        # line by line
+                        while ( my $line = <$content> ) {
+                            $writer->write($line);
+                        }
+                    },
+                },
+            );
+        }
+
+    Or you could use "override" to control the entire streaming callback
+    request:
+
+        get '/download/:file' => sub {
+            return send_file(
+                params->{file},
+                streaming => 1,
+                callbacks => {
+                    override => sub {
+                        my ( $respond, $response ) = @_;
+
+                        my $writer = $respond->( [ $newstatus, $newheaders ] );
+                        $writer->write("some line");
+                    },
+                },
+            );
+        }
+
+    You can also set the number of bytes that will be read at a time
+    (default being 42K bytes) using "bytes":
+
+        get '/download/:file' => sub {
+            return send_file(
+                params->{file},
+                streaming => 1,
+                bytes     => 524288, # 512K
+            );
+        };
+
+    The content-type will be set depending on the current MIME types
+    definition (see "mime" if you want to define your own).
+
+    If your filename does not have an extension, or you need to force a
+    specific mime type, you can pass it to "send_file" as follows:
+
+        return send_file(params->{file}, content_type => 'image/png');
+
+    Also, you can use your aliases or file extension names on
+    "content_type", like this:
+
+        return send_file(params->{file}, content_type => 'png');
+
+    For files outside your public folder, you can use the "system_path"
+    switch. Just bear in mind that its use needs caution as it can be
+    dangerous.
+
+       return send_file('/etc/passwd', system_path => 1);
+
+    If you have your data in a scalar variable, "send_file" can be useful as
+    well. Pass a reference to that scalar, and "send_file" will behave as if
+    there was a file with that contents:
+
+       return send_file( \$data, content_type => 'image/png' );
+
+    Note that Dancer is unable to guess the content type from the data
+    contents. Therefore you might need to set the "content_type" properly.
+    For this kind of usage an attribute named "filename" can be useful. It
+    is used as the Content-Disposition header, to hint the browser about the
+    filename it should use.
+
+       return send_file( \$data, content_type => 'image/png'
+                                 filename     => 'onion.png' );
+
+    Note that you should always use "return send_file ..." to stop execution
+    of your route handler at that point.
+
+  set
+    Defines a setting:
+
+        set something => 'value';
+
+    You can set more than one value at once:
+
+        set something => 'value', otherthing => 'othervalue';
+
+  setting
+    Returns the value of a given setting:
+
+        setting('something'); # 'value'
+
+  set_cookie
+    Creates or updates cookie values:
+
+        get '/some_action' => sub {
+            set_cookie name => 'value',
+                       expires => (time + 3600),
+                       domain  => '.foo.com';
+        };
+
+    In the example above, only 'name' and 'value' are mandatory.
+
+    You can also store more complex structure in your cookies:
+
+        get '/some_auth' => sub {
+            set_cookie oauth => {
+                token        => $twitter->request_token,
+                token_secret => $twitter->secret_token,
+                ...
+            };
+        };
+
+    You can't store more complex structure than this. All keys in the
+    HashRef should be Scalars; storing references will not work.
+
+    See Dancer::Cookie for further options when creating your cookie.
+
+    Note that this method will be eventually deprecated in favor of the new
+    "cookie" method.
+
+  session
+    Provides access to all data stored in the user's session (if any).
+
+    It can also be used as a setter to store data in the session:
+
+        # getter example
+        get '/user' => sub {
+            if (session('user')) {
+                return "Hello, ".session('user')->name;
+            }
+        };
+
+        # setter example
+        post '/user/login' => sub {
+            ...
+            if ($logged_in) {
+                session user => $user;
+            }
+            ...
+        };
+
+    You may also need to clear a session:
+
+        # destroy session
+        get '/logout' => sub {
+            ...
+            session->destroy;
+            ...
+        };
+
+    If you need to fetch the session ID being used for any reason:
+
+        my $id = session->id;
+
+    In order to be able to use sessions, first you need to enable session
+    support in one of the configuration files. A quick way to do it is to
+    add
+
+        session: "YAML"
+
+    to config.yml.
+
+    For more details, see Dancer::Session.
+
+  splat
+    Returns the list of captures made from a route handler with a route
+    pattern which includes wildcards:
+
+        get '/file/*.*' => sub {
+            my ($file, $extension) = splat;
+            ...
+        };
+
+    There is also the extensive splat (A.K.A. "megasplat"), which allows
+    extensive greedier matching, available using two asterisks. The
+    additional path is broken down and returned as an ArrayRef:
+
+        get '/entry/*/tags/**' => sub {
+            my ( $entry_id, $tags ) = splat;
+            my @tags = @{$tags};
+        };
+
+    This helps with chained actions:
+
+        get '/team/*/**' => sub {
+            my ($team) = splat;
+            var team => $team;
+            pass;
+        };
+
+        prefix '/team/*';
+
+        get '/player/*' => sub {
+            my ($player) = splat;
+
+            # etc...
+        };
+
+        get '/score' => sub {
+            return score_for( vars->{'team'} );
+        };
+
+  start
+    Starts the application or the standalone server (depending on the
+    deployment choices).
+
+    This keyword should be called at the very end of the script, once all
+    routes are defined. At this point, Dancer takes over control.
+
+  status
+    Changes the status code provided by an action. By default, an action
+    will produce an "HTTP 200 OK" status code, meaning everything is OK:
+
+        get '/download/:file' => {
+            if (! -f params->{file}) {
+                status 'not_found';
+                return "File does not exist, unable to download";
+            }
+            # serving the file...
+        };
+
+    In that example, Dancer will notice that the status has changed, and
+    will render the response accordingly.
+
+    The status keyword receives either a numeric status code or its name in
+    lower case, with underscores as a separator for blanks - see the list in
+    "HTTP CODES" in Dancer::HTTP.
+
+  template
+    Returns the response of processing the given template with the given
+    parameters (and optional settings), wrapping it in the default or
+    specified layout too, if layouts are in use.
+
+    An example of a route handler which returns the result of using template
+    to build a response with the current template engine:
+
+        get '/' => sub {
+            ...
+            return template 'some_view', { token => 'value'};
+        };
+
+    Note that "template" simply returns the content, so when you use it in a
+    route handler, if execution of the route handler should stop at that
+    point, make sure you use 'return' to ensure your route handler returns
+    the content.
+
+    Since template just returns the result of rendering the template, you
+    can also use it to perform other templating tasks, e.g. generating
+    emails:
+
+        post '/some/route' => sub {
+            if (...) {
+                email {
+                    to      => 'someone@example.com',
+                    from    => 'foo@example.com',
+                    subject => 'Hello there',
+                    msg     => template('emails/foo', { name => params->{name} }),
+                };
+
+                return template 'message_sent';
+            } else {
+                return template 'error';
+            }
+        };
+
+    Compatibility notice: "template" was changed in version 1.3090 to
+    immediately interrupt execution of a route handler and return the
+    content, as it's typically used at the end of a route handler to return
+    content. However, this caused issues for some people who were using
+    "template" to generate emails etc, rather than accessing the template
+    engine directly, so this change has been reverted in 1.3091.
+
+    The first parameter should be a template available in the views
+    directory, the second one (optional) is a HashRef of tokens to
+    interpolate, and the third (again optional) is a HashRef of options.
+
+    For example, to disable the layout for a specific request:
+
+        get '/' => sub {
+            template 'index', {}, { layout => undef };
+        };
+
+    Or to request a specific layout, of course:
+
+        get '/user' => sub {
+            template 'user', {}, { layout => 'user' };
+        };
+
+    Some tokens are automatically added to your template ("perl_version",
+    "dancer_version", "settings", "request", "params", "vars" and, if you
+    have sessions enabled, "session"). Check Dancer::Template::Abstract for
+    further details.
+
+  to_dumper ($structure)
+    Serializes a structure with Data::Dumper.
+
+  to_json ($structure, %options)
+    Serializes a structure to JSON. Can receive optional arguments. Thoses
+    arguments are valid JSON arguments to change the behaviour of the
+    default "JSON::to_json" function.
+
+  to_yaml ($structure)
+    Serializes a structure to YAML.
+
+  to_xml ($structure, %options)
+    Serializes a structure to XML. Can receive optional arguments. Thoses
+    arguments are valid XML::Simple arguments to change the behaviour of the
+    default "XML::Simple::XMLout" function.
+
+  true
+    Constant that returns a true value (1).
+
+  upload
+    Provides access to file uploads. Any uploaded file is accessible as a
+    Dancer::Request::Upload object. You can access all parsed uploads via:
+
+        post '/some/route' => sub {
+            my $file = upload('file_input_foo');
+            # file is a Dancer::Request::Upload object
+        };
+
+    If you named multiple input of type "file" with the same name, the
+    upload keyword will return an Array of Dancer::Request::Upload objects:
+
+        post '/some/route' => sub {
+            my ($file1, $file2) = upload('files_input');
+            # $file1 and $file2 are Dancer::Request::Upload objects
+        };
+
+    You can also access the raw HashRef of parsed uploads via the current
+    request object:
+
+        post '/some/route' => sub {
+            my $all_uploads = request->uploads;
+            # $all_uploads->{'file_input_foo'} is a Dancer::Request::Upload object
+            # $all_uploads->{'files_input'} is an ArrayRef of Dancer::Request::Upload objects
+        };
+
+    Note that you can also access the filename of the upload received via
+    the params keyword:
+
+        post '/some/route' => sub {
+            # params->{'files_input'} is the filename of the file uploaded
+        };
+
+    See Dancer::Request::Upload for details about the interface provided.
+
+  uri_for
+    Returns a fully-qualified URI for the given path:
+
+        get '/' => sub {
+            redirect uri_for('/path');
+            # can be something like: http://localhost:3000/path
+        };
+
+  captures
+    Returns a reference to a copy of "%+", if there are named captures in
+    the route Regexp.
+
+    Named captures are a feature of Perl 5.10, and are not supported in
+    earlier versions:
+
+        get qr{
+            / (?<object> user   | ticket | comment )
+            / (?<action> delete | find )
+            / (?<id> \d+ )
+            /?$
+        }x
+        , sub {
+            my $value_for = captures;
+            "i don't want to $$value_for{action} the $$value_for{object} $$value_for{id} !"
+        };
+
+  var
+    Provides an accessor for variables shared between filters and route
+    handlers. Given a key/value pair, it sets a variable:
+
+        hook before sub {
+            var foo => 42;
+        };
+
+    Later, route handlers and other filters will be able to read that
+    variable:
+
+        get '/path' => sub {
+            my $foo = var 'foo';
+            ...
+        };
+
+  vars
+    Returns the HashRef of all shared variables set during the filter/route
+    chain with the "var" keyword:
+
+        get '/path' => sub {
+            if (vars->{foo} eq 42) {
+                ...
+            }
+        };
+
+  warning
+    Logs a warning message through the current logger engine:
+
+        warning "This is a warning";
+
+    See Dancer::Logger for details on how to configure where log messages
+    go.
+
+AUTHOR
+    This module has been written by Alexis Sukrieh <sukria@cpan.org> and
+    others, see the AUTHORS file that comes with this distribution for
+    details.
+
+SOURCE CODE
+    The source code for this module is hosted on GitHub
+    <https://github.com/PerlDancer/Dancer>. Feel free to fork the repository
+    and submit pull requests! (See Dancer::Development for details on how to
+    contribute).
+
+    Also, why not watch the repo
+    <https://github.com/PerlDancer/Dancer/toggle_watch> to keep up to date
+    with the latest upcoming changes?
+
+GETTING HELP / CONTRIBUTING
+    The Dancer development team can be found on #dancer on irc.perl.org:
+    <irc://irc.perl.org/dancer>
+
+    If you don't have an IRC client installed/configured, there is a simple
+    web chat client at <http://www.perldancer.org/irc> for you.
+
+    There is also a Dancer users mailing list available - subscribe at:
+
+    <http://lists.preshweb.co.uk/mailman/listinfo/dancer-users>
+
+    If you'd like to contribute to the Dancer project, please see
+    <http://www.perldancer.org/contribute> for all the ways you can help!
+
+DEPENDENCIES
+    The following modules are mandatory (Dancer cannot run without them):
+
+    HTTP::Server::Simple::PSGI
+    HTTP::Body
+    LWP
+    MIME::Types
+    URI
+
+    The following modules are optional:
+
+    JSON : needed to use JSON serializer
+    Plack : in order to use PSGI
+    Template : in order to use TT for rendering views
+    XML::Simple and <XML:SAX> or <XML:Parser> for XML serialization
+    YAML : needed for configuration file support
+
+SEE ALSO
+    Main Dancer web site: <http://perldancer.org/>.
+
+    The concept behind this module comes from the Sinatra ruby project, see
+    <http://www.sinatrarb.com/> for details.
+
+AUTHOR
+    Dancer Core Developers
+
+COPYRIGHT AND LICENSE
+    This software is copyright (c) 2010 by Alexis Sukrieh.
+
+    This is free software; you can redistribute it and/or modify it under
+    the same terms as the Perl 5 programming language system itself.
 
@@ -0,0 +1,141 @@
+## Dancer
+
+The easiest way to write a webapp with Perl                                    
+
+### ABOUT
+
+This project is inspired by  Ruby's Sinatra framework: a framework for building
+web applications with minimal effort, allowing a simple webapp to be created with
+very few lines of code, but allowing the flexibility to scale to much more
+complex applications.  Dancer supports plugins to add various extra
+functionality you may want, whilst keeping the core streamlined.
+
+
+### NEWS 
+
+ - Dancer's development moves very quickly, to stay tuned follow PerlDancer on Twitter: http://twitter.com/PerlDancer
+ - See also Sukria's blog: http://www.sukria.net/fr/archives/tag/dancer/
+ - See also the project on Github for the latest changes: http://github.com/PerlDancer/Dancer
+ - To keep even more up to date and talk to the developers, join us in #dancer on
+irc.perl.org *(if you don't have an IRC client, use http://www.perldancer.org/irc
+for easy access)*.
+
+### EXAMPLE
+
+To create a new Dancer application, use the helper script `dancer` provided with this distribution:
+
+```bash
+$ dancer -a MyWeb::App
++ MyWeb-App/bin
++ MyWeb-App/bin/app.pl
++ MyWeb-App/config.yml
++ MyWeb-App/environments
+[..]
+```
+
+You then have a new Dancer application in `MyWeb::App` which is already a
+functioning `Hello World` application, ready for you to work upon.
+
+Here is an example of a webapp built with Dancer:
+
+```perl
+# MyWeb-App/bin/app.pl
+#!/usr/bin/perl
+
+use Dancer;
+
+get '/' => sub {
+    "Hello There!"
+};
+
+get '/hello/:name' => sub {
+    "Hey ".params->{name}.", how are you?";
+};
+
+post '/new' => sub {
+    "creating new entry: ".params->{name};
+};
+
+Dancer->dance;
+```
+
+When running this script, a webserver is running and ready to serve:    
+
+```bash
+$ perl ./bin/app.pl
+>> Listening on 0.0.0.0:3000
+== Entering the development dance floor ...
+```
+
+Then it's possible to access any route defined in the script:
+
+```bash
+$ curl http://localhost:3000/
+Hello There!
+```
+
+For a more in-depth example, see examples/dancr
+
+
+### DEPENDENCIES
+
+Dancer depends on the following modules
+
+ - HTTP::Server::Simple::PSGI
+ - HTTP::Body
+ - Exception::Class
+  - MIME::Types
+  - URI
+
+Optional modules may be needed if you want to use some features (but are not 
+required for a basic usage). 
+
+Dependency-checks for additional features are performed at runtime.
+
+Most common modules you may want are:
+
+ - Template (for Template::Toolkit support)
+ - YAML (for configuration files)
+ - Plack (if you want to deploy your application with PSGI)
+
+### PRODUCTION MATTERS
+
+This is a work in progress.
+
+Dancer supports PSGI/Plack, to run a Dancer app with PSGI/Plack just bootstrap
+your application with the helper script `dancer` like the following:
+
+```bash
+$ dancer -a MyWeb::App
+```
+
+You'll find a file in there called `app.psgi`, use this file to configure your
+PSGI environment, as explained in the revelant documentation of your PSGI
+server.
+
+For instance, with plackup, just do the following:
+
+```bash
+$ plackup -a app.psgi
+```
+
+### WEBSITE
+
+For more details about the project, checkout the official website:
+http://perldancer.org/ or checkout the documentation at
+http://search.cpan.org/dist/Dancer/
+
+See also the Github project page: http://github.com/PerlDancer/Dancer for the latest
+changes.
+
+### REPORTING BUGS
+
+Bug reports are appreciated and will receive prompt attention - the preferred
+method is to raise them using Github's basic issue tracking system:
+
+http://github.com/PerlDancer/Dancer/issues
+
+### CONTACT
+
+You can reach the development team on IRC: irc://irc.perl.org/#dancer or
+http://www.perldancer.org/irc for a web-based IRC client.
@@ -0,0 +1,1452 @@
+# NAME
+
+Dancer - lightweight yet powerful web application framework
+
+# VERSION
+
+version 1.3130
+
+# SYNOPSIS
+
+    #!/usr/bin/perl
+    use Dancer;
+
+    get '/hello/:name' => sub {
+        return "Why, hello there " . param('name');
+    };
+
+    dance;
+
+The above is a basic but functional web app created with Dancer.  If you want
+to see more examples and get up and running quickly, check out the
+[Dancer::Introduction](https://metacpan.org/pod/Dancer::Introduction) and the [Dancer::Cookbook](https://metacpan.org/pod/Dancer::Cookbook).  For examples on
+deploying your Dancer applications, see [Dancer::Deployment](https://metacpan.org/pod/Dancer::Deployment).
+
+# DESCRIPTION
+
+Dancer is a web application framework designed to be as effortless as possible
+for the developer, taking care of the boring bits as easily as possible, yet
+staying out of your way and letting you get on with writing your code.
+
+Dancer aims to provide the simplest way for writing web applications, and
+offers the flexibility to scale between a very simple lightweight web service
+consisting of a few lines of code in a single file, all the way up to a more
+complex fully-fledged web application with session support, templates for views
+and layouts, etc.
+
+If you don't want to write CGI scripts by hand, and find Catalyst too big or
+cumbersome for your project, Dancer is what you need.
+
+Dancer has few pre-requisites, so your Dancer webapps will be easy to deploy.
+
+Dancer apps can be used with a an embedded web server (great for easy testing),
+and can run under PSGI/Plack for easy deployment in a variety of webserver
+environments.
+
+# MORE DOCUMENTATION
+
+This documentation describes all the exported symbols of Dancer. If you want
+a quick start guide to discover the framework, you should look at
+[Dancer::Introduction](https://metacpan.org/pod/Dancer::Introduction), or [Dancer::Tutorial](https://metacpan.org/pod/Dancer::Tutorial) to learn by example.
+
+If you want to have specific examples of code for real-life problems, see the
+[Dancer::Cookbook](https://metacpan.org/pod/Dancer::Cookbook).
+
+If you want to see configuration examples of different deployment solutions
+involving Dancer and Plack, see [Dancer::Deployment](https://metacpan.org/pod/Dancer::Deployment).
+
+You can find out more about the many useful plugins available for Dancer in
+[Dancer::Plugins](https://metacpan.org/pod/Dancer::Plugins).
+
+# EXPORTS
+
+By default, `use Dancer` exports all the functions below plus sets up
+your app.  You can control the exporting through the normal
+[Exporter](https://metacpan.org/pod/Exporter) mechanism.  For example:
+
+    # Just export the route controllers
+    use Dancer qw(get post put patch del);
+
+    # Export everything but pass to avoid clashing with Test::More
+    use Test::More;
+    use Dancer qw(!pass);
+
+There are also some special tags to control exports and behaviour.
+
+## :moose
+
+This will export everything except functions which clash with
+Moose. Currently these are `after` and `before`.
+
+## :syntax
+
+This tells Dancer to just export symbols and not set up your app.
+This is most useful for writing Dancer code outside of your main route
+handler.
+
+## :tests
+
+This will export everything except functions which clash with
+commonly used testing modules. Currently these are `pass`.
+
+It can be combined with other export pragmas. For example, while testing...
+
+    use Test::More;
+    use Dancer qw(:syntax :tests);
+
+    # Test::Most also exports "set" and "any"
+    use Test::Most;
+    use Dancer qw(:syntax :tests !set !any);
+
+    # Alternatively, if you want to use Dancer's set and any...
+    use Test::Most qw(!set !any);
+    use Dancer qw(:syntax :tests);
+
+## :script
+
+This will export all the keywords, and will also load the configuration.
+
+This is useful when you want to use your Dancer application from a script.
+
+    use MyApp;
+    use Dancer ':script';
+    MyApp::schema('DBSchema')->deploy();
+
+By default, the [warnings](https://metacpan.org/pod/warnings) pragma will also be exported, meaning your
+app/script will be running under `use warnings`.  If you do not want this, set
+the [import\_warnings](https://metacpan.org/pod/Dancer::Config#import_warnings) setting to a false value.
+
+## !keyword
+
+If you want to simply prevent Dancer from exporting specific keywords (perhaps
+you plan to implement them yourself in a different way, or you don't plan to use
+them and they clash with another module you're loading), you can simply exclude
+them:
+
+    use Dancer qw(!session);
+
+The above would import all keywords as normal, with the exception of `session`.
+
+# FUNCTIONS
+
+## after
+
+Deprecated - see the `after` [hook](https://metacpan.org/pod/Dancer#hook).
+
+## any
+
+Defines a route for multiple HTTP methods at once:
+
+    any ['get', 'post'] => '/myaction' => sub {
+        # code
+    };
+
+Or even, a route handler that would match any HTTP methods:
+
+    any '/myaction' => sub {
+        # code
+    };
+
+## before
+
+Deprecated - see the `before` [hook](https://metacpan.org/pod/Dancer#hook).
+
+## before\_template
+
+Deprecated - see the `before_template` [hook](https://metacpan.org/pod/Dancer#hook).
+
+## cookies
+
+Accesses cookies values, it returns a HashRef of [Dancer::Cookie](https://metacpan.org/pod/Dancer::Cookie) objects:
+
+    get '/some_action' => sub {
+        my $cookie = cookies->{name};
+        return $cookie->value;
+    };
+
+In the case you have stored something else than a Scalar in your cookie:
+
+    get '/some_action' => sub {
+        my $cookie = cookies->{oauth};
+        my %values = $cookie->value;
+        return ($values{token}, $values{token_secret});
+    };
+
+## cookie
+
+Accesses a cookie value (or sets it). Note that this method will
+eventually be preferred over `set_cookie`.
+
+    cookie lang => "fr-FR";              # set a cookie and return its value
+    cookie lang => "fr-FR", expires => "2 hours";   # extra cookie info
+    cookie "lang"                        # return a cookie value
+
+If your cookie value is a key/value URI string, like
+
+    token=ABC&user=foo
+
+`cookie` will only return the first part (`token=ABC`) if called in scalar context.
+Use list context to fetch them all:
+
+    my @values = cookie "name";
+
+## config
+
+Accesses the configuration of the application:
+
+    get '/appname' => sub {
+        return "This is " . config->{appname};
+    };
+
+## content\_type
+
+Sets the **content-type** rendered, for the current route handler:
+
+    get '/cat/:txtfile' => sub {
+        content_type 'text/plain';
+
+        # here we can dump the contents of param('txtfile')
+    };
+
+You can use abbreviations for content types. For instance:
+
+    get '/svg/:id' => sub {
+        content_type 'svg';
+
+        # here we can dump the image with id param('id')
+    };
+
+Note that if you want to change the default content-type for every route, you
+have to change the `content_type` setting instead.
+
+## dance
+
+Alias for the `start` keyword.
+
+## dancer\_version
+
+Returns the version of Dancer. If you need the major version, do something like:
+
+    int(dancer_version);
+
+## debug
+
+Logs a message of debug level:
+
+    debug "This is a debug message";
+
+See [Dancer::Logger](https://metacpan.org/pod/Dancer::Logger) for details on how to configure where log messages go.
+
+## dirname
+
+Returns the dirname of the path given:
+
+    my $dir = dirname($some_path);
+
+## engine
+
+Given a namespace, returns the current engine object
+
+    my $template_engine = engine 'template';
+    my $html = $template_engine->apply_renderer(...);
+    $template_engine->apply_layout($html);
+
+## error
+
+Logs a message of error level:
+
+    error "This is an error message";
+
+See [Dancer::Logger](https://metacpan.org/pod/Dancer::Logger) for details on how to configure where log messages go.
+
+## false
+
+Constant that returns a false value (0).
+
+## forward
+
+Runs an internal redirect of the current request to another request. This helps
+you avoid having to redirect the user using HTTP and set another request to your
+application.
+
+It effectively lets you chain routes together in a clean manner.
+
+    get '/demo/articles/:article_id' => sub {
+
+        # you'll have to implement this next sub yourself :)
+        change_the_main_database_to_demo();
+
+        forward "/articles/" . params->{article_id};
+    };
+
+In the above example, the users that reach _/demo/articles/30_ will actually
+reach _/articles/30_ but we've changed the database to demo before.
+
+This is pretty cool because it lets us retain our paths and offer a demo
+database by merely going to _/demo/..._.
+
+You'll notice that in the example we didn't indicate whether it was **GET** or
+**POST**. That is because `forward` chains the same type of route the user
+reached. If it was a **GET**, it will remain a **GET** (but if you do need to
+change the method, you can do so; read on below for details.)
+
+**WARNING** : using forward will **not** preserve session data set on
+the forwarding rule.
+
+**WARNING** : Issuing a forward immediately exits the current route,
+and perform the forward. Thus, any code after a forward is ignored, until the
+end of the route. e.g.
+
+    get '/foo/:article_id' => sub {
+        if ($condition) {
+            forward "/articles/" . params->{article_id};
+            # The following code is never executed
+            do_stuff();
+        }
+
+        more_stuff();
+    };
+
+So it's not necessary anymore to use `return` with forward.
+
+Note that forward doesn't parse GET arguments. So, you can't use
+something like:
+
+     return forward '/home?authorized=1';
+
+But `forward` supports an optional HashRef with parameters to be added
+to the actual parameters:
+
+     return forward '/home', { authorized => 1 };
+
+Finally, you can add some more options to the forward method, in a
+third argument, also as a HashRef. That option is currently
+only used to change the method of your request. Use with caution.
+
+    return forward '/home', { auth => 1 }, { method => 'POST' };
+
+## from\_dumper ($structure)
+
+Deserializes a [Data::Dumper](https://metacpan.org/pod/Data::Dumper) structure.
+
+## from\_json ($structure, %options)
+
+Deserializes a JSON structure. Can receive optional arguments. Those arguments
+are valid [JSON](https://metacpan.org/pod/JSON) arguments to change the behaviour of the default
+`JSON::from_json` function.
+
+## from\_yaml ($structure)
+
+Deserializes a YAML structure.
+
+## from\_xml ($structure, %options)
+
+Deserializes a XML structure. Can receive optional arguments. These arguments
+are valid [XML::Simple](https://metacpan.org/pod/XML::Simple) arguments to change the behaviour of the default
+`XML::Simple::XMLin` function.
+
+## get
+
+Defines a route for HTTP **GET** requests to the given path:
+
+    get '/' => sub {
+        return "Hello world";
+    }
+
+Note that a route to match **HEAD** requests is automatically created as well.
+
+## halt
+
+Sets a response object with the content given.
+
+When used as a return value from a filter, this breaks the execution flow and
+renders the response immediately:
+
+    hook before sub {
+        if ($some_condition) {
+            halt("Unauthorized");
+            # This code is not executed :
+            do_stuff();
+        }
+    };
+
+    get '/' => sub {
+        "hello there";
+    };
+
+**WARNING** : Issuing a halt immediately exits the current route, and perform
+the halt. Thus, any code after a halt is ignored, until the end of the route.
+So it's not necessary anymore to use `return` with halt.
+
+## headers
+
+Adds custom headers to responses:
+
+    get '/send/headers', sub {
+        headers 'X-Foo' => 'bar', X-Bar => 'foo';
+    }
+
+## header
+
+adds a custom header to response:
+
+    get '/send/header', sub {
+        header 'x-my-header' => 'shazam!';
+    }
+
+Note that it will overwrite the old value of the header, if any. To avoid that,
+see ["push\_header"](#push_header).
+
+## push\_header
+
+Do the same as `header`, but allow for multiple headers with the same name.
+
+    get '/send/header', sub {
+        push_header 'x-my-header' => '1';
+        push_header 'x-my-header' => '2';
+        will result in two headers "x-my-header" in the response
+    }
+
+## hook
+
+Adds a hook at some position. For example :
+
+    hook before_serializer => sub {
+      my $response = shift;
+      $response->content->{generated_at} = localtime();
+    };
+
+There can be multiple hooks assigned to a given position, and each will be
+executed in order. Note that **all** hooks are always called, even if they
+are defined in a different package loaded via `load_app`.
+
+(For details on how to register new hooks from within plugins, see
+[Dancer::Hook](https://metacpan.org/pod/Dancer::Hook).)
+Supported **before** hooks (in order of execution):
+
+- before\_deserializer
+
+    This hook receives no arguments.
+
+        hook before_deserializer => sub {
+          ...
+        };
+
+- before\_file\_render
+
+    This hook receives as argument the path of the file to render.
+
+        hook before_file_render => sub {
+          my $path = shift;
+          ...
+        };
+
+- before\_error\_init
+
+    This hook receives as argument a [Dancer::Error](https://metacpan.org/pod/Dancer::Error) object.
+
+        hook before_error_init => sub {
+          my $error = shift;
+          ...
+        };
+
+- before\_error\_render
+
+    This hook receives as argument a [Dancer::Error](https://metacpan.org/pod/Dancer::Error) object.
+
+        hook before_error_render => sub {
+          my $error = shift;
+        };
+
+- before
+
+    This hook receives one argument, the route being executed (a [Dancer::Route](https://metacpan.org/pod/Dancer::Route)
+    object).
+
+        hook before => sub {
+          my $route_handler = shift;
+          ...
+        };
+
+    it is equivalent to the deprecated
+
+        before sub {
+          ...
+        };
+
+- before\_template\_render
+
+    This is an alias to 'before\_template'.
+
+    This hook receives as argument a HashRef, containing the tokens that
+    will be passed to the template. You can use it to add more tokens, or
+    delete some specific token.
+
+        hook before_template_render => sub {
+          my $tokens = shift;
+          delete $tokens->{user};
+          $tokens->{time} = localtime;
+        };
+
+    is equivalent to
+
+        hook before_template => sub {
+          my $tokens = shift;
+          delete $tokens->{user};
+          $tokens->{time} = localtime;
+        };
+
+- before\_layout\_render
+
+    This hook receives two arguments. The first one is a HashRef containing the
+    tokens. The second is a ScalarRef representing the content of the template.
+
+        hook before_layout_render => sub {
+          my ($tokens, $html_ref) = @_;
+          ...
+        };
+
+- before\_serializer
+
+    This hook receives as argument a [Dancer::Response](https://metacpan.org/pod/Dancer::Response) object.
+
+        hook before_serializer => sub {
+          my $response = shift;
+          $response->content->{start_time} = time();
+        };
+
+Supported **after** hooks (in order of execution):
+
+- after\_deserializer
+
+    This hook receives no arguments.
+
+        hook after_deserializer => sub {
+          ...
+        };
+
+- after\_file\_render
+
+    This hook receives as argument a [Dancer::Response](https://metacpan.org/pod/Dancer::Response) object.
+
+        hook after_file_render => sub {
+          my $response = shift;
+        };
+
+- after\_template\_render
+
+    This hook receives as argument a ScalarRef representing the content generated
+    by the template.
+
+        hook after_template_render => sub {
+          my $html_ref = shift;
+        };
+
+- after\_layout\_render
+
+    This hook receives as argument a ScalarRef representing the content generated
+    by the layout
+
+        hook after_layout_render => sub {
+          my $html_ref = shift;
+        };
+
+- after
+
+    This is an alias for `after`.
+
+    This hook runs after a request has been processed, but before the response is
+    sent.
+
+    It receives a [Dancer::Response](https://metacpan.org/pod/Dancer::Response) object, which it can modify
+    if it needs to make changes to the response which is about to be sent.
+
+        hook after => sub {
+          my $response = shift;
+        };
+
+    This is equivalent to the deprecated
+
+        after sub {
+          my $response = shift;
+        };
+
+- after\_error\_render
+
+    This hook receives as argument a [Dancer::Response](https://metacpan.org/pod/Dancer::Response) object.
+
+        hook after_error_render => sub {
+          my $response = shift;
+        };
+
+- on\_handler\_exception
+
+    This hook is called when an exception has been caught, at the handler level,
+    just before creating and rendering [Dancer::Error](https://metacpan.org/pod/Dancer::Error). This hook receives as
+    argument a [Dancer::Exception](https://metacpan.org/pod/Dancer::Exception) object.
+
+        hook on_handler_exception => sub {
+          my $exception = shift;
+        };
+
+- on\_reset\_state
+
+    This hook is called when global state is reset to process a new request.
+    It receives a boolean value that indicates whether the reset was called
+    as part of a forwarded request.
+
+        hook on_reset_state => sub {
+          my $is_forward = shift;
+        };
+
+- on\_route\_exception
+
+    This hook is called when an exception has been caught, at the route level, just
+    before rethrowing it higher. This hook receives the exception as argument. It
+    can be a Dancer::Exception, or a string, or whatever was used to `die`.
+
+        hook on_route_exception => sub {
+          my $exception = shift;
+        };
+
+## info
+
+Logs a message of info level:
+
+    info "This is a info message";
+
+See [Dancer::Logger](https://metacpan.org/pod/Dancer::Logger) for details on how to configure where log messages go.
+
+## layout
+
+This method is deprecated. Use `set`:
+
+    set layout => 'user';
+
+## logger
+
+Deprecated. Use `<set logger => 'console'`> to change current logger engine.
+
+## load
+
+Loads one or more perl scripts in the current application's namespace. Syntactic
+sugar around Perl's `require`:
+
+    load 'UserActions.pl', 'AdminActions.pl';
+
+## load\_app
+
+Loads a Dancer package. This method sets the libdir to the current `./lib`
+directory:
+
+    # if we have lib/Webapp.pm, we can load it like:
+    load_app 'Webapp';
+    # or with options
+    load_app 'Forum', prefix => '/forum', settings => {foo => 'bar'};
+
+Note that the package loaded using load\_app **must** import Dancer with the
+`:syntax` option.
+
+To load multiple apps repeat load\_app:
+
+    load_app 'one';
+    load_app 'two';
+
+The old way of loading multiple apps in one go (load\_app 'one', 'two';) is
+deprecated.
+
+## mime
+
+Shortcut to access the instance object of [Dancer::MIME](https://metacpan.org/pod/Dancer::MIME). You should
+read the [Dancer::MIME](https://metacpan.org/pod/Dancer::MIME) documentation for full details, but the most
+commonly-used methods are summarized below:
+
+    # set a new mime type
+    mime->add_type( foo => 'text/foo' );
+
+    # set a mime type alias
+    mime->add_alias( f => 'foo' );
+
+    # get mime type for an alias
+    my $m = mime->for_name( 'f' );
+
+    # get mime type for a file (based on extension)
+    my $m = mime->for_file( "foo.bar" );
+
+    # get current defined default mime type
+    my $d = mime->default;
+
+    # set the default mime type using config.yml
+    # or using the set keyword
+    set default_mime_type => 'text/plain';
+
+## params
+
+_This method should be called from a route handler_.
+It's an alias for the [Dancer::Request params
+accessor](https://metacpan.org/pod/Dancer::Request#params-source). In list context it returns a
+list of key/value pair of all defined parameters. In scalar context, 
+it returns a hash reference instead.
+Check `param` below to access quickly to a single
+parameter value.
+
+## param
+
+_This method should be called from a route handler_.
+This method is an accessor to the parameters hash table.
+
+    post '/login' => sub {
+        my $username = param "user";
+        my $password = param "pass";
+        # ...
+    }
+
+## pass
+
+_This method should be called from a route handler_.
+Tells Dancer to pass the processing of the request to the next
+matching route.
+
+**WARNING** : Issuing a pass immediately exits the current route, and perform
+the pass. Thus, any code after a pass is ignored, until the end of the route.
+So it's not necessary anymore to use `return` with pass.
+
+    get '/some/route' => sub {
+        if (...) {
+            # we want to let the next matching route handler process this one
+            pass(...);
+            # This code will be ignored
+            do_stuff();
+        }
+    };
+
+## patch
+
+Defines a route for HTTP **PATCH** requests to the given URL:
+
+    patch '/resource' => sub { ... };
+
+(`PATCH` is a relatively new and not-yet-common HTTP verb, which is intended to
+work as a "partial-PUT", transferring just the changes; please see
+[http://tools.ietf.org/html/rfc5789|RFC5789](http://tools.ietf.org/html/rfc5789|RFC5789) for further details.)
+
+Please be aware that, if you run your app in standalone mode, `PATCH` requests
+will not reach your app unless you have a new version of [HTTP::Server::Simple](https://metacpan.org/pod/HTTP::Server::Simple)
+which accepts `PATCH` as a valid verb.  The current version at time of writing,
+`0.44`, does not.  A pull request has been submitted to add this support, which
+you can find at:
+
+[https://github.com/bestpractical/http-server-simple/pull/1](https://github.com/bestpractical/http-server-simple/pull/1)
+
+## path
+
+Concatenates multiple paths together, without worrying about the underlying
+operating system:
+
+    my $path = path(dirname($0), 'lib', 'File.pm');
+
+It also normalizes (cleans) the path aesthetically. It does not verify the
+path exists.
+
+## post
+
+Defines a route for HTTP **POST** requests to the given URL:
+
+    post '/' => sub {
+        return "Hello world";
+    }
+
+## prefix
+
+Defines a prefix for each route handler, like this:
+
+    prefix '/home';
+
+From here, any route handler is defined to /home/\*:
+
+    get '/page1' => sub {}; # will match '/home/page1'
+
+You can unset the prefix value:
+
+    prefix undef;
+    get '/page1' => sub {}; will match /page1
+
+For a safer alternative you can use lexical prefix like this:
+
+    prefix '/home' => sub {
+        ## Prefix is set to '/home' here
+
+        get ...;
+        get ...;
+    };
+    ## prefix reset to the previous version here
+
+This makes it possible to nest prefixes:
+
+    prefix '/home' => sub {
+        ## some routes
+        
+       prefix '/private' => sub {
+          ## here we are under /home/private...
+
+          ## some more routes
+       };
+       ## back to /home
+    };
+    ## back to the root
+
+**Notice:** once you have a prefix set, do not add a caret to the regex:
+
+    prefix '/foo';
+    get qr{^/bar} => sub { ... } # BAD BAD BAD
+    get qr{/bar}  => sub { ... } # Good!
+
+## del
+
+Defines a route for HTTP **DELETE** requests to the given URL:
+
+    del '/resource' => sub { ... };
+
+## options
+
+Defines a route for HTTP **OPTIONS** requests to the given URL:
+
+    options '/resource' => sub { ... };
+
+## put
+
+Defines a route for HTTP **PUT** requests to the given URL:
+
+    put '/resource' => sub { ... };
+
+## redirect
+
+Generates a HTTP redirect (302).  You can either redirect to a complete
+different site or within the application:
+
+    get '/twitter', sub {
+        redirect 'http://twitter.com/me';
+    };
+
+You can also force Dancer to return a specific 300-ish HTTP response code:
+
+    get '/old/:resource', sub {
+        redirect '/new/'.params->{resource}, 301;
+    };
+
+It is important to note that issuing a redirect by itself does not exit and
+redirect immediately, redirection is deferred until after the current route
+or filter has been processed. To exit and redirect immediately, use the return
+function, e.g.
+
+    get '/restricted', sub {
+        return redirect '/login' if accessDenied();
+        return 'Welcome to the restricted section';
+    };
+
+## render\_with\_layout
+
+Allows a handler to provide plain HTML (or other content), but have it rendered
+within the layout still.
+
+This method is **DEPRECATED**, and will be removed soon. Instead, you should be
+using the `engine` keyword:
+
+    get '/foo' => sub {
+        # Do something which generates HTML directly (maybe using
+        # HTML::Table::FromDatabase or something)
+        my $content = ...;
+
+        # get the template engine
+        my $template_engine = engine 'template';
+
+        # apply the layout (not the renderer), and return the result
+        $template_engine->apply_layout($content)
+    };
+
+It works very similarly to `template` in that you can pass tokens to be used in
+the layout, and/or options to control the way the layout is rendered.  For
+instance, to use a custom layout:
+
+    render_with_layout $content, {}, { layout => 'layoutname' };
+
+## request
+
+Returns a [Dancer::Request](https://metacpan.org/pod/Dancer::Request) object representing the current request.
+
+See the [Dancer::Request](https://metacpan.org/pod/Dancer::Request) documentation for the methods you can call, for
+example:
+
+    request->referer;         # value of the HTTP referer header
+    request->remote_address;  # user's IP address
+    request->user_agent;      # User-Agent header value
+
+## send\_error
+
+Returns a HTTP error.  By default the HTTP code returned is 500:
+
+    get '/photo/:id' => sub {
+        if (...) {
+            send_error("Not allowed", 403);
+        } else {
+           # return content
+        }
+    }
+
+**WARNING** : Issuing a send\_error immediately exits the current route, and perform
+the send\_error. Thus, any code after a send\_error is ignored, until the end of the route.
+So it's not necessary anymore to use `return` with send\_error.
+
+    get '/some/route' => sub {
+        if (...) {
+            # we want to let the next matching route handler process this one
+            send_error(..);
+            # This code will be ignored
+            do_stuff();
+        }
+    };
+
+## send\_file
+
+Lets the current route handler send a file to the client. Note that
+the path of the file must be relative to the **public** directory unless you use
+the `system_path` option (see below).
+
+    get '/download/:file' => sub {
+        return send_file(params->{file});
+    }
+
+**WARNING** : Issuing a send\_file immediately exits the current route, and perform
+the send\_file. Thus, any code after a send\_file is ignored, until the end of the route.
+So it's not necessary anymore to use `return` with send\_file.
+
+    get '/some/route' => sub {
+        if (...) {
+            # we want to let the next matching route handler process this one
+            send_file(...);
+            # This code will be ignored
+            do_stuff();
+        }
+    };
+
+Send file supports streaming possibility using PSGI streaming. The server should
+support it but normal streaming is supported on most, if not all.
+
+    get '/download/:file' => sub {
+        return send_file( params->{file}, streaming => 1 );
+    }
+
+You can control what happens using callbacks.
+
+First, `around_content` allows you to get the writer object and the chunk of
+content read, and then decide what to do with each chunk:
+
+    get '/download/:file' => sub {
+        return send_file(
+            params->{file},
+            streaming => 1,
+            callbacks => {
+                around_content => sub {
+                    my ( $writer, $chunk ) = @_;
+                    $writer->write("* $chunk");
+                },
+            },
+        );
+    }
+
+You can use `around` to all get all the content (whether a filehandle if it's
+a regular file or a full string if it's a scalar ref) and decide what to do with
+it:
+
+    get '/download/:file' => sub {
+        return send_file(
+            params->{file},
+            streaming => 1,
+            callbacks => {
+                around => sub {
+                    my ( $writer, $content ) = @_;
+
+                    # we know it's a text file, so we'll just stream
+                    # line by line
+                    while ( my $line = <$content> ) {
+                        $writer->write($line);
+                    }
+                },
+            },
+        );
+    }
+
+Or you could use `override` to control the entire streaming callback request:
+
+    get '/download/:file' => sub {
+        return send_file(
+            params->{file},
+            streaming => 1,
+            callbacks => {
+                override => sub {
+                    my ( $respond, $response ) = @_;
+
+                    my $writer = $respond->( [ $newstatus, $newheaders ] );
+                    $writer->write("some line");
+                },
+            },
+        );
+    }
+
+You can also set the number of bytes that will be read at a time (default being
+42K bytes) using `bytes`:
+
+    get '/download/:file' => sub {
+        return send_file(
+            params->{file},
+            streaming => 1,
+            bytes     => 524288, # 512K
+        );
+    };
+
+The content-type will be set depending on the current MIME types definition
+(see `mime` if you want to define your own).
+
+If your filename does not have an extension, or you need to force a
+specific mime type, you can pass it to `send_file` as follows:
+
+    return send_file(params->{file}, content_type => 'image/png');
+
+Also, you can use your aliases or file extension names on
+`content_type`, like this:
+
+    return send_file(params->{file}, content_type => 'png');
+
+For files outside your **public** folder, you can use the `system_path`
+switch. Just bear in mind that its use needs caution as it can be
+dangerous.
+
+    return send_file('/etc/passwd', system_path => 1);
+
+If you have your data in a scalar variable, `send_file` can be useful
+as well. Pass a reference to that scalar, and `send_file` will behave
+as if there was a file with that contents:
+
+    return send_file( \$data, content_type => 'image/png' );
+
+Note that Dancer is unable to guess the content type from the data
+contents. Therefore you might need to set the `content_type`
+properly. For this kind of usage an attribute named `filename` can be
+useful.  It is used as the Content-Disposition header, to hint the
+browser about the filename it should use.
+
+    return send_file( \$data, content_type => 'image/png'
+                              filename     => 'onion.png' );
+
+Note that you should always use `return send_file ...` to stop execution of
+your route handler at that point.
+
+## set
+
+Defines a setting:
+
+    set something => 'value';
+
+You can set more than one value at once:
+
+    set something => 'value', otherthing => 'othervalue';
+
+## setting
+
+Returns the value of a given setting:
+
+    setting('something'); # 'value'
+
+## set\_cookie
+
+Creates or updates cookie values:
+
+    get '/some_action' => sub {
+        set_cookie name => 'value',
+                   expires => (time + 3600),
+                   domain  => '.foo.com';
+    };
+
+In the example above, only 'name' and 'value' are mandatory.
+
+You can also store more complex structure in your cookies:
+
+    get '/some_auth' => sub {
+        set_cookie oauth => {
+            token        => $twitter->request_token,
+            token_secret => $twitter->secret_token,
+            ...
+        };
+    };
+
+You can't store more complex structure than this. All keys in the HashRef
+should be Scalars; storing references will not work.
+
+See [Dancer::Cookie](https://metacpan.org/pod/Dancer::Cookie) for further options when creating your cookie.
+
+Note that this method will be eventually deprecated in favor of the
+new `cookie` method.
+
+## session
+
+Provides access to all data stored in the user's session (if any).
+
+It can also be used as a setter to store data in the session:
+
+    # getter example
+    get '/user' => sub {
+        if (session('user')) {
+            return "Hello, ".session('user')->name;
+        }
+    };
+
+    # setter example
+    post '/user/login' => sub {
+        ...
+        if ($logged_in) {
+            session user => $user;
+        }
+        ...
+    };
+
+You may also need to clear a session:
+
+    # destroy session
+    get '/logout' => sub {
+        ...
+        session->destroy;
+        ...
+    };
+
+If you need to fetch the session ID being used for any reason:
+
+    my $id = session->id;
+
+In order to be able to use sessions, first  you need to enable session support in
+one of the configuration files.  A quick way to do it is to add
+
+    session: "YAML"
+
+to config.yml.
+
+For more details, see [Dancer::Session](https://metacpan.org/pod/Dancer::Session).
+
+## splat
+
+Returns the list of captures made from a route handler with a route pattern
+which includes wildcards:
+
+    get '/file/*.*' => sub {
+        my ($file, $extension) = splat;
+        ...
+    };
+
+There is also the extensive splat (A.K.A. "megasplat"), which allows extensive
+greedier matching, available using two asterisks. The additional path is broken
+down and returned as an ArrayRef:
+
+    get '/entry/*/tags/**' => sub {
+        my ( $entry_id, $tags ) = splat;
+        my @tags = @{$tags};
+    };
+
+This helps with chained actions:
+
+    get '/team/*/**' => sub {
+        my ($team) = splat;
+        var team => $team;
+        pass;
+    };
+
+    prefix '/team/*';
+
+    get '/player/*' => sub {
+        my ($player) = splat;
+
+        # etc...
+    };
+
+    get '/score' => sub {
+        return score_for( vars->{'team'} );
+    };
+
+## start
+
+Starts the application or the standalone server (depending on the deployment
+choices).
+
+This keyword should be called at the very end of the script, once all routes
+are defined.  At this point, Dancer takes over control.
+
+## status
+
+Changes the status code provided by an action.  By default, an action will
+produce an `HTTP 200 OK` status code, meaning everything is OK:
+
+    get '/download/:file' => {
+        if (! -f params->{file}) {
+            status 'not_found';
+            return "File does not exist, unable to download";
+        }
+        # serving the file...
+    };
+
+In that example, Dancer will notice that the status has changed, and will
+render the response accordingly.
+
+The status keyword receives either a numeric status code or its name in
+lower case, with underscores as a separator for blanks - see the list in
+["HTTP CODES" in Dancer::HTTP](https://metacpan.org/pod/Dancer::HTTP#HTTP-CODES).
+
+## template
+
+Returns the response of processing the given template with the given parameters
+(and optional settings), wrapping it in the default or specified layout too, if
+layouts are in use.
+
+An example of a  route handler which returns the result of using template to 
+build a response with the current template engine:
+
+    get '/' => sub {
+        ...
+        return template 'some_view', { token => 'value'};
+    };
+
+Note that `template` simply returns the content, so when you use it in a route
+handler, if execution of the route handler should stop at that point, make
+sure you use 'return' to ensure your route handler returns the content.
+
+Since template just returns the result of rendering the template, you can also
+use it to perform other templating tasks, e.g. generating emails:
+
+    post '/some/route' => sub {
+        if (...) {
+            email {
+                to      => 'someone@example.com',
+                from    => 'foo@example.com',
+                subject => 'Hello there',
+                msg     => template('emails/foo', { name => params->{name} }),
+            };
+
+            return template 'message_sent';
+        } else {
+            return template 'error';
+        }
+    };
+
+Compatibility notice: `template` was changed in version 1.3090 to immediately
+interrupt execution of a route handler and return the content, as it's typically
+used at the end of a route handler to return content.  However, this caused
+issues for some people who were using `template` to generate emails etc, rather
+than accessing the template engine directly, so this change has been reverted
+in 1.3091.
+
+The first parameter should be a template available in the views directory, the
+second one (optional) is a HashRef of tokens to interpolate, and the third
+(again optional) is a HashRef of options.
+
+For example, to disable the layout for a specific request:
+
+    get '/' => sub {
+        template 'index', {}, { layout => undef };
+    };
+
+Or to request a specific layout, of course:
+
+    get '/user' => sub {
+        template 'user', {}, { layout => 'user' };
+    };
+
+Some tokens are automatically added to your template (`perl_version`,
+`dancer_version`, `settings`, `request`, `params`, `vars` and, if
+you have sessions enabled, `session`).  Check
+[Dancer::Template::Abstract](https://metacpan.org/pod/Dancer::Template::Abstract) for further details.
+
+## to\_dumper ($structure)
+
+Serializes a structure with [Data::Dumper](https://metacpan.org/pod/Data::Dumper).
+
+## to\_json ($structure, %options)
+
+Serializes a structure to JSON. Can receive optional arguments. Thoses arguments
+are valid [JSON](https://metacpan.org/pod/JSON) arguments to change the behaviour of the default
+`JSON::to_json` function.
+
+## to\_yaml ($structure)
+
+Serializes a structure to YAML.
+
+## to\_xml ($structure, %options)
+
+Serializes a structure to XML. Can receive optional arguments. Thoses arguments
+are valid [XML::Simple](https://metacpan.org/pod/XML::Simple) arguments to change the behaviour of the default
+`XML::Simple::XMLout` function.
+
+## true
+
+Constant that returns a true value (1).
+
+## upload
+
+Provides access to file uploads.  Any uploaded file is accessible as a
+[Dancer::Request::Upload](https://metacpan.org/pod/Dancer::Request::Upload) object. You can access all parsed uploads via:
+
+    post '/some/route' => sub {
+        my $file = upload('file_input_foo');
+        # file is a Dancer::Request::Upload object
+    };
+
+If you named multiple input of type "file" with the same name, the upload
+keyword will return an Array of Dancer::Request::Upload objects:
+
+    post '/some/route' => sub {
+        my ($file1, $file2) = upload('files_input');
+        # $file1 and $file2 are Dancer::Request::Upload objects
+    };
+
+You can also access the raw HashRef of parsed uploads via the current request
+object:
+
+    post '/some/route' => sub {
+        my $all_uploads = request->uploads;
+        # $all_uploads->{'file_input_foo'} is a Dancer::Request::Upload object
+        # $all_uploads->{'files_input'} is an ArrayRef of Dancer::Request::Upload objects
+    };
+
+Note that you can also access the filename of the upload received via the params
+keyword:
+
+    post '/some/route' => sub {
+        # params->{'files_input'} is the filename of the file uploaded
+    };
+
+See [Dancer::Request::Upload](https://metacpan.org/pod/Dancer::Request::Upload) for details about the interface provided.
+
+## uri\_for
+
+Returns a fully-qualified URI for the given path:
+
+    get '/' => sub {
+        redirect uri_for('/path');
+        # can be something like: http://localhost:3000/path
+    };
+
+## captures
+
+Returns a reference to a copy of `%+`, if there are named captures in the route
+Regexp.
+
+Named captures are a feature of Perl 5.10, and are not supported in earlier
+versions:
+
+    get qr{
+        / (?<object> user   | ticket | comment )
+        / (?<action> delete | find )
+        / (?<id> \d+ )
+        /?$
+    }x
+    , sub {
+        my $value_for = captures;
+        "i don't want to $$value_for{action} the $$value_for{object} $$value_for{id} !"
+    };
+
+## var
+
+Provides an accessor for variables shared between filters and route handlers.
+Given a key/value pair, it sets a variable:
+
+    hook before sub {
+        var foo => 42;
+    };
+
+Later, route handlers and other filters will be able to read that variable:
+
+    get '/path' => sub {
+        my $foo = var 'foo';
+        ...
+    };
+
+## vars
+
+Returns the HashRef of all shared variables set during the filter/route
+chain with the `var` keyword:
+
+    get '/path' => sub {
+        if (vars->{foo} eq 42) {
+            ...
+        }
+    };
+
+## warning
+
+Logs a warning message through the current logger engine:
+
+    warning "This is a warning";
+
+See [Dancer::Logger](https://metacpan.org/pod/Dancer::Logger) for details on how to configure where log messages go.
+
+# AUTHOR
+
+This module has been written by Alexis Sukrieh <sukria@cpan.org> and others,
+see the AUTHORS file that comes with this distribution for details.
+
+# SOURCE CODE
+
+The source code for this module is hosted on GitHub
+[https://github.com/PerlDancer/Dancer](https://github.com/PerlDancer/Dancer).  Feel free to fork the repository and
+submit pull requests!  (See [Dancer::Development](https://metacpan.org/pod/Dancer::Development) for details on how to
+contribute).
+
+Also, why not [watch the repo](https://github.com/PerlDancer/Dancer/toggle_watch)
+to keep up to date with the latest upcoming changes?
+
+# GETTING HELP / CONTRIBUTING
+
+The Dancer development team can be found on #dancer on irc.perl.org:
+[irc://irc.perl.org/dancer](irc://irc.perl.org/dancer)
+
+If you don't have an IRC client installed/configured, there is a simple web chat
+client at [http://www.perldancer.org/irc](http://www.perldancer.org/irc) for you.
+
+There is also a Dancer users mailing list available - subscribe at:
+
+[http://lists.preshweb.co.uk/mailman/listinfo/dancer-users](http://lists.preshweb.co.uk/mailman/listinfo/dancer-users)
+
+If you'd like to contribute to the Dancer project, please see
+[http://www.perldancer.org/contribute](http://www.perldancer.org/contribute) for all the ways you can help!
+
+# DEPENDENCIES
+
+The following modules are mandatory (Dancer cannot run without them):
+
+- [HTTP::Server::Simple::PSGI](https://metacpan.org/pod/HTTP::Server::Simple::PSGI)
+- [HTTP::Body](https://metacpan.org/pod/HTTP::Body)
+- [LWP](https://metacpan.org/pod/LWP)
+- [MIME::Types](https://metacpan.org/pod/MIME::Types)
+- [URI](https://metacpan.org/pod/URI)
+
+The following modules are optional:
+
+- [JSON](https://metacpan.org/pod/JSON) : needed to use JSON serializer
+- [Plack](https://metacpan.org/pod/Plack) : in order to use PSGI
+- [Template](https://metacpan.org/pod/Template) : in order to use TT for rendering views
+- [XML::Simple](https://metacpan.org/pod/XML::Simple) and [XML:SAX](XML:SAX) or [XML:Parser](XML:Parser) for XML serialization
+- [YAML](https://metacpan.org/pod/YAML) : needed for configuration file support
+
+# SEE ALSO
+
+Main Dancer web site: [http://perldancer.org/](http://perldancer.org/).
+
+The concept behind this module comes from the Sinatra ruby project,
+see [http://www.sinatrarb.com/](http://www.sinatrarb.com/) for details.
+
+# AUTHOR
+
+Dancer Core Developers
+
+# COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,381 @@
+This file contains message digests of all files listed in MANIFEST,
+signed via the Module::Signature module, version 0.73.
+
+To verify the content in this distribution, first make sure you have
+Module::Signature installed, then type:
+
+    % cpansign -v
+
+It will check each file's integrity, as well as the signature's
+validity.  If "==> Signature verified OK! <==" is not displayed,
+the distribution may already have been compromised, and you should
+not run its Makefile.PL or Build.PL.
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+SHA1 c0e8bb8f5aa5cea8b965a9ad8ae4161f9fa754bb AUTHORS
+SHA1 8f9aab2da3f4499ade7a7deadc095edd9d1f807c CONTRIBUTORS
+SHA1 64ab24cb54e17a2c5b2bf3c380c8e526046c39c9 Changes
+SHA1 c92c142aaf1bf7a92349eed6fda88b73d7997e58 INSTALL
+SHA1 275383eac567137660ff0ae7fd02ee0ac280093e LICENSE
+SHA1 587fd7ecab478af4cb8dbd514f3b1932ab67de16 MANIFEST
+SHA1 d2dbdcc3a13b3ae29987532e4b32acb56a6e612c META.json
+SHA1 d13a22bc401c5e804b81432afdb86ce092c3632a META.yml
+SHA1 c0696eac415f368a24cf5167bdfaca5c9fd37c04 Makefile.PL
+SHA1 e5d11bd1db63cb6c8c1a890e20a146332cab2ecc README
+SHA1 6d2b85113035131ee974be6c4b749e9992e1ce5f README.md
+SHA1 89762441decf19cdd0d307e6eb988fbbed2b2f64 README.mkdn
+SHA1 745d21c7f9311d8547044bc2ad0c917bdd3e82b0 bin/dancer
+SHA1 e2285b9f384abf24316a7eca92ea6efb9d095d6d cpanfile
+SHA1 81dcf180c947a778127452f3b44b8efaab26b09e doap.xml
+SHA1 e19c49d4dd13dbf412bfc8086504870b1e098400 examples/dancr/dancr.pl
+SHA1 6b3619a8f9863cbe7d9b930ccdc600a59bea23b0 examples/dancr/public/css/style.css
+SHA1 032c8339979911a154ab8c8a20f4913d899cc42e examples/dancr/schema.sql
+SHA1 34bea5468ec446923c42c23118312f585f9502f5 examples/dancr/views/layouts/main.tt
+SHA1 4fe3579f73ebd2d56f4f032555ec67f7d65f0ab9 examples/dancr/views/login.tt
+SHA1 34fb26677f2d969fb95d6704da8610606d5dffef examples/dancr/views/show_entries.tt
+SHA1 92cccb56ae511a974168be8fba38f3e277007e87 lib/Dancer.pm
+SHA1 7f1ee1960992a7ee0422f5de1983a8ff286530b6 lib/Dancer/App.pm
+SHA1 83e049ce50a307adbedb6f5182847bbd9c37b544 lib/Dancer/Config.pm
+SHA1 6e851edebd80caeb875b3972f0ac9231364524c5 lib/Dancer/Config/Object.pm
+SHA1 78744a360ad454bfb744c3da12a2c05887d9fb3a lib/Dancer/Continuation.pm
+SHA1 bb112b2b8e2c8598b58afd468ae3f183cf1f0cb8 lib/Dancer/Continuation/Halted.pm
+SHA1 defedc45449905b83568ebd864ae699568881369 lib/Dancer/Continuation/Route.pm
+SHA1 25967304bdaf8c44cfb34c680971743fd7217241 lib/Dancer/Continuation/Route/ErrorSent.pm
+SHA1 0b3a08c705dd5bdf9d9b5e1b101a75da091bc240 lib/Dancer/Continuation/Route/FileSent.pm
+SHA1 3043e1f2fe443f55b8cae866d8e0b535ebb8c47d lib/Dancer/Continuation/Route/Forwarded.pm
+SHA1 def560910ffee6b817c2d754e30224d43ef06886 lib/Dancer/Continuation/Route/Passed.pm
+SHA1 77f3cab63c4f6e6eb8c77f2dbdcccd44141bc3bd lib/Dancer/Continuation/Route/Templated.pm
+SHA1 592f9cc81b2b21bddbb76cfb14c3b99c69b40e64 lib/Dancer/Cookbook.pod
+SHA1 23848a38a7713c4180a9f43274c2cb789c2572ca lib/Dancer/Cookie.pm
+SHA1 f04a1a7aebcd9df3a2a545945e0b5df07bd93140 lib/Dancer/Cookies.pm
+SHA1 584ace10d91d9c27183154d6afe0bf7403cfaf39 lib/Dancer/Deployment.pod
+SHA1 aa8cd8c6b164f53f3527e6566d73b2817c9c5815 lib/Dancer/Deprecation.pm
+SHA1 985a829d2dec423827522f2122d57d6c7d409b55 lib/Dancer/Development.pod
+SHA1 cdc71ab9fbae187555f3573682c0a67576a0eb8a lib/Dancer/Development/Integration.pod
+SHA1 b0a795d0ccec4bdd1a35075fe1046d286f0b9e99 lib/Dancer/Engine.pm
+SHA1 ea4fa70754ba79bb8262b544ba7958e56c1582c7 lib/Dancer/Error.pm
+SHA1 29d413e812030852e9127ec331f9c2f4839cde67 lib/Dancer/Exception.pm
+SHA1 3e788ffadda5f924ce0a23124deca7d5504bd358 lib/Dancer/Exception/Base.pm
+SHA1 700dde48c234019b67c9eb00ed7a1458f35d84f1 lib/Dancer/Factory/Hook.pm
+SHA1 f701c883c9302a93908c8163a24a86fe8873b6de lib/Dancer/FileUtils.pm
+SHA1 200429a2bac46cf0a54accd9f1480583ccb950f5 lib/Dancer/GetOpt.pm
+SHA1 56f060085c84c428882c1ac613f4c0477ac7fb9b lib/Dancer/HTTP.pm
+SHA1 d4be46ffd39f2b8ca89ae236a6537e66eb8e6ece lib/Dancer/Handler.pm
+SHA1 95be99d2aa03d07fe5ece71920e0387ad67dcee7 lib/Dancer/Handler/Debug.pm
+SHA1 2447c79ca68a51b06dddbbc56b4e761ebdaf6522 lib/Dancer/Handler/PSGI.pm
+SHA1 1bb384bfcbf35a6f72ff357410a6cb836cf24091 lib/Dancer/Handler/Standalone.pm
+SHA1 ce1a4f7815664445c222c4109759869044b2684c lib/Dancer/Hook.pm
+SHA1 76f8e762ca8ec122f49fb5c8f6541f2d9c794087 lib/Dancer/Hook/Properties.pm
+SHA1 d68a81f1be101b1f321e8ff8598b214938dea138 lib/Dancer/Introduction.pod
+SHA1 f643b13e54ac6d8d54962545ff225f515b045b72 lib/Dancer/Logger.pm
+SHA1 9445291e56acb786167273bdbf407049fc4a7ca6 lib/Dancer/Logger/Abstract.pm
+SHA1 afde7eedd49c1ff139fcae1743b3dbca8d98e68d lib/Dancer/Logger/Capture.pm
+SHA1 ee12df8023c20ede9d66f6b2bbbb85de07584809 lib/Dancer/Logger/Capture/Trap.pm
+SHA1 ef38dc7bfd98989c8102c2f2eb212d68ca148cfc lib/Dancer/Logger/Console.pm
+SHA1 297003b1500c489b9d1fee45838524922fb84a63 lib/Dancer/Logger/Diag.pm
+SHA1 68bc29859063a66627320bd5060a23fba0dee6e3 lib/Dancer/Logger/File.pm
+SHA1 b73c61045a7661e151d11115fdfbf4d9f96b12ea lib/Dancer/Logger/Note.pm
+SHA1 196e4835ec8688c95479e922548e4d70c1385009 lib/Dancer/Logger/Null.pm
+SHA1 0615593c591623cbdf931149712b88f4755e3fda lib/Dancer/MIME.pm
+SHA1 0a7566fe6a73f445dc7755df2954d632ac8bd559 lib/Dancer/ModuleLoader.pm
+SHA1 fe0cdb01596cfe6d18339e4b2936f1187d458394 lib/Dancer/Object.pm
+SHA1 35d5ee7d35db645fa4f4a6024f44d9edf0979ff3 lib/Dancer/Object/Singleton.pm
+SHA1 42a6d274dbb586ba4cd47a42796496bde6dbd977 lib/Dancer/Plugin.pm
+SHA1 f787677d81fdd331d2b9bc672890fa04686d84d3 lib/Dancer/Plugin/Ajax.pm
+SHA1 faaf1ec339428cc6b50e774cb03c8a5beab41e6e lib/Dancer/Plugins.pod
+SHA1 8e5995cd06e5b1adf933ffbef17c421dfcce19b3 lib/Dancer/Renderer.pm
+SHA1 69f53641c720f1aac420480a1b01e4b625efd3ce lib/Dancer/Request.pm
+SHA1 366296e56a11e4bda48ccf10a71978219a1c0b88 lib/Dancer/Request/Upload.pm
+SHA1 7d9f700023a28f9e6a3492e968fcf0bd3dbd33b3 lib/Dancer/Response.pm
+SHA1 01e590ae912c3e56dac3fccbb5af4ff65ee8df4c lib/Dancer/Route.pm
+SHA1 d5d81b2f520703326bfa501e430d2ad872754cee lib/Dancer/Route/Cache.pm
+SHA1 217133cd353ab7ff5cdc9117aa31b3c78340ebbd lib/Dancer/Route/Registry.pm
+SHA1 38e90ca4926840fa4211d9df29bea97b5352e2f2 lib/Dancer/Serializer.pm
+SHA1 7cb1def7abba69ac63835e405f1972a9d7294b78 lib/Dancer/Serializer/Abstract.pm
+SHA1 43403f41f8d01550cf30bf55a96ba18fe291f427 lib/Dancer/Serializer/Dumper.pm
+SHA1 bcc429c852f9d20797b9e4452e6ee93647c86944 lib/Dancer/Serializer/JSON.pm
+SHA1 2c68813b483cfc2b489e886ffd93775dbf362dac lib/Dancer/Serializer/JSONP.pm
+SHA1 47e7f5427b2636ac7cfe5d45f2cf990515ad935a lib/Dancer/Serializer/Mutable.pm
+SHA1 be0731f2866aa98c3420de2860f964dc43bf94ee lib/Dancer/Serializer/XML.pm
+SHA1 41a69a57f4425d16f7fea6dbefc39cf083308d96 lib/Dancer/Serializer/YAML.pm
+SHA1 32bdaaee8f8df9ae995b0db83cc7550e43bd2f00 lib/Dancer/Session.pm
+SHA1 6f640754432df8350197bd4b77a7b0fb5bd26546 lib/Dancer/Session/Abstract.pm
+SHA1 b7d3c5532f30f93474008abfcf668c6800c8ec89 lib/Dancer/Session/Simple.pm
+SHA1 8825ae5afe853f15b2980b3b38339957ca555660 lib/Dancer/Session/YAML.pm
+SHA1 b7c905f79a744f07e42acdf68193c246b907c86b lib/Dancer/SharedData.pm
+SHA1 733e8ffd5381c40a62531f9fa04cce781742dc6f lib/Dancer/Template.pm
+SHA1 217e455934c671efc2f746cdfda4c57916558d30 lib/Dancer/Template/Abstract.pm
+SHA1 745ce996b1e1139f7c4e287ccdade713a65139c9 lib/Dancer/Template/Simple.pm
+SHA1 be18e605407df012bf84c3077d36cbe21d9b15bc lib/Dancer/Template/TemplateToolkit.pm
+SHA1 64935c4a7c5954926899b01ce4864a16a9c8b84b lib/Dancer/Test.pm
+SHA1 acd0f498fef55f400c61d3b92eef4611774feb70 lib/Dancer/Timer.pm
+SHA1 4c96189d673b5a49f5b459708248c2870c4f28cf lib/Dancer/Tutorial.pod
+SHA1 87c11571e4cff0129edfae1d76c841321087352d t/00-compile.t
+SHA1 e5d158c7b350ce4cae5602b7c5f80fce5be080bc t/000-report-versions-tiny.t
+SHA1 46cefc92d3cbc63e52889094bdbf3933fe30d774 t/00_base/000_create_fake_env.t
+SHA1 02dd4cb5807c9f64b03f6dddc2b8d9769be5e829 t/00_base/001_load.t
+SHA1 de96b9f9b5a62c84949145d410e048e1898a80f5 t/00_base/002_strict_and_warnings.t
+SHA1 e31841ced0f6b445dab81562a5ddd92e432e0038 t/00_base/003_syntax.t
+SHA1 4d54af4d67db5c0b64e8424f791e251dcb12dccd t/00_base/004_args.t
+SHA1 89479e4f21988652e26f11600d2bb5fe363cae1f t/00_base/005_module_loader.t
+SHA1 30e2766fa1725036b97fed8e9681b479a28936b9 t/00_base/007_load_syntax.t
+SHA1 e433f2c494ce2569cf5165bc61f43e30e1d08c32 t/00_base/008_export.t
+SHA1 64e4daf7e825254776006d355ba2e113ec615b42 t/00_base/009_syntax_export.t
+SHA1 915e79f19da10d7ee288d5f02683454f1b0e0e68 t/00_base/010_export_script.t
+SHA1 ac96fda1f92faafe335e02a082954123008221a2 t/00_base/06_dancer_object.t
+SHA1 779c555d8c4395320fd98ab73f3c2f874c5cfde4 t/00_base/08_pod_coverage_dancer.t
+SHA1 18263624613a4a300042a36aced462709e4da620 t/00_base/09_load_app.t
+SHA1 c752a8cbd7a324b8b1d01eb403058b771ab05aee t/00_base/11_file_utils.t
+SHA1 36989389f3411a45cbaf49bee63d71689477ae35 t/00_base/12_utf8_charset.t
+SHA1 b987be7bde2375a5f12b6198e4c2de701ada47ba t/00_base/13_dancer_singleton.t
+SHA1 726ec2f29c52639be922a94f0caf40efb7f238cc t/00_base/15_dependent_modules.t
+SHA1 0a269a87333f8a7e5f752dcce966483da8d917f2 t/00_base/16_version.t
+SHA1 f388549693e12f4035f140d0a7e48abf02c0392e t/00_base/17_globalwarnings_config_on.t
+SHA1 c67f1d84909a2727fe8e04f255bedc419d686f92 t/00_base/config.t
+SHA1 17f1247f4b6377c0536684899ef64e46e15b0ca5 t/00_base/lib/AppWithError.pm
+SHA1 06fd5c6b3b8e4bc8eaf95e0efe7fc613206ae65d t/00_base/lib/WorkingApp.pm
+SHA1 b48f4411edad1fc20d8d73d859e4dee3732219bd t/00_base/normalize_path.t
+SHA1 bf9309bb927157c45980ea8dc942691ca19622f8 t/00_base/optional-module-versions.t
+SHA1 10a74d04c27d93c967d8bf31e7c9be4fc9a4eb7d t/00_base/uri_for.t
+SHA1 7f5367793b75402cbf145f90fab896037b3c1047 t/00_base/utf8.tt
+SHA1 270b97fc067f156ba38af955b7e9dc83d4283944 t/00_base/views/unicode.tt
+SHA1 e605c0053b38cbbfa201d1f47c7294dc25fb9b91 t/01_config/01_settings.t
+SHA1 b6709ad38c1345c65fd31bbe7c8a7aa3ccdb587c t/01_config/02_mime_type.t
+SHA1 5de97e024623a76b10c08b548317da7a1399a6b0 t/01_config/03_logger.t
+SHA1 ba251ba2d7688cab79ff522e13c123171c8e385d t/01_config/04_config_file.t
+SHA1 dba325f28aeeed20760cecb43bd11b9e7bf5218d t/01_config/05_serializers.t
+SHA1 30536178b67cb68b2422444fa8fbcb70310165e4 t/01_config/06_config_api.t
+SHA1 b8a27b7b3a6a3169a75bc42ff6c05d11abb63c61 t/01_config/06_stack_trace.t
+SHA1 b369ebc74496e0d6e519006072f9d1fa31fbdce6 t/01_config/07_strict_config.t
+SHA1 2160fcbaeb8ed59b0e416bea1d15e480acc504a9 t/01_config/08_environments.t
+SHA1 209ca159a62ed05e5c827fa29a196403ff32b3a6 t/01_config/environments/development.pl
+SHA1 a1f7093820e50223019d4aced2d611f6a73e4b58 t/01_config/yaml_dependency.t
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/02_request/000_create_fake_env.t
+SHA1 a283b5769563be7bd2d313a3e19b7922f0286d26 t/02_request/01_load.t
+SHA1 040501df844e6c498480d965fc0e183cc574eb9f t/02_request/04_custom.t
+SHA1 4d21d7c762416f17888d69564be6abf1f987c3cb t/02_request/04_forward.t
+SHA1 4d0b32be00e43324f2ada459e8ea15abbf857692 t/02_request/05_cgi_pm_compat.t
+SHA1 5fa2d7374ab23ef6ba4f2064e9435342abfc5a41 t/02_request/06_init_env.t
+SHA1 400c71927167e82cd784f6f89b0592f18a7433df t/02_request/07_raw_data.t
+SHA1 f5c963db68adfb757930255dc3b6aea639bfe8c2 t/02_request/08_params.t
+SHA1 aa4c7906fc931cc707aceda1d89155b7f3380f06 t/02_request/10_mixed_params.t
+SHA1 4fd818065b8ce63822eeacc05a0a9266d3fa3c6a t/02_request/11_accessors.t
+SHA1 b90e2ccf069371b54ca143f0c899d93f354d7781 t/02_request/12_base.t
+SHA1 a9735c0f267cef06609d1ee0638a0133e4714086 t/02_request/13_ajax.t
+SHA1 f8bd2de42cd80f617ad3e898330f4f2757eb4d7c t/02_request/14_uploads.t
+SHA1 3f6757d10a98a98d7e36a5db18bab1e1d96eb38d t/02_request/15_headers.t
+SHA1 d2f51f7bb4647176d005d41b94d56f32ee8f78d1 t/02_request/16_delete.t
+SHA1 9c4f6e3821f5ab63576d47afeb011f1bd17fb86b t/02_request/17_uri_base.t
+SHA1 d2d489c7702efaaca0b01662c4d48daf47d2b914 t/02_request/18_param_accessor.t
+SHA1 a7aa807a62907ae2a02cf40b7875cbd2b3ba383f t/03_route_handler/01_http_methods.t
+SHA1 349d98bd7ae839fc088ae0f3f2cd73d214f1a9ab t/03_route_handler/02_params.t
+SHA1 b512f9ca1d106fe1fffb03f90067f396e9501310 t/03_route_handler/03_routes_api.t
+SHA1 d98bf3f43136fd2f0db491637d8cc10e823afdc9 t/03_route_handler/04_routes_matching.t
+SHA1 5d68d48dbb7374e15572305b042138ad1c89b734 t/03_route_handler/04_wildcards_megasplat.t
+SHA1 49298131eaeadf4bad404478f49fd0b15448e798 t/03_route_handler/05_filter.t
+SHA1 329c37de06c6aabfa86f5b26c649c4d8d98dbf2b t/03_route_handler/05_unicode.t
+SHA1 3fdbbc372ac511105f219cf6f09a6b6a63323898 t/03_route_handler/06_redirect.t
+SHA1 60358381c96d70d37b22ff0561ea28b0474f4484 t/03_route_handler/07_compilation_warning.t
+SHA1 27e5ba5e7635d8aef8f158163f64c61f7c83813e t/03_route_handler/08_errors.t
+SHA1 c92051505e49708b924491f691200930091f5b1e t/03_route_handler/12_response.t
+SHA1 1fe224f42e51098865d16708d8af39ea3bcee744 t/03_route_handler/12_response_halt.t
+SHA1 13e52da24f61161d1b3baa897508a5927db3cd04 t/03_route_handler/14_options.t
+SHA1 3d1554b10eb6063b3d7dd9e58d655bda4a5f3b1c t/03_route_handler/15_prefix.t
+SHA1 fa45bbb6c694e9c7e5b39330aa4282cf0589716c t/03_route_handler/16_caching.t
+SHA1 83ad29e1bace8db0ce909b267a24b3787162a19c t/03_route_handler/16_embedded_prefixes.t
+SHA1 02ead6368fa724c13366cf3037bfe9830c0a04ed t/03_route_handler/18_auto_page.t
+SHA1 b1b899667358a31a607951db3d81e7de8592b775 t/03_route_handler/21_ajax.t
+SHA1 2810644852dc97fd7323ea7739b0e4b24303e6c6 t/03_route_handler/23_filter_error_catching.t
+SHA1 c316cce446d327adb3224bf033f18884fe35d289 t/03_route_handler/24_multiple_params.t
+SHA1 ab84bece2e72405535d0bb8e3ed7111993fbe6ce t/03_route_handler/24_named_captures.t
+SHA1 106130e9c640cb7ffade71fa34780effd0dc994d t/03_route_handler/28_plack_mount.t
+SHA1 f6f6a86ea19a1a7553c67f20ae8349a6779c2287 t/03_route_handler/29_forward.t
+SHA1 200394099cef2971ddfee492368e1891be9b8e23 t/03_route_handler/29_redirect_immediately.t
+SHA1 e800621df2f2ca19635375b799b9b311f07c941c t/03_route_handler/30_forward_session.t
+SHA1 64c85b498ba497c9cdee0e0ab26c23760f8dae18 t/03_route_handler/31_infinite_loop.t
+SHA1 0221ad564613fb8c12c6db0d8b248b27d7590948 t/03_route_handler/33_vars.t
+SHA1 e0b6b1802796975b9825ec3968fe95932ddcfda7 t/03_route_handler/34_forward_body_post.t
+SHA1 b473bad70bbcc1e75c57ec0f87c74218709d6785 t/03_route_handler/35_no_further_routes.t
+SHA1 d7f7bc381610503c7d578465a075087fb24db798 t/03_route_handler/36_false_routes.t
+SHA1 ad6d5159bcefd40ddf64b12e203d52fb069f16f6 t/03_route_handler/99_bugs.t
+SHA1 86eb9651e96aaff213950b07551bcc7e11e8e3b2 t/03_route_handler/public/404.html
+SHA1 5ea144c205dff1a6d34df8e1253acbcd516a7b7f t/03_route_handler/public/utf8file.txt
+SHA1 d80fcdca2b538d95e29cc500799fabba69aa8a01 t/03_route_handler/views/error.tt
+SHA1 391f7abfca1124c3ca937e5f85687352bcd9f261 t/03_route_handler/views/foo/bar.tt
+SHA1 14fdf81fbfdb6b0636cff06f8975a8802c95f6e8 t/03_route_handler/views/foo/index.tt
+SHA1 1d229271928d3f9e2bb0375bd6ce5db6c6d348d9 t/03_route_handler/views/hello.tt
+SHA1 7a50d84a6b597511aff5c8b1438b14e09f86db4b t/04_static_file/001_base.t
+SHA1 f5f5c549b86f30362b100abadb5bf7d1acdb7761 t/04_static_file/003_mime_types_reinit.t
+SHA1 3a7f3d0c1aa38a09a6f3a90e1e562d846581e711 t/04_static_file/01_mime_types.t
+SHA1 1c18b5f923da8492e0aa71400fc82c6e7095fae7 t/04_static_file/02_dir_traversal.t
+SHA1 9e4b9a36f409525318439c00efb720387ff39432 t/04_static_file/secretfile
+SHA1 d4322d1d18549a84abb5e19558784d819785a884 t/04_static_file/static/hello.foo
+SHA1 55e82e1eb131597ce6ef77ff775b2c2e5f4d6b45 t/04_static_file/static/hello.txt
+SHA1 1ec5e121433f2ce284ab01a4be3c47d47625fef2 t/05_views/002_view_rendering.t
+SHA1 be83eb0cc3ed934a25ed507f5ba2e5abf5e8f207 t/05_views/03_layout.t
+SHA1 3827a21528d8d3635b956f31df05338d1672633b t/05_views/views/clock.tt
+SHA1 3d4bee676b1a7b1c3c64f3d676301aac9e3328bc t/05_views/views/index.tt
+SHA1 caa706cc61bad0cac401d13aa9792423ac9a0854 t/05_views/views/layouts/custom.tt
+SHA1 9c9ee1656af57e6526abb4b44254da9072b7ca6a t/05_views/views/layouts/main.tt
+SHA1 b5d2da2a35fe5f46535b6ab8b4b99d2734c12a05 t/05_views/views/request.tt
+SHA1 e03aa60f8dd57eeda041a46d24fa7c8f29dd8efa t/05_views/views/t03.tt
+SHA1 4f4e7e0cec04764bb75c950d1060aeb593d14927 t/05_views/views/vars.tt
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/06_helpers/000_create_fake_env.t
+SHA1 e48533f29853968871b44ce38f8c86666e4a8509 t/06_helpers/01_send_file.t
+SHA1 05417b5d72eb928cd3fcdbc40d99d910864305f4 t/06_helpers/02_http_status.t
+SHA1 3951346f81bf22afb1aa03b9f35f99272f3fc1d0 t/06_helpers/03_content_type.t
+SHA1 2dfff3b7afac9c63ba763a86130c27e758a88704 t/06_helpers/04_status.t
+SHA1 cabf69eb7d98890e7e5b933d8a32ea9e643d7073 t/06_helpers/05_send_error.t
+SHA1 e05cc5d2e798024319b32bf3cb189e3df175fbd5 t/06_helpers/06_load.t
+SHA1 dae780eee1cb1f231a937e7e475c90f5d62ac594 t/06_helpers/public/file.txt
+SHA1 53b296b8011aef6d0c08815e72fbd7d1fe7f7cd0 t/06_helpers/routes.pl
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/07_apphandlers/000_create_fake_env.t
+SHA1 37ed6cfed028fd45a6654ec636569b869579ffe3 t/07_apphandlers/01_base.t
+SHA1 a752c91c72ce83d21c0f18d04a48b892fc843b59 t/07_apphandlers/02_apache2_plack.t
+SHA1 a4e564f0b1e87c5f32ce1d48e60e96f63e1555dd t/07_apphandlers/03_psgi_app.t
+SHA1 6fe57cc5ab3df62a2a2066e2c70842e5d81e541c t/07_apphandlers/04_standalone_app.t
+SHA1 1ce56d07256e9c7f1ac452ac11df6f6f609ad8a0 t/07_apphandlers/05_middlewares.t
+SHA1 1978c144ea8f6654ca50c1dea6f24375b701bba6 t/07_apphandlers/05_psgi_api.t
+SHA1 640dffd64f6fdfe35e17c6477daedafadeb4482f t/07_apphandlers/06_debug.t
+SHA1 245918a9bc413e5a27ee654234405845dd9b2cb8 t/07_apphandlers/07_middleware_map.t
+SHA1 57478bde8466c306d649dd01164c7846eba2652d t/07_apphandlers/08_is_text.t
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/08_session/000_create_fake_env.t
+SHA1 41ce5a4891eb97b1c95472913a896c3d8b55eb10 t/08_session/01_load.t
+SHA1 398a161f7302a9ae551015a5c2d0c6e1606152d4 t/08_session/02_dependency_check.t
+SHA1 5f86635c2db2b58da554fb1d3ea55744afdfa013 t/08_session/03_http_requests.t
+SHA1 e3ec6da2cf28d5e27720954cda6215582d6e8738 t/08_session/04_api.t
+SHA1 2db67899aa698f20064bd07fad2581078a502ed4 t/08_session/05_yaml.t
+SHA1 c3b85bacdc16dccc25f97e1d24f1c000fb9b55f4 t/08_session/06_abstract.t
+SHA1 3a1250750a0367650a05fe909c16c247886a4001 t/08_session/07_session_expires.t
+SHA1 f14c93946616a6923bff06cb836462229747e8e1 t/08_session/08_simple.t
+SHA1 b03d81b5bd4d9bcee9a19bbf64c46f1130f7ff75 t/08_session/09_session.t
+SHA1 f37a1a84341451703b81da8759b04c10e6e61244 t/08_session/10_filter.t
+SHA1 49187643bbb0972aa18103dbb17d08b2e2b23c99 t/08_session/11_session_secure.t
+SHA1 36c62aa93eb7d622e88f431531cd3c5856cdcae6 t/08_session/12_session_name.t
+SHA1 1b51cf7a28e6aa1e267400b64b427e1040dea296 t/08_session/13_session_httponly.t
+SHA1 b7e2e328fc37cbf9337e60aee9468484b47b57c9 t/08_session/14_session_domain.t
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/09_cookies/000_create_fake_env.t
+SHA1 6805a37787ea477f18fee394517156bc7bd47f58 t/09_cookies/01_use.t
+SHA1 164ed6e11c014d45efefc6c6d584ab388d12f3be t/09_cookies/02_cookie_object.t
+SHA1 10a5f6b0a95da402138fec74515f5eefe82d6a34 t/09_cookies/03_persistence.t
+SHA1 0ba76145c9ce5956cfdd41fec49ae407fcd1b269 t/09_cookies/04_secure.t
+SHA1 2c65601f6aa964b4c56afb248abfc44e27d46891 t/09_cookies/05_api.t
+SHA1 72ad024130f60b87c6e34aec11451db9d479deec t/09_cookies/06_expires.t
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/10_template/000_create_fake_env.t
+SHA1 b83ce54820ded19dc997be23391a8132de8db975 t/10_template/01_factory.t
+SHA1 a65bbd830839458868ab66f0bd1bd2c4821e5265 t/10_template/02_abstract_class.t
+SHA1 60c41b212226e059e80f61649c92bc01729f8d38 t/10_template/03_simple.t
+SHA1 6ffb4c5f8951aa7081e2fe5bb9ffcbb552bbfc9e t/10_template/05_template_toolkit.t
+SHA1 2c28475161a7c6f3bb69ae4d70375b04c9bec0e7 t/10_template/extension.t
+SHA1 564d633d62d3834b60477c09128925b5a6250a32 t/10_template/index.txt
+SHA1 192f109769c78990fcbdef221f28840b305dc664 t/10_template/template.t
+SHA1 740910018d6415e34875521b646f0d1711445eb4 t/10_template/views/index.ts
+SHA1 608b297d89b896a321a37b0fcc19741d77f76fe4 t/10_template/views/index.tt
+SHA1 6b9eb46415a79a6e32a9f2a3e0f79e0240f7a2a4 t/10_template/views/layouts/main.ts
+SHA1 6b9eb46415a79a6e32a9f2a3e0f79e0240f7a2a4 t/10_template/views/layouts/main.tt
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/11_logger/000_create_fake_env.t
+SHA1 b400007ed7390c94b81d02cd9850a2cfb6d9b544 t/11_logger/01_abstract.t
+SHA1 06bbdec8564efa6ce9d6ed14b08ee3288b5fb1c0 t/11_logger/02_factory.t
+SHA1 750a2cf4578e97cdf5687f1af30d70b79565855f t/11_logger/03_file.t
+SHA1 266826fd63e8e42bc11e8745bbf4199fdc9c8e5d t/11_logger/04_console.t
+SHA1 ccb2b4f342727bff9cf59fef391aebdc013ea893 t/11_logger/05_format.t
+SHA1 ee3bff9dc97b6839617cc3aa52d4297f5949490f t/11_logger/06_null.t
+SHA1 837c6bb21f0a96986b897427a29c17ef9bf1ba6f t/11_logger/07_diag.t
+SHA1 82d48a33e39a243a59e8d9a912d5e35f846dc6d6 t/11_logger/08_serialize.t
+SHA1 3d0cdb42d401eab2b7f4dcdcc682e680dd583e1a t/11_logger/09_capture.t
+SHA1 56836ae818322c7772a20d77f1641f414c77541e t/11_logger/10_note.t
+SHA1 39670ae33228e4e70276a866e7ec54f7c52b18ef t/11_logger/11_runtime_file.t
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/12_response/000_create_fake_env.t
+SHA1 2abb2a919b0487e4686947c121f674ba001df3c0 t/12_response/01_CRLF_injection.t
+SHA1 6a7a7b71bdc958ec50841f396bf93fc10b050bc9 t/12_response/02_headers.t
+SHA1 dbaae5275a92dec2d017cef0a515dda1dbd28f2e t/12_response/03_charset.t
+SHA1 e54a9580c1f7c91b5a475823fe1f2273d5bcef21 t/12_response/04_charset_server.t
+SHA1 d4dabc2f2c0d6efd7644137cc52fed4505864abf t/12_response/05_api.t
+SHA1 044d99ab2169a27d05daf2f52ac39c59de67ae61 t/12_response/06_filter_halt_status.t
+SHA1 b64d784aa0c4f579d061de247ebd3d2dba7bba59 t/12_response/07_cookies.t
+SHA1 06824392e6f6c40731b164c5f5364c096a17c335 t/12_response/08_drop_content.t
+SHA1 78a178b2f3951fa81b721deddd254041c44b48bb t/12_response/09_headers_to_array.t
+SHA1 138ba88b5e0b602676b705b907b52c8db6180e38 t/12_response/10_error_dumper.t
+SHA1 2e60f16e834807f27834309022ea8c3f18d93946 t/12_response/10_error_dumper_without_clone.t
+SHA1 1b59a0c1b2d59613c29e5b741c0d55e93b8f793a t/12_response/11_CVE-2012-5572.t
+SHA1 50ccc87e05aa9f741a98519afdf4f2f14260a2fc t/13_engines/00_load.t
+SHA1 8bd22bf97b63d5daefa95a9e4ffc34c21cf6a6be t/13_engines/02_template_init.t
+SHA1 0f24bd44201522d5489931c1c38a84c5f7aad9b3 t/14_serializer/01_helpers.t
+SHA1 28b75a2c83b277d186c5c4d259761481ea2acb63 t/14_serializer/02_request_json.t
+SHA1 c03c4d4848d21037a46c54775c1bb96f130d0ae4 t/14_serializer/03_request_yaml.t
+SHA1 591b8c928146479b3e64efcf046287de5b22f628 t/14_serializer/04_request_xml.t
+SHA1 215da45731c8c839db48e803b3f44b7f195dc689 t/14_serializer/05_request_mutable.t
+SHA1 0ab3a9cadefc1c0803d0d55710975169bf2ec300 t/14_serializer/06_api.t
+SHA1 ec8ee83acc77c374687088050b810fa24000f25a t/14_serializer/07_request_jsonp.t
+SHA1 75a947fffc747d9ae16f740a82928d4fca6f4a91 t/14_serializer/17_clear_serializer.t
+SHA1 e77210dfe54b34b5cefe4c49620e80e0a67761e6 t/14_serializer/18_mutable_template_or_serialize.t
+SHA1 13d1b30b5396f03c0cb03ab54b2027ca8da72e50 t/14_serializer/99_bugs.t
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/15_plugins/000_create_fake_env.t
+SHA1 aebb989cd38d7eaaaab1453d89939f2f32cbb2a3 t/15_plugins/01_register.t
+SHA1 1d826b3ff9b062b3e96eceab257d36bdccee3cff t/15_plugins/02_config.t
+SHA1 1717b56c913bd2bb57ce57e288068c8e2752a277 t/15_plugins/03_namespace.t
+SHA1 cec2f5b168ba10fae0aee168e600ec25a5a00122 t/15_plugins/04_apps_and_plugins.t
+SHA1 b018c73253a86fa0d6b356f7974314350a4d4004 t/15_plugins/05_keywords.t
+SHA1 efab8c144b8e3dfb5a43fe23d0173a02e04d92eb t/15_plugins/05_plugins_and_OO.t
+SHA1 9ba32012b956f51e4ee261569583efb051abce7d t/15_plugins/05b_plugins_and_c3.t
+SHA1 b05c21584c6607ffcb6b4b0f7c508205ac820b47 t/15_plugins/06_hook.t
+SHA1 89d39f3887c4d7b93c357ec84d290ac3b198f24e t/15_plugins/07_ajax_plack_builder.t
+SHA1 fba07ce293cf7ace764d1e2d32978064b9e51a07 t/16_timer/00_base.t
+SHA1 6165fe8a6b998c9862e7e15a8100316d044f033f t/17_apps/000_create_fake_env.t
+SHA1 88ae952a6276e2ce75e1abb36d52853432d0427e t/17_apps/00_base.t
+SHA1 41a34f6e10709d8963495bb6233c7f47d6a81d2e t/17_apps/01_settings.t
+SHA1 610dcf46f440c6cad3d37db9d41f641daf97f25f t/17_apps/02_load_app.t
+SHA1 67690e30106d1a06d75a1153c945dff16a21c89c t/17_apps/03_prefix.t
+SHA1 8dfb070c99a58fd636d8d90c9125ca3eb0dc84ed t/17_apps/05_api.t
+SHA1 6047e63f293a54cac8637b51a5ce000b9924b311 t/19_dancer/01_script.t
+SHA1 85840c1dfb21a80f0f2f34b9d7f517085b1dc25f t/19_dancer/02_script_version_from.t
+SHA1 85eb39994049ba5bfc88eb629856e71af333dfe8 t/20_deprecation/01_api.t
+SHA1 0c60da8aee16bdae12f14b4fd9811f0d0b3b654c t/21_dependents/Dancer-Session-Cookie.t
+SHA1 bc1406fccfe14ff74be96abcf01ce702618314fa t/22_hooks/00_syntax.t
+SHA1 7e2d8b2387dc47d88667e8182be40feea53ea177 t/22_hooks/01_api.t
+SHA1 b1a6705cf28e93fb1b0027c76a3c16317884f116 t/22_hooks/02_before.t
+SHA1 76e5fa3a322b2288901631f4cb67950f8983d3fa t/22_hooks/03_after.t
+SHA1 b2287bdc9c31bdc420bf3aa285d3510c9bdc9cc9 t/22_hooks/04_template.t
+SHA1 dac993436a3c199675447fe162ebb8adfa27b8ef t/22_hooks/05_layout.t
+SHA1 7ef14549c54e1a7f03aae3ebab23c91ac937fead t/22_hooks/06_serializer.t
+SHA1 3787796427e527c8b32e9d216a495f9a8633446d t/22_hooks/07_file.t
+SHA1 7b31b2399dfa84dac863ddb66b03602f5d47ec0c t/22_hooks/08_error.t
+SHA1 4703f56bbd7bfe8d2b436f594a428810f355af0f t/22_hooks/09_before_error_init.t
+SHA1 b5fb766be3fa3d52120cd9ff47fc0cc49be601f9 t/22_hooks/10_error_in_hook.t
+SHA1 f2a378a9922fb84f20c4493bbd443e11525464f1 t/22_hooks/11_error_in_hook.t
+SHA1 608b297d89b896a321a37b0fcc19741d77f76fe4 t/22_hooks/views/index.tt
+SHA1 14645f6d037520fcac944de34a10ff839696aa2a t/22_hooks/views/layouts/main.tt
+SHA1 98e6f5a71fa8432fda2cde771a7f47a930475f78 t/23_dancer_tests/01_basic.t
+SHA1 b2a24abe9a0615f791b2d6a1337e49ba464a100e t/23_dancer_tests/02_tests_functions.t
+SHA1 b8dd7cbef5a1acf098a952fca489e02463987641 t/23_dancer_tests/03_uris.t
+SHA1 b2306a89d48b0d14581083258d1a2eccc75214cf t/24_deployment/01_multi_webapp.t
+SHA1 a6b480c5ccb2052193f61b20c07a19852de95be7 t/25_exceptions/01_exceptions.t
+SHA1 694e0d1118012a866e1f43702ad37e99247f6f7d t/25_exceptions/02_exceptions.t
+SHA1 d736bbde9ef96407263a828dd184497f6442cadd t/25_exceptions/03_exceptions.t
+SHA1 06c86fba6fef0e902a4b872344b912e0477d5ba5 t/25_exceptions/04_exceptions_warn.t
+SHA1 808ddc4c6032594be6790202f2486d493e2b36f0 t/25_exceptions/views/error.tt
+SHA1 608b297d89b896a321a37b0fcc19741d77f76fe4 t/25_exceptions/views/index.tt
+SHA1 14645f6d037520fcac944de34a10ff839696aa2a t/25_exceptions/views/layouts/main.tt
+SHA1 d425e6a1438b1016270b317115a6ccd266e84633 t/TestAppExt.pm
+SHA1 77182d4f0e99a5c580cd0c572f82172b029ca562 t/TestPlugin.pm
+SHA1 45958e031cc9943c02f126d07ea7bd89f42c6065 t/lib/EasyMocker.pm
+SHA1 023a584930d37bac51cf87418ee31571bc57fbbd t/lib/Forum.pm
+SHA1 1c2f26fded78cbd125dabcb131eee4d8f77d3e22 t/lib/Hookee.pm
+SHA1 560c1e355f3b54930593e906ef24abe22a13d99f t/lib/LinkBlocker.pm
+SHA1 75ed97a517bcced0c1754f75aac7f17d629d689c t/lib/TestApp.pm
+SHA1 faa7e6efca33a7be924da12da10e2609cb20759b t/lib/TestAppUnicode.pm
+SHA1 16970a1333ff40299e5a1a8e6af5809c9c42c213 t/lib/TestPlugin.pm
+SHA1 9ad2965176342301cbef7b72974baa7c4dbcf835 t/lib/TestPlugin2.pm
+SHA1 0edb6d6df738023e9b622788f3af6ea3f14d4858 t/lib/TestPluginMRO.pm
+SHA1 b8b99d54963236fce2761766f7f64ea5f6a098d6 t/lib/TestUtils.pm
+SHA1 fef2d62067b5ef73a478fe292e04fda63ecfaeb2 t/manifest.t
+SHA1 03fa873f29b4ead7b103c5b81666d35b76667129 t/pod.t
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1
+
+iEYEARECAAYFAlQXkA8ACgkQ34Hwf+GwC4yebQCg+llampAKetLuTpdnv4Uf3/xE
+S3YAnijPu2UCxRtur/ylymPtUuuw2Fpd
+=fMvb
+-----END PGP SIGNATURE-----
@@ -1,26 +0,0 @@
-                                TODO
-
-
-            This is the roadmap of upcoming developments
-
-* see http://github.com/sukria/dancer/issues#issue/125
-
-* headers (a sane Dancer::Header class for all headers, for D::H::PSGI, * D::H::Standalone, D::Request, D::Response);
-* rework the concept of D::Engines so we can have multiple D::Serializers loaded at once
-* possibility to define a serializer for a route, a list of routes, in a route (locally), ...
-* <dams> : nothing should be more global than to a Dancer app. Dancer should not become a bloated MVC, but to be pragmmatic :
-  * a Dancer app should have at most only one template engine attached to it
-  * a Dancer app should have at most only one session engine attached to it
-  * a Dancer app should be able to have multiple serializer attached to it
-* <dams> : config should be changed so that
-  * template, session, serializer defined would be by default global.
-  * if specified in the config, templates and sessions could be set per app
-  * if specified in the config, serializers could be set per app and routes.
-* <dams> : the serializer keyword should limit the serializer scope the route (if used inside a route definition) or to the app (if used outside of a route definition)
-* <dams> : Change Dancer::Plugin API : Dancer::Plugin::Foo should inherit from Dancer::Plugin themselves.
-
-* <ambs> : Dancer::Error could be rewritten to use dancer::object attributes.
-
-
-[ Tests ]
-
@@ -0,0 +1,1411 @@
+#!/usr/bin/perl
+
+#PODNAME: dancer
+#ABSTRACT: helper script to create new Dancer applications
+
+use strict;
+use warnings;
+use Dancer::Template::Simple;
+use File::Basename 'basename', 'dirname';
+use File::Path 'mkpath';
+use File::Spec::Functions;
+use Getopt::Long;
+use Pod::Usage;
+use Dancer::Renderer;
+use LWP::UserAgent;
+use constant FILE => 1;
+
+# options
+my $help = 0;
+my $do_check_dancer_version = 1;
+my $name = undef;
+my $path = '.';
+
+sub templates($);
+sub app_tree($);
+sub create_node($;$);
+
+GetOptions(
+    "h|help"          => \$help,
+    "a|application=s" => \$name,
+    "p|path=s"        => \$path,
+    "x|no-check"      => sub { $do_check_dancer_version = 0 },
+    "v|version"       => \&version,
+) or pod2usage( -verbose => 1 );
+
+# main
+my $PERL_INTERPRETER = -r '/usr/bin/env' ? '#!/usr/bin/env perl' : "#!$^X";
+
+pod2usage( -verbose => 1 ) if $help;
+pod2usage( -verbose => 1 ) if not defined $name;
+pod2usage( -verbose => 1, -msg => "directory '$path' does not exist" )  unless -d $path;
+pod2usage( -verbose => 1, -msg => "directory '$path' is not writable" ) unless -w $path;
+sub version {require Dancer; print 'Dancer ' . $Dancer::VERSION . "\n"; exit 0;}
+
+validate_app_name($name);
+
+my $DO_OVERWRITE_ALL = 0;
+my $DANCER_APP_DIR   = get_application_path($path, $name);
+my $DANCER_SCRIPT    = get_script_path($name);
+my ($LIB_FILE, $LIB_PATH) = get_lib_path($name);
+
+my $AUTO_RELOAD = eval "require Module::Refresh and require Clone" ? 1 : 0;
+
+require Dancer;
+my $DANCER_VERSION   = $Dancer::VERSION;
+
+version_check() if $do_check_dancer_version;
+safe_mkdir($DANCER_APP_DIR);
+create_node( app_tree($name), $DANCER_APP_DIR );
+
+unless (eval "require YAML") {
+    print <<NOYAML;
+*****
+WARNING: YAML.pm is not installed.  This is not a full dependency, but is highly
+recommended; in particular, the scaffolded Dancer app being created will not be
+able to read settings from the config file without YAML.pm being installed.
+
+To resolve this, simply install YAML from CPAN, for instance using one of the
+following commands:
+
+  cpan YAML
+  perl -MCPAN -e 'install YAML'
+  curl -L http://cpanmin.us | perl - --sudo YAML
+*****
+NOYAML
+}
+
+# subs
+
+sub validate_app_name {
+    my $name = shift;
+
+    die "$name is an already existing module, please pick a different name for your application.\n"
+        if grep { -f join '/', $_, $name . '.pm' } @INC;
+
+    return unless $name =~ /[^\w:]/ 
+               or $name =~ /^\d/ 
+               or $name =~ /\b:\b|:{3,}/;
+
+    die <<"END_DIE" 
+Error: Invalid application name '$name'
+Application names must not contain single colons, dots, hyphens or start with a number.
+END_DIE
+
+}
+
+sub get_application_path {
+    my ($path, $app_name) = @_;
+    catdir($path, _dash_name($app_name));
+}
+
+sub get_lib_path {
+    my $name = shift;
+    my @lib_path = split('::', $name);
+    my ($lib_file, $lib_path) = (pop @lib_path) . ".pm";
+    $lib_path = join('/', @lib_path);
+    $lib_path .= '/' if length $lib_path;
+    return ($lib_file, $lib_path);
+}
+
+sub get_script_path {
+    _dash_name(shift);
+}
+
+sub _dash_name {
+    my $name = shift;
+    $name =~ s/\:\:/-/g;
+    $name;
+}
+
+sub create_node($;$) {
+    my ($node, $root) = @_;
+    $root ||= '.';
+
+    my $manifest_name = catfile($root => 'MANIFEST');
+    open my $manifest, ">", $manifest_name or die $!;
+
+    # create a closure, so we do not need to get $root passed as
+    # argument on _create_node
+    my $add_to_manifest = sub {
+        my $file = shift;
+        $file =~ s{^$root/?}{};
+        print $manifest "$file\n";
+    };
+
+    $add_to_manifest->($manifest_name);
+    _create_node($add_to_manifest, $node, $root);
+    close $manifest;
+}
+
+sub _create_node {
+    my ($add_to_manifest, $node, $root) = @_;
+
+    my $templates = templates($name);
+
+    while ( my ($path, $content) = each %$node ) {
+        $path = catfile($root, $path);
+
+        if (ref($content) eq 'HASH') {
+            safe_mkdir($path);
+            _create_node($add_to_manifest, $content, $path);
+        } elsif (ref($content) eq 'CODE') {
+            # The content is a coderef, which, given the path to the file it
+            # should create, will do the appropriate thing:
+            $content->($path);
+            $add_to_manifest->($path);
+       } else {
+            my $file = basename($path);
+            my $dir  = dirname($path);
+            my $ex = ($file =~ s/^\+//); # look for '+' flag (executable)
+            my $template = $templates->{$file};
+
+            $path = catfile($dir, $file); # rebuild the path without the '+' flag
+            write_file($path, $template, {appdir => File::Spec->rel2abs($DANCER_APP_DIR)});
+            chmod 0755, $path if $ex;
+            $add_to_manifest->($path);
+        }
+    }
+}
+
+sub app_tree($) {
+    my ($appname) = @_;
+
+    return {
+        "Makefile.PL"        => FILE,
+        "MANIFEST.SKIP"      => FILE,
+        lib                  => {
+         $LIB_PATH => {
+            $LIB_FILE => FILE,}
+        },
+        "bin" => {
+            "+app.pl" => FILE,
+        },
+        "config.yml"         => FILE,
+        "environments"       => {
+            "development.yml" => FILE,
+            "production.yml"  => FILE,
+        },
+        "views" => {
+            "layouts"  => {"main.tt" => FILE,},
+            "index.tt" => FILE,
+        },
+        "public" => {
+            "+dispatch.cgi"  => FILE,
+            "+dispatch.fcgi" => FILE,
+            "404.html"       => FILE,
+            "500.html"       => FILE,
+            "css"            => {
+                "style.css" => FILE,
+                "error.css" => FILE,
+            },
+            "images"      => {
+                "perldancer-bg.jpg" => \&write_bg,
+                "perldancer.jpg" => \&write_logo,
+            },
+            "javascripts" => {
+                "jquery.min.js" => FILE,
+            },
+            "favicon.ico" => \&write_favicon,
+        },
+        "t" => {
+            "001_base.t"        => FILE,
+            "002_index_route.t" => FILE,
+        },
+    };
+}
+
+
+sub safe_mkdir {
+    my ($dir) = @_;
+    if (not -d $dir) {
+        print "+ $dir\n";
+        mkpath $dir or die "could not mkpath $dir: $!";
+    }
+    else {
+        print "  $dir\n";
+    }
+}
+
+sub write_file {
+    my ($path, $template, $vars) = @_;
+    die "no template found for $path" unless defined $template;
+
+    $vars->{dancer_version} = $DANCER_VERSION;
+
+    # if file already exists, ask for confirmation
+    if (-f $path && (not $DO_OVERWRITE_ALL)) {
+        print "! $path exists, overwrite? [N/y/a]: ";
+        my $res = <STDIN>; chomp($res);
+        $DO_OVERWRITE_ALL = 1 if $res eq 'a';
+        return 0 unless ($res eq 'y') or ($res eq 'a');
+    }
+
+    my $fh;
+    my $content = process_template($template, $vars);
+    print "+ $path\n";
+    open $fh, '>', $path or die "unable to open file `$path' for writing: $!";
+    print $fh $content;
+    close $fh;
+}
+
+sub process_template {
+    my ($template, $tokens) = @_;
+    my $engine = Dancer::Template::Simple->new;
+    $engine->{start_tag} = '[%';
+    $engine->{stop_tag} = '%]';
+    return $engine->render(\$template, $tokens);
+}
+
+sub write_data_to_file {
+    my ($data, $path) = @_;
+    open(my $fh, '>', $path)
+      or warn "Failed to write file to $path - $!" and return;
+    binmode($fh);
+    print {$fh} unpack 'u*', $data;
+    close $fh;
+}
+
+
+sub send_http_request {
+    my $url = shift;
+    my $ua = LWP::UserAgent->new;
+    $ua->timeout(5);
+    $ua->env_proxy();
+
+    my $response = $ua->get($url);
+
+    if ($response->is_success) {
+        return $response->content;
+    }
+    else {
+        return;
+    }
+}
+
+sub version_check {
+    my $latest_version = 0;
+    require Dancer;
+
+    my $resp = send_http_request('http://search.cpan.org/api/module/Dancer');
+
+    if ($resp) {
+        if ( $resp =~ /"version" (?:\s+)? \: (?:\s+)? "(\d\.\d+)"/x ) {
+            $latest_version = $1;
+        } else {
+            die "Can't understand search.cpan.org's reply.\n";
+        }
+    }
+
+    return if $DANCER_VERSION =~  m/_/;
+
+    if ($latest_version > $DANCER_VERSION) {
+        print qq|
+The latest stable Dancer release is $latest_version, you are currently using $DANCER_VERSION.
+Please check http://search.cpan.org/dist/Dancer/ for updates.
+
+|;
+    }
+}
+
+sub download_file {
+    my ($path, $url) = @_;
+    my $resp = send_http_request($url);
+    if ($resp) {
+        open my $fh, '>', $path or die "cannot open $path for writing: $!";
+        print $fh $resp;
+        close $fh
+    }
+    return 1;
+}
+
+sub templates($) {
+    my $appname    = shift;
+    my $appfile    = $appname;
+    my $cleanfiles = $appname;
+
+    $appfile    =~ s{::}{/}g;
+    $cleanfiles =~ s{::}{-}g;
+
+    return {
+
+'Makefile.PL' =>
+"use strict;
+use warnings;
+use ExtUtils::MakeMaker;
+
+# Normalize version strings like 6.30_02 to 6.3002,
+# so that we can do numerical comparisons on it.
+my \$eumm_version = \$ExtUtils::MakeMaker::VERSION;
+\$eumm_version =~ s/_//;
+
+WriteMakefile(
+    NAME                => '$appname',
+    AUTHOR              => q{YOUR NAME <youremail\@example.com>},
+    VERSION_FROM        => 'lib/$appfile.pm',
+    ABSTRACT            => 'YOUR APPLICATION ABSTRACT',
+    (\$eumm_version >= 6.3001
+      ? ('LICENSE'=> 'perl')
+      : ()),
+    PL_FILES            => {},
+    PREREQ_PM => {
+        'Test::More' => 0,
+        'YAML'       => 0,
+        'Dancer'     => [% dancer_version %],
+    },
+    dist                => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
+    clean               => { FILES => '$cleanfiles-*' },
+);
+",
+'index.tt'  => 
+'  
+<!-- 
+    Credit goes to the Ruby on Rails team for this page 
+    has been heavily based on the default Rails page that is 
+    built with a scaffolded application.
+
+    Thanks a lot to them for their work.
+
+    See Ruby on Rails if you want a kickass framework in Ruby:
+    http://www.rubyonrails.org/
+-->
+
+<div id="page">
+      <div id="sidebar">
+        <ul id="sidebar-items">
+          <li>
+            <h3>Join the community</h3>
+            <ul class="links">
+
+              <li><a href="http://perldancer.org/">PerlDancer</a></li>
+              <li><a href="http://twitter.com/PerlDancer/">Official Twitter</a></li>
+              <li><a href="https://github.com/PerlDancer/Dancer/">GitHub Community</a></li>
+            </ul>
+          </li>
+          
+          <li>
+            <h3>Browse the documentation</h3>
+
+            <ul class="links">
+              <li><a
+              href="https://metacpan.org/pod/Dancer::Introduction">Introduction</a></li>
+              <li><a href="https://metacpan.org/pod/Dancer::Cookbook">Cookbook</a></li>
+              <li><a href="https://metacpan.org/pod/Dancer::Deployment">Deployment Guide</a></li>
+              <li><a
+              href="https://metacpan.org/pod/Dancer::Tutorial"
+              title="a tutorial to build a small blog engine with Dancer">Tutorial</a></li>
+            </ul>
+          </li>
+
+          <li>
+            <h3>Your application\'s environment</h3>
+
+            <ul>
+                <li>Location: <code><% settings.appdir %></code></li>
+                <li>Template engine: <code><% settings.template %></code></li>
+                <li>Logger: <code><% settings.logger %></code></li>
+                <li>Environment: <code><% settings.environment %></code></li>
+            </ul>
+
+          </li>
+        </ul>
+
+      </div>
+
+      <div id="content">
+        <div id="header">
+          <h1>Perl is dancing</h1>
+          <h2>You&rsquo;ve joined the dance floor!</h2>
+        </div>
+
+        <div id="getting-started">
+          <h1>Getting started</h1>
+          <h2>Here&rsquo;s how to get dancing:</h2>
+                    
+          <h3><a href="#" id="about_env_link">About your application\'s environment</a></h3>
+
+          <div id="about-content" style="display: none;">
+            <table>
+                <tbody>
+                <tr>
+                    <td>Perl version</td>
+                    <td><tt><% perl_version %></tt></td>
+                </tr>
+                <tr>
+                    <td>Dancer version</td>
+                    <td><tt><% dancer_version %></tt></td>
+                </tr>
+                <tr>
+                    <td>Backend</td>
+                    <td><tt><% settings.apphandler %></tt></td>
+                </tr>
+                <tr>
+                    <td>Appdir</td>
+                    <td><tt><% settings.appdir %></tt></td>
+                </tr>
+                <tr>
+                    <td>Template engine</td>
+                    <td><tt><% settings.template %></tt></td>
+                </tr>
+                <tr>
+                    <td>Logger engine</td>
+                    <td><tt><% settings.logger %></tt></td>
+                </tr>
+                <tr>
+                    <td>Running environment</td>
+                    <td><tt><% settings.environment %></tt></td>
+                </tr>
+                </tbody>
+            </table>
+          </div>
+
+    <script type="text/javascript">
+    $(\'#about_env_link\').click(function() {
+        $(\'#about-content\').slideToggle(\'fast\', function() {
+            // ok
+        });
+        return( false );
+    });
+    </script>
+
+
+          <ol>          
+            <li>
+              <h2>Tune your application</h2>
+
+              <p>
+              Your application is configured via a global configuration file,
+              <tt>config.yml</tt> and an "environment" configuration file,
+              <tt>environments/development.yml</tt>. Edit those files if you
+              want to change the settings of your application.
+              </p>
+            </li>
+
+            <li>
+              <h2>Add your own routes</h2>
+
+              <p>
+              The default route that displays this page can be removed,
+              it\'s just here to help you get started. The template used to
+              generate this content is located in 
+              <code>views/index.tt</code>.
+              You can add some routes to <tt>lib/'.$LIB_PATH.$LIB_FILE.'</tt>. 
+              </p>
+            </li>
+
+            <li>
+                <h2>Enjoy web development again</h2>
+
+                <p>
+                Once you\'ve made your changes, restart your standalone server
+                (bin/app.pl) and you\'re ready to test your web application.
+                </p>
+            </li>
+
+          </ol>
+        </div>
+      </div>
+    </div>
+',
+
+'main.tt'   =>
+'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-type" content="text/html; charset=<% settings.charset %>" />
+<title>'.$appname.'</title>
+<link rel="stylesheet" href="<% request.uri_base %>/css/style.css" />
+
+<!-- Grab jQuery from a CDN, fall back to local if necessary -->
+<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
+<script type="text/javascript">/* <![CDATA[ */
+    !window.jQuery && document.write(\'<script type="text/javascript" src="<% request.uri_base %>/javascripts/jquery.min.js"><\/script>\')
+/* ]]> */</script>
+
+</head>
+<body>
+<% content %>
+<div id="footer">
+Powered by <a href="http://perldancer.org/">Dancer</a> <% dancer_version %>
+</div>
+</body>
+</html>
+',
+
+"dispatch.cgi" =>
+"$PERL_INTERPRETER
+use Dancer ':syntax';
+use FindBin '\$RealBin';
+use Plack::Runner;
+
+# For some reason Apache SetEnv directives dont propagate
+# correctly to the dispatchers, so forcing PSGI and env here 
+# is safer.
+set apphandler => 'PSGI';
+set environment => 'production';
+
+my \$psgi = path(\$RealBin, '..', 'bin', 'app.pl');
+die \"Unable to read startup script: \$psgi\" unless -r \$psgi;
+
+Plack::Runner->run(\$psgi);
+",
+
+
+"dispatch.fcgi" =>
+qq{$PERL_INTERPRETER
+use Dancer ':syntax';
+use FindBin '\$RealBin';
+use Plack::Handler::FCGI;
+
+# For some reason Apache SetEnv directives dont propagate
+# correctly to the dispatchers, so forcing PSGI and env here 
+# is safer.
+set apphandler => 'PSGI';
+set environment => 'production';
+
+my \$psgi = path(\$RealBin, '..', 'bin', 'app.pl');
+my \$app = do(\$psgi);
+die "Unable to read startup script: \$@" if \$@;
+my \$server = Plack::Handler::FCGI->new(nproc => 5, detach => 1);
+
+\$server->run(\$app);
+},
+
+"app.pl" =>
+
+"$PERL_INTERPRETER
+use Dancer;
+use $appname;
+dance;
+",
+
+"$LIB_FILE" =>
+
+"package $appname;
+use Dancer ':syntax';
+
+our \$VERSION = '0.1';
+
+get '/' => sub {
+    template 'index';
+};
+
+true;
+",
+
+'style.css' =>
+'
+body {
+margin: 0;
+margin-bottom: 25px;
+padding: 0;
+background-color: #ddd;
+background-image: url("/images/perldancer-bg.jpg");
+background-repeat: no-repeat;
+background-position: top left;
+
+font-family: "Lucida Grande", "Bitstream Vera Sans", "Verdana";
+font-size: 13px;
+color: #333;
+}
+
+h1 {
+font-size: 28px;
+color: #000;
+}
+
+a  {color: #03c}
+a:hover {
+background-color: #03c;
+color: white;
+text-decoration: none;
+}
+
+#page {
+background-color: #ddd;
+width: 750px;
+margin: auto;
+margin-left: auto;
+padding-left: 0px;
+margin-right: auto;
+}
+
+#content {
+background-color: white;
+border: 3px solid #aaa;
+border-top: none;
+padding: 25px;
+width: 500px;
+}
+
+#sidebar {
+float: right;
+width: 175px;
+}
+
+#header, #about, #getting-started {
+padding-left: 75px;
+padding-right: 30px;
+}
+
+
+#header {
+background-image: url("/images/perldancer.jpg");
+background-repeat: no-repeat;
+background-position: top left;
+height: 64px;
+}
+#header h1, #header h2 {margin: 0}
+#header h2 {
+color: #888;
+font-weight: normal;
+font-size: 16px;
+}
+
+#about h3 {
+margin: 0;
+margin-bottom: 10px;
+font-size: 14px;
+}
+
+#about-content {
+background-color: #ffd;
+border: 1px solid #fc0;
+margin-left: -11px;
+}
+#about-content table {
+margin-top: 10px;
+margin-bottom: 10px;
+font-size: 11px;
+border-collapse: collapse;
+}
+#about-content td {
+padding: 10px;
+padding-top: 3px;
+padding-bottom: 3px;
+}
+#about-content td.name  {color: #555}
+#about-content td.value {color: #000}
+
+#about-content.failure {
+background-color: #fcc;
+border: 1px solid #f00;
+}
+#about-content.failure p {
+margin: 0;
+padding: 10px;
+}
+
+#getting-started {
+border-top: 1px solid #ccc;
+margin-top: 25px;
+padding-top: 15px;
+}
+#getting-started h1 {
+margin: 0;
+font-size: 20px;
+}
+#getting-started h2 {
+margin: 0;
+font-size: 14px;
+font-weight: normal;
+color: #333;
+margin-bottom: 25px;
+}
+#getting-started ol {
+margin-left: 0;
+padding-left: 0;
+}
+#getting-started li {
+font-size: 18px;
+color: #888;
+margin-bottom: 25px;
+}
+#getting-started li h2 {
+margin: 0;
+font-weight: normal;
+font-size: 18px;
+color: #333;
+}
+#getting-started li p {
+color: #555;
+font-size: 13px;
+}
+
+#search {
+margin: 0;
+padding-top: 10px;
+padding-bottom: 10px;
+font-size: 11px;
+}
+#search input {
+font-size: 11px;
+margin: 2px;
+}
+#search-text {width: 170px}
+
+#sidebar ul {
+margin-left: 0;
+padding-left: 0;
+}
+#sidebar ul h3 {
+margin-top: 25px;
+font-size: 16px;
+padding-bottom: 10px;
+border-bottom: 1px solid #ccc;
+}
+#sidebar li {
+list-style-type: none;
+}
+#sidebar ul.links li {
+margin-bottom: 5px;
+}
+
+h1, h2, h3, h4, h5 {
+font-family: sans-serif;
+margin: 1.2em 0 0.6em 0;
+}
+
+p {
+line-height: 1.5em;
+margin: 1.6em 0;
+}
+
+code, tt {
+    font-family: \'Andale Mono\', Monaco, \'Liberation Mono\', \'Bitstream Vera Sans Mono\', \'DejaVu Sans Mono\', monospace;
+}
+
+#footer {
+clear: both;
+padding-top: 2em;
+text-align: center;
+padding-right: 160px;
+font-family: sans-serif;
+font-size: 10px;
+}
+',
+
+# error.css
+"error.css" =>
+
+"body {
+    font-family: Lucida,sans-serif;
+}
+
+h1 {
+    color: #AA0000;
+    border-bottom: 1px solid #444;
+}
+
+h2 { color: #444; }
+
+pre {
+    font-family: \"lucida console\",\"monaco\",\"andale mono\",\"bitstream vera sans mono\",\"consolas\",monospace;
+    font-size: 12px;
+    border-left: 2px solid #777;
+    padding-left: 1em;
+}
+
+footer {
+    font-size: 10px;
+}
+
+span.key {
+    color: #449;
+    font-weight: bold;
+    width: 120px;
+    display: inline;
+}
+
+span.value {
+    color: #494;
+}
+
+/* these are for the message boxes */
+
+pre.content {
+    background-color: #eee;
+    color: #000;
+    padding: 1em;
+    margin: 0;
+    border: 1px solid #aaa;
+    border-top: 0;
+    margin-bottom: 1em;
+}
+
+div.title {
+    font-family: \"lucida console\",\"monaco\",\"andale mono\",\"bitstream vera sans mono\",\"consolas\",monospace;
+    font-size: 12px;
+    background-color: #aaa;
+    color: #444;
+    font-weight: bold;
+    padding: 3px;
+    padding-left: 10px;
+}
+
+pre.content span.nu {
+    color: #889;
+    margin-right: 10px;
+}
+
+pre.error {
+    background: #334;
+    color: #ccd;
+    padding: 1em;
+    border-top: 1px solid #000;
+    border-left: 1px solid #000;
+    border-right: 1px solid #eee;
+    border-bottom: 1px solid #eee;
+}
+
+",
+
+"404.html" => <<EOH,
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<title>Error 404</title>
+<link rel="stylesheet" href="/css/error.css" />
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<h1>Error 404</h1>
+<div id="content">
+<h2>Page Not Found</h2><p>Sorry, this is the void.</p>
+</div>
+<div id="footer">
+Powered by <a href="http://perldancer.org/">Dancer</a>.
+</div>
+</body>
+</html>
+EOH
+
+"500.html" => <<EOH,
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<title>Error 500</title>
+<link rel="stylesheet" href="/css/error.css" />
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<h1>Error 500</h1>
+<div id="content">
+<h2>Internal Server Error</h2><p>Wooops, something went wrong</p>
+</div>
+<div id="footer">
+Powered by <a href="http://perldancer.org/">Dancer</a>.
+</div>
+</body>
+</html>
+EOH
+
+'config.yml' =>
+
+"# This is the main configuration file of your Dancer app
+# env-related settings should go to environments/\$env.yml
+# all the settings in this file will be loaded at Dancer's startup.
+
+# Your application's name
+appname: \"$name\"
+
+# The default layout to use for your application (located in
+# views/layouts/main.tt)
+layout: \"main\"
+
+# when the charset is set to UTF-8 Dancer will handle for you
+# all the magic of encoding and decoding. You should not care
+# about unicode within your app when this setting is set (recommended).
+charset: \"UTF-8\"
+
+# template engine
+# simple: default and very basic template engine
+# template_toolkit: TT
+
+template: \"simple\"
+
+# template: \"template_toolkit\"
+# engines:
+#   template_toolkit:
+#     start_tag: '[%'
+#     end_tag:   '%]'
+
+# For session support enable the following line and see Dancer::Session
+# session: \"YAML\"
+
+",
+
+'jquery.min.js' => jquery_minified(),
+
+'MANIFEST.SKIP' => manifest_skip(),
+
+'development.yml' =>
+"# configuration file for development environment
+
+# the logger engine to use
+# console: log messages to STDOUT (your console where you started the
+#          application server)
+# file:    log message to a file in log/
+logger: \"console\"
+
+# the log level for this environment
+# core is the lowest, it shows Dancer's core log messages as well as yours
+# (debug, info, warning and error)
+log: \"core\"
+
+# should Dancer consider warnings as critical errors?
+warnings: 1
+
+# should Dancer show a stacktrace when an error is caught?
+show_errors: 1
+
+# auto_reload is a development and experimental feature
+# you should enable it by yourself if you want it
+# Module::Refresh is needed 
+# 
+# Be aware it's unstable and may cause a memory leak.
+# DO NOT EVER USE THIS FEATURE IN PRODUCTION 
+# OR TINY KITTENS SHALL DIE WITH LOTS OF SUFFERING
+auto_reload: 0
+",
+
+'production.yml' =>
+'# configuration file for production environment
+
+# only log warning and error messages
+log: "warning"
+
+# log message to a file in logs/
+logger: "file"
+
+# don\'t consider warnings critical
+warnings: 0
+
+# hide errors 
+show_errors: 0
+
+# cache route resolution for maximum performance
+route_cache: 1
+
+',
+
+"001_base.t" =>
+"use Test::More tests => 1;
+use strict;
+use warnings;
+
+use_ok '$appname';
+",
+
+"002_index_route.t" =>
+"use Test::More tests => 2;
+use strict;
+use warnings;
+
+# the order is important
+use $appname;
+use Dancer::Test;
+
+route_exists [GET => '/'], 'a route handler is defined for /';
+response_status_is ['GET' => '/'], 200, 'response status is 200 for /';
+",
+
+    };
+}
+
+sub write_bg {
+    my $path = shift;
+    my $data =<<'EOF';
+M_]C_X``02D9)1@`!`0$`2`!(``#_VP!#``4#!`0$`P4$!`0%!04&!PP(!P<'
+M!P\+"PD,$0\2$A$/$1$3%AP7$Q0:%1$1&"$8&AT='Q\?$Q<B)"(>)!P>'Q[_
+MVP!#`04%!0<&!PX("`X>%!$4'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>
+M'AX>'AX>'AX>'AX>'AX>'AX>'AX>'A[_P``1"`'T`?0#`2(``A$!`Q$!_\0`
+M&0`!``,!`0````````````````(#!`$(_\0`*Q`!``("``4#!`,!`0$!````
+M``$"`Q$$$B$Q,C-!41,B87$C0E(48H%#_\0`%`$!````````````````````
+M`/_$`!01`0````````````````````#_V@`,`P$``A$#$0`_`/2H````````
+M````````````````````````````````````````````````````````````
+M````````````````````````YN#<?(.CG-'S!N/D'1S<?+H`````````````
+M``````````````````````````````````````3T5VRUCWZ@L<W'RSVS3VA7
+M-IGW!JMDK"$YZ^S/N7`73GGV1G->?=`!*<EI]W.>WRY$2[R6^`.:3FGY=BEI
+M]G)I8#GM\NQDM'NYRRY,2"R,U_E*,_RI<!JKFK*=;1/NQ.[GY!N&.N2U5U,\
+M?V!<(UO6W:4@```````````````````````````````````````GHJR98KVZ
+M@LF8B-RKOFB/'JHM>UI[H`G?):WNB1&^R=,5K>V@5I169[0OKBK7REV;TKXQ
+"$@H`
+M:XK3WA9&"/>7>>]NU9@C'>W>TP!R8Z^[O-BCX(Q?,[2C'3X!'ZE/:(<^K'^8
+M6<E/\G+7X!7.2?:I]3_RMY:_!RU^`5?5CWB'?J8_>(3Y*_Y@Y*?Y@$/XI]X<
+MG%2W:4IQ5]NCDXI]K:!"V"8[=5<X[Q[+=9*^\R[]6W:U`9YC3C5_':/:)1M@
+M]XD%$3,=I64S3'24+4M7O"(-E<E;>_5-AB9CLLQYICOU!J$:7BT=)2``````
+M```````````````````````````1M:*QN4<F2*_MFO>;3N03R99MTCI"MQ.E
+M)MV!&(WV64PS;K/1;6E,<;GNC-[7G5.@)17'2/:9<G):W2L3#M<6^MNZR(B(
+MU`*HQVGRE.N.L=H3`````````````')B)[N@*[8JSVZ2A,9*>^X7@*8R1;I:
+M-%L5;>,PLM2MNZJ:7IUK/0%5Z36>R#57)%OMM'5#)A]Z@IK,UG<-&++$])9Y
+MB8GJX#>,N++->D]FFMHM&X!T```````````````````````````!3ERZZ1W<
+MS9==(4`3,S/4(B9G4-&/'6D<U@1Q8M];)VR17[:1U1M:UYU6.BS'CBL?,@A7
+M'-IW>5L1$1J'0`<M.HVY6T2"3EIU#J-XW`(UO.^KO-//HIJ8_+G_`.H.Q:>;
+<16TS:8E'^^W:=Y`M>=ZAV;?;N'*QN\NVCEIH"@``
+MVM,]DT*3$]$Y!7SSS?A.;=-H6B*__7;>,`5M,SJ2]IB=1W1CR=MZD`E2VXZH
+MS>=_ARGN>T@LK.XVZCC\(2`$(O&])@A?'%OPK^_'^E[DQON"N8IEA1DI-)ZK
+MKXYB>:KM;Q;[;QJ094\=YK*67%->L=E0-M+Q:.B3%2TUG<-6.\7C\@F`````
+M```````````````````ISY-1J'<V3EC4=V:9W.P)ZNUK-IU#E8F9U#32L8Z;
+MGN!2M<==SW1^[+;X@K%LEMSV71$1&H`K6*QJ(=```'+1N-(TIRI@#EITZY:-
+MP"$]+;@CU/\`X[6D[ZR[R_?L$)Z[,?NG%>KE:ZF9!&LZO,NVGFIMVU-SN)=F
+MOVZ@'*1":%:VB>Z4]@0\K?IW)VASDM$[B4];KJ05QY.V]2':TF)W,NWKOK'<
+M$<?NY;4Q,IUKJ$9I.^_0$L?A"3D1J-.@A%/NVF```"O)CB>L=)6`*:7U/+='
+M+BU]U>RW)2+1^4,=IK/)?L#.ECM-9VGGQZ^ZO92#;2T6C<),>*\UG\-=9BT;
+M@'0```````````````````$<EHK7<NS.HVRYK\UOP"-K3:=RY$;EQ?@IK[K`
+MECI%*\TN1O+?\%IG)?4=H75B*QJ`(B(C4.N6G4;9YSWW[`TC-]>_X/KW_`-(
+MSQGGW3KFK/<%HY$Q,='0`49,UJWF([`O&;Z]_P`'U[_@&D9OKW_!]>_X!I&;
+MZ]_POQS-J[D$@0RVFM=P"8S?7O\`@^O?\`TC-]>_X=C//N#0*JYJSW61,3V!
+MT``%.7+:DZ@%PS?7O^':Y[S,1T!H``0R4YH_*8"G';^EE>;'RSN.R[+3<;CO
+M#F.T7KRV[@RKL%^6=3V0R5FMM(`WP*<%]QJ5P`````````````````(WGEK,
+M@KXB^HU#,E>>:VW(C<Z!/#3FM^%N6W:E78UBQ_DPU[VD$L=>6OY3`$;^,L<]
+/VR_C+'/<'`68L?/OKK0*
+MQ;;%KM.U<QKN">/)-9::6BT;AB6\/;5N7Y!JADS^K+6R9_5D%8)XZ\]M;T"`
+MO^A'^SZ,?[!3'=KP^G"KZ,?[78XU70)*\_@L5Y_`&0``74Q1;'S3.G+8ICM.
+MP5IX\DUG\(.`W5M%HW#K/PUNNF@!EXCRAJ9>(\H!4E3RC]HI4\H_8-H```"G
+*+6:SSU7.3&XT"@``
+M[1&7'N.[-,:G2^/X\FO:7.(I_:.P*J6Y;1+72W-6)8EW#WU.I!I`````````
+M```````9^(O[0OO/+698[SNTR"*_AZ?VGLIK&YB&F\_3QQ$`C/\`)DU[+HC4
+M:0PUY:_M8``"-_&6.>[9?QECGN#C1PO]F=HX3W!;RQ[,_$5U?;4S\2"A*DZM
+2M$!NIUK$LN?U9:<7A5FS^K(*
+MUO#^HJ6\/Z@-,UC?9SEK\)2`CRU^$HZ``KS^"Q7G\`9``:\$1.*-I<NNR/#^
+MDL!DS5Y;*U_%^4*`3Q3JT-C%3RC]MH#+Q'E#4R\1Y0"I*GE'[12IY1^P;0``
+M```0RUYJ_E''//6:RM47^S)$QV!3>O+:8<B=3M?Q%=Q%H9P;,5N:NTV;A[:M
+MJ6D``````````````%/$VU&F99FMS60B-SH%W#UZ[EWSRZ]DH^S#^3!'V[]P
+M6@```C?QECGNV7\98Y[@XT<)[LZ[AK5KOFG0-+/Q,]=)VS5B.C/>TVG<@B[6
+M-SIQ9AKN\?`-6/I6(9<_JRUPR9_5D%:WA_4A4E6TUG<`VC)]6Q]6P-8CBG=(
+MF4@%>?P6*\_@#(`#7P_I+%&+)%<>G,F:>T`CGMS65.SUEP$\4;M#8S\-7WEH
+M`9>(\H:F7B/*`5)4\H_:*5/*/V#:``````AEKS4GY3`58YYJ32?9GO'+:87>
+M&7]N<374\WR"FLZF);:SN&%IX>VZZ!<````````````CEGEIM)3Q,_;H&>>L
+MI88W>$&CAHUN9!W-.[16%M8U&E-/NS6E>````"-_&6.>[9?QECGN#@.Q$SV@
+M'!.*6GV3KA]YD%5:S:=0U8J16"E8CM&DX!V&3/ZLM<,F?U9!6"6.O/;4`B+O
+MH3_J#Z$_Z@%V'TH31QQRTB$@%>?P6*\_@#(``+*XIM7FVA:-3H'%F*G-/Z5K
+M>'G5M`T4C4)``R\1Y0U,O$>4`J2IY1^T4J>4?L&T```````%6>.D6^"?OQ;3
+$O&ZS"@``
+M\/::@SK,$ZNADC5M.5G4[!N'*^,.@``````````,W$SN[3/9CRSNP(-5?MPS
+M/X9JQN6G)TQQ`&".G-\K4,4:I"8````(W\98Y[ME_&6.>X.-'"]K:[L[1PGN
+5"S5O?3O+'ND```0R9_5EKADS^K(*
+MUO#^HJ6\/Z@-$TC9R52D!R(U&G0`5Y_!8KS^`,@`->"-XH4\1&KKN'])#B8]
+MP9TL<ZO"+L=)!MB=QMU#%.Z1*8#+Q'E#4R\1Y0"I*GE'[12IY1^P;0``````
+M`%,?;FG\KE.;I:)^9!#B8^_:IHXF/LB68&O#.ZK%/"S]LPN``````````!R>
+MD2Q6[RV9)U5CGN"6*-WA=G\JPJP1_)"S)URU_8+HC4.@````"-_&6.>[9?QE
+MCGN#C1PGNSM'">X+P```(9,_JRUPR9_5D%:WA_45)X[\EN;6P;)%'_1_Y/\`
+MH_\`(+Q1_P!'_E;2W-78)*\_@L5Y_`&0`&OA_2=S1O',.</Z2<QN-`Q2XE?I
+M:40:>'G==+F;AIU:6D!EXCRAJ9>(\H!4E3RC]HNUZ6@&X5?6J?5J"T5?5JG2
+MT6[`D````JSQN(6H9?$$,GW8F=IKUPLT]P6\-/732R8)_DAK``````````!#
+M-X,DM6?P99!;P\?<E/7*CPW=./5_^@N`````!&_C+'/=MM&XTSS@MOO`*6CA
+M/=#Z%OF%N"DTWL%H```$,F?U9:U&3%:UYF)@&<6_0M\P?0M\P"H6_0M\P?0M
+M\P"N.[7A\(4_0M\POQQRUU()*\_@L0RUFU=0#&+?H6^8/H6^8!=P_I+$,59K
+M34I@RYXU94U9Z3>8TJ^A;Y@$<<ZM#8SUP6BT3.D\]^6NH[@M9>(\H3P7F9U+
+MN;'-YW&@9A;]"WS!]"WS`*A;]"WS!]"WS`*FGANTJ_H6^878:36)V"P```!'
+()X2DY?PG]`H`
+M\/HRS3WEIP>G+-/>02P^I#8QX?4AL``````````!7G\&66O-X,D@MX;R2CU9
+M1X?R2_\`U_\`H+P`````)1Y(^92GM,L\\1;?:`7<D?,NUC2C_HM\0[&?Y!>(
+MUO6W:4@`1O/+69!)&:Q,[W*G_HGX@C/:9UJ`7<D?,G)'S+L3N-N@CR1\R<D?
+M,H9,LTG40C7/,VB)B`6\D?,NQ&H=1R6Y:[B`2<F-PH_Z+?"[';FC8.<L1[R[
+MR1\RJS[BT3M96T13>P2Z5@BT3/26;+DFT].R-+3%NX-=HVYRQ'7;DY*Q6.O5
+M1DRS;I`+;Y:UC4=U6K9;;=QXIM.[++WKCC4=P2QTBD:]W;5B94?7M\)X\LWM
+MJ8!9R1\R<D?,HYLDXYC4;5_]%OB`7<D?,G)'S*F.(GWA93+%NX)<D?,NUC3H
+M`````Y?PG].HY/"00P>G+-/>6G#Z4LT]Y!+%ZD-D,>'U(;```````````0R>
+M+)/=MMUK+%/>06<//\D)Y.F6%6&=9(79_.L@N'(ZPZ````#D^,_IBGO+;/:?
+MTQ3WD!Q9AB)M&T\U(UN(T"JEIK,=6ND\U=L33P\_;H%RO//\<PL4\1/30,SL
+M=W`&W%.Z0DKX>?XU@,O$>4*XG4[6<1Y0J!MQSND2CG\'.'G==.Y_`&7W:L/@
+MR^[5A\`0XF)Z*HO.M-62(FDL<@X`#LS,]U^#'TYK*\->:T?#3?ICF(]@59<N
+MOMJHF9F>I/5;@K69ZQL%*WA_.%O+3_#M(KOI70(<7WAG:.+]E$=P".C12E9Q
+M]E%Z\LZ!?@ON-2N9,,ZR0U@````(9?%-7GG40#E.F%FGNT7Z86<$\'J0ULW#
+MQ]VVD``````````">S%DC5FUEXB-7!"DZMM?EZTB69JC[L.OP">.=TB4E6"?
+MLTM````!R?&?TQ3WEMGQG],4]Y!9P_G"_+&Z2HX?SAHR>G8&)?PW=0NX6?OT
+H#2S\5/6(:&7B)W8%8ECC=G,GG(+^&G[=+F?AI^[30#+Q'E"I;Q'E"@``
+M@7<-.K+<_@S4G5H:<T[Q[!E]VK#X,ONU8?`$LDZI+&U9YU5D`=<2QQNVI!IP
+MUY:I9/3L[$:B(<R>G8&)?PWDH7\-Y`T``HXOV41W7\7[*([@UX?3A3Q/3(NP
+7^G"CB)W<$,?E#97M#'C\X;([`Z````H`
+M<_6U8_*Y3Y9ICX`XF=4B&9=Q,_=I4"_A8Z3*]7@C55@``````````"CB8Z;7
+MH9HW28!C:.&G<3"B>Z>&VKP"W']N6T2N49HY;Q:/==$[@'0```<GQG],4]Y;
+M9\9_3%/>06</YPT9/3LS\/YPT9/3L#$NX7U%*[A?4!I8\L[M+7:=0Q6\I!9P
+M\;LYG]24^%C<RYQ$?=L'.'G5VICQSJS9'8&7B/*%<1N=+.(\H0Q>I`$QRV73
+,.\$2KSQJ\NUG^/0*
+M_=JP^#+[M6'P!'B>D0S-/$]H9@%F#SA6LP>I`-:.3T[)(Y/3L#$GCR32=Q"`
+1"_\`Z+?$+XG<1+%#;7PC]`H`
+M>+]E$+^+]F<%]<O+CTIM.YVXZ"S!7=M_#4ACK$5C7NF````#EIU6958>\V2S
+M6U77RYX80499W?:,1N24\$;N#52-5AT`````````````8\D:M*,3J=K^)K[P
+MS@U3]^*)=P6W37NAP]M[K)'V9=>P+P```<GQG],4]Y;9\9_3%/>06</YPT9/
+M3LS\/YPT9/3L#$NX7U%*_A8^[8+<LZI+)/=JXB?XV0&GAM1$]=(\1J>TJ0".
+M\-M9W$,4=VO%.Z@HXCRA#'ZE?VGQ'E"&/U*_L%W%1VE1$M>:-U9`/=JP^#+#
+M5A\`=RUB:3/PR->68BDQ\L8"WA_45.UF8G<`W(Y/3L8[<U8,GIV!B6X:Q:>J
+MI?PWD"7)7_*V.QIT%'%^RB.Z_B_91'<%MJQ]*)B.JKW:8C>%FGN#7AG=$U/#
+M3NLK@```1R3RUF056^_+'X.)M[0[AC43>?=3DGFO,@@T<-7IM1'66S'7EKH$
+M@`````````````1R1S5F&.T:F8;F;B*ZG?R"NDS%H7YHYJ1:&9HX>VXY9!9B
+KMS5341_'DU[+P``<GQG],4]Y;9\9_3%/>06</YPOS3JDPS8[<L[=RY9N"@``
+MVCAHZ[4-6"-4_((\3/33.NXJ?OTJKY`E&&\QO1;%:L;EHBNZQU+UU6>NP9&G
+GAIWC9I7\-/30(<1Y0AC]2O[3XCR0Q^I7]@V6ZQ+'>-6TVLO$1JX*
+MX:\,?8RTCFMIIR6Y,>O<%7$7W.H]E+LSN=D1N0<$YQVBNYA`%_#WU/+\KLGI
+MV8ZSJVVN-7QZ^08U_#>2&3':OZ<QY)I.X@&P9_\`HM\0ECRS>VI@'.+]E$=U
+M_%^RB.X->.-XF2T:F6O#Z3-EC5@6<-/730R8)UDAK```4Y9YKQ6.RS);EKM7
+MBC43>P&:>2D59D\MN:THQUG0+.'KNW7LU*\->6BP``````````````!')7FK
+M*0##:-3IVDS6VX7<13^T,X-5HC)CW'=W#;<:GO"K!?4ZGLGDCEMSU[`N$:6B
+MT;2!R?&?TQ3WEN5<M/\``,KNI^&GEI_@B(]JZ!5CQS,[GHTQTAR(^4@9,\[N
+MCC\X:+13?6NRL4WTIJ061V+>,ND]@8;1J5O#3]VEDUI[T=I%8MTKJ05<3YJ\
+<?J5_;3>*S/6NW*Q3<:IH%JGB8^W:Y&\1,=8V"@``
+M>&KO[D<]MV:*1$5^V-,E_*0178N2O6=*0&R;TF-3++DB(MT1=@'$JWM7M*RN
+M/GKN.BNU9K/6`:,=XR1J5.:O+?4)<-&[2MO%9GK78,BW!YPMY:?X=I%=]*Z!
+4#B^\*([M>2*SKFKM'EI_@$L/IPH`
+M.)C5VFNHCHC>*S/6NP9:3JT-E>M85\M/\+([`Z"K-?\`K7N",_R9->QGMRUY
+M82C6*FY[L]IYIV"*W!3FMOX5UC<Z:\=>6OY!,`````````````````'+1N-,
+MF2O+;38AEIS5!D:,-XO7ELSS&IT5F:SN`7QO'?\`$KHG<;A7$QEI^4:6FEN6
+MW8%X```````````````"NV.EIVL1FL2"$8:._1QI<GY.2/F00MAIK[>[/>DU
+MG4M<5UV0XB-TW[@[AC5.CF>-TVEBC5#-X2"KA9ZS#0S<-Y2T@```````C>T5
+MC8.9+16OY0Q5_O9RE9O;FMV<SY/ZP"&:_-;IV5BS#3FMOV!9P]/>5[D1J-.@
+<````````````````````ISX]QS0SMS/FQZZP"@``
+MJ6FL[AHG66OY9DJ7FL@NQWFD\MERK[<M>G=&EII/+;L"\<B8F-PZ````````
+M`#FX^0=``')F([R;CY!T<W'R;CY!URVM=3<.]P<CL6C<:EUR>P(TI6L]$W*Q
+MIT`````$;WBL?D"]HK&Y55B<EMSV*UG)/-;L9<D5CEJ!FR16.6J@F=]RL3:=
+M0#M*S:=0UTK%8TYBI%8_*8``````````````````````#DQN'0&;-BF)W"IN
+MGJSYL7O`*J6FL[AHB:Y:]>[,1,Q.X!?]V.?F%M+1:.BK'EBWVV=M2:SS4D%P
+MJIEB>ENZT`````57F>;IV65WH'4(US)JX\I!*;1$Z=CJKZ1;JLB-1T!#)&[0
+M[-8BG1S)OFZ.]8IU!'^KENT._P!7+>,`[,[TMA3VG2Z`!R_CT0QS.P6````#
+MEK16.LJ9O:\ZH">3)KI'64:TF?NO+L5KCC=NZK+EFW2.P)9<O3EJIGJXE6LV
+MG4`Y6)F=0U8L<5C?N8L<4C\K`````````````````````````````4Y<6^M>
+M[/,3$ZEN0R8XM`,BS'EFO2>R-\=JSVZ(`U:IDCITE'[\<_A1$S':5U,WM:`6
+D5RUM^UBJ:TOXSI'^2G:-P"\55RQ_;HLK:)[2#N@`%<>4K#0*
+MK3N=2LKVZFH^'05W\X3M&ZN@*=^SMHUJ%FH^#4`KO'WK8`!S3H`(VO6.\JYR
+M6GQC8+9F(C<JK9=]*$8[6ZVF8=FV.D=-;!RN.;?=>2V2M(U7NKR99MVZ*P=O
+M>;3N478C:W'AF>MN@(8Z3:>W1II2*QT2K$1&H=``````````````````````
+M``````````!R8B>ZG)A]X7@,-JS'>'&VU*V[PIOA]X!3%ICM*ZF;VF-JIK,=
+MX1!JB<=N^HER<<]ZV9TJY+1[@MWDK[3*499]ZZ0KGUWZI1>EN\`G&2D^[O-7
+MYA#DQ3\.?3C^LP"W<?+JGZ=_:Q]/)_L%PIY<W^CDRSWL"YSFCY5?3R?[/IS[
+MV!9ST_U",Y:^W5SZ=/>8-8J]H!R<MI[4<Y<EO>8=G-6.D0A;-:>W0$XQUKY3
+MLMDI7QB%%K3/>4067RVM^$)ZB5,=K?@$$Z8[6GLOIAB._59$1$=`0ICBL=>J
+MP```````````````````````````````````````1M6+=X5WP1/BN`9+8K50
+MU/PW(VI$^P,3K1;!7V0MAGV!4[%ICW2G%:/9&:3'L#L9+1[N_5O\H3$P`L^M
+M?Y<G-?Y0`3^K?Y<F]I]T2*R!,S(E&.T^R48;_`*G5U<'RLKAK`,T5F9[+*X;
+M3U:(B(]G05UQ5CVZK(Z`````````````````````````````````````````
+M`````````YJ/AT!SEK\0<M?B'0$>2OP12OQ"0#G+7X@Y8^(=`<U#H```````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+<``````````````````````````````````__V0``
+EOF
+    write_data_to_file($data, $path);
+}
+
+sub write_favicon {
+    my $path = shift;
+    my $data =<<'EOF';
+M```!``$`$!````$`"`!H!0``%@```"@````0````(`````$`"```````````
+M```````````````````````("`D`%103`!D7%0`;&A@`'1L9`!X<&@`E)"(`
+M)B0B`"<E(@`G)2,`*"8C`"DG)0`J)R4`*2@E`"TJ)P`P,"P`,S$O`#0Q+P`T
+M,BX`-#(O`#4R+P`V,S``-34R`#DU,0`W-C,`.38S`#DW,P`[.#0`/SPW`#X\
+M.``_/#D`/STY`#\].@!#/SL`14(]`$9#/P!'1#\`2$0_`$=$0`!)1D(`3$A$
+M`$U*10!-2D8`34M&`%!-20!23DH`4T]*`%-/2P!:5U$`75E3`%];5@!E85L`
+M9F%<`&9C7P!I9%X`9V1@`&EE7P!H96``:&5B`&IG8@!N:6,`<&MD`'!L9`!S
+M;F<`=W)J`'=R:P!X<VL`=W-L`'ET;`!W='$`=W5O`'MW;P!\=W``?7=Q`(!Z
+M<P"!?'8`?WQY`(1^=@"$?G<`A']X`(:!>0"%@GX`B8-Z`(>$@0")AH(`CXF!
+M`(^,AP"3C80`DXV%`)"-B`"5CX8`D8Z+`)B3B0"<EXX`HIN3`*6=DP"FGY<`
+MIZ*8`*BBF`"JI)P`JZ:<`*ZFFP"OJ)\`L*F@`+"JH`"SK*,`MJ^E`+>PI@"W
+ML*<`N;&G`+6RK0"[LZ@`N[2J`+BTK0"\M:L`OK:M`+FVL0#!N:T`P;FN`,*Z
+ML0##N[``PKNQ`,2\L`#$O+$`P[RR`,*^N`#&O[0`R,"V`,K!MP#)P;@`R\*V
+M`,K#N0#/QKH`T<B[`-#)O0#4RKP`ULN^`,W*Q0#4S,$`U<V_`-7-P@#7SL(`
+MU\_"`-C/PP#7S\0`U\_%`-G1Q0#9U<X`W]?,`-S9TP#CVLX`W=G4`.?=T`#@
+MW-<`Y=W2`.#<V`#GWM$`Y]_2`.C?T@#BWM@`X]_9`.G@U`#JX=0`X^#;`.OB
+MU0#KX]4`[./5`.OCU@#LX]8`[>37`.;CW@#HX]\`[N77`.WEV`#NY=D`[^;8
+M`/#GV`#PY]D`\>?9`/#GV@#PY]P`\>C;`/+IVP#T[-\`\.OF`/#LY@#X[N``
+M^>_B`/SRY0#X].\`^O?R`/[[]@#__/<`_?W]`/[]_0#]_?X`_?[^`/__^@#^
+M_OX`_?[_`/[__P#___\`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````QLG&P<F)13LY3)G)P<;)R<G&R)47,7N$A6\I);C$QLG&R'$:B["'
+&=5J(KX(*
+ID\3&P9\;LJ2FNK%Z7XZLF`R^PLD<CS-!30-5#@DF1$IV,LF7+;9#1PH`
+M+PT]7"`P6*04P%%JHDA!"TX2/E)&0D&E3VXUC*%=9E"`9&4V)%=_GFA6-8VG
+M'ZAK`6($26T`0*AG651IJ2=X<#B["!.\&+6G2W2C*K<H*S\&G049DA:NK1'%
+MR2*1(RD\'8,"%88/LW(TR<&K$GY\FF%_9WRT>90(O\+&QGT0BI9><W=@G($'
+MH,/&R<;'JB$L;)&08QXNO</&R<;)QL')FU,W.ENYR<3&R<D`````````````
+M````````````````````````````````````````````````````````````
+)````````````
+EOF
+    write_data_to_file($data, $path);
+}
+
+sub write_logo {
+    my $path = shift;
+    my $data =<<'EOF';
+M_]C_X``02D9)1@`!`0$`2`!(``#__@`30W)E871E9"!W:71H($=)35#_VP!#
+M``4#!`0$`P4$!`0%!04&!PP(!P<'!P\+"PD,$0\2$A$/$1$3%AP7$Q0:%1$1
+M&"$8&AT='Q\?$Q<B)"(>)!P>'Q[_VP!#`04%!0<&!PX("`X>%!$4'AX>'AX>
+M'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'A[_
+MP``1"`!``$`#`2(``A$!`Q$!_\0`&P```@,!`0$`````````````!@<$!0@#
+M`0+_Q``W$``!!`$"`P4%!P0#`0`````!`@,$!1$`!@<2(0@3(C%!%5%A<8$4
+M%B0R0E*1(S-RH4-B8X+_Q``7`0`#`0```````````````````@,!_\0`'!$`
+M`P$``P$!``````````````$"$1(A(C%!_]H`#`,!``(1`Q$`/P#9>JS<M]4;
+?<J'[:[L(\"$PDJ<>>6$I2/F=>[GNZ[;E!-N[60B/"@``
+=&RIUYQ9P$I`R=9&DRY/&2^5O7B!:-46QHKP360H`
+M4X&V>OY7',]%N*QD)/0#J?<62T5U@:7?:'W-NF8J#PFV@N7&*BA-O9A3;3GQ
+M::`[QSZ#/_7UU!54]HVZ`?F;Z]E*/7NXE?'#>/AWCG./DI`.F-MR9M%G;TF7
+MMBZJ/9<2,O[2\P\E00`G/,MP'*0`">OS]-#.W;J+;6J(%;Q!J+.2\4%J+'L>
+M=SPH\>`#D^6<?,ZHI2)<FP?$#M'T*>_B;R;N>7JI$VN9*,>[^@LN'Z-G5IMG
+,M&6E%.;K.+.UG*4*
+M6&Q:PB7HG-[EC\S9\NAZCU"=3YMY!L;6165G$.G:FK>4A$860*TJRL<F,^>2
+MGI\,>FB;>+.U)SS-)NJ?7"19\K,%AY24/+)PGE1GJO*CY8QUQ@ZURF"IH:%-
+M:5]Q7,V%9+9EQ7DA;;K2PI*@?(@CH=3-9#BOWO9UW@B1'<>F[!GN_BXO4B&2
+M?[S0]`"?$CT].F,:RJI\6SKH\^$\AZ.^V'&UI.0I)&01J53A6:TSIVM+63N?
+M=^VN%$!:C'EK^WVR4'JMI"@&VO\`[7@?/E]^J#M?U4:E[.J*R*A"6V)\8'E&
+M`5>+)_G4^B/MOM=[NFO^(UHC14`^7(&7'?\`3G='Z:^^VNR\_P`$'6V&7'5>
+IT8YY4))./%[M42\LFWZ0E8(V^=[;X5PS).VON#-]IED+#'?_`&560`H`
+B]>;EQGUYL:8/8R:X7V5=6^SZUL[YJXRWYD@M+24H4YR9"@``
+MSRDX6D>7KIH;KV]44O`3=,>DIXL$O[9EE;<9D(YUF*KT'KG2S[(F^MK1Z^CV
+M.G;=U%W&XTXA^<J"A$=:0HKP7.?F\@/T^>A+&8WJ$3<G9JJWB''L6E.;M<O@
+M*0,H473_`%5<^".F/AYYQC3KXFMV;?$SL]-W94JT0Y!3-*CDE\.,=YGX\V=*
+MZSVM,F;-XC7\6`\BSI]TM2HSH9/><A6XD\IQU&2D_0:9''K=<1[?G"#>ICRG
+MXD%QB?/:C-%QUCQ,O%M2?1?*1X3@]1I?P9_31^]:&+N7;4NHE,(>#K9Y$J'Z
+ML$8^O4?70)V.MP2XD:]X:6CRG']NO@P5+/5<-P<S?\=1\BG1?PXWK4[\V^J\
+MI6+!B,E]3!3-8[ESF2`2>7)Z>(=<Z6VV1[$[9266`$(LJI]#P'J0X'4?PAQ"
+M?II[6H6'CPY4`]B]KK>,)\\IL1&DHS^PL.-Y^K@:3\U:)^T7:W55L".NAM7:
+MJ9*MH<02FD!2D)=<Y2<'H?/RU3=K&KD[5WSMGBM"0H165"NM5(']M"E`M.G_
+M`!6`?GRZ\[0MJU9<(JR[ALO2647,"2XB,@N*`0Z%+``\\8/^M9+\A2](7.[N
+M*6_F.!0+-TXK<L+<TNL>GL-(0J0Q%:4ZM13CE'@(S@?I^>K#B'Q8O*[=E]#@
+5VBXS$W9L>QJPA*0(\DI0X5)./,H*
+MAC0E6;7WAN-FI@5D7V8[<3[VY2)\<J2W'?;1'PM/HI2"O'T.JB3MJWWALV1+
+M173$V%=15`0%M*23RN+9<3U'7P$9&LUFX@LLMS[_`+OM$2-H5>\)T:JAQ7)$
+$A+1""@``
+M6RP'7$`X/BSX4J\TYR,:X5EMN]CA!2[GK=_MUZMR[BC15QHT=&*H*5(2OF4I
+M2E.%00A1*SS'&23YZ$JO?,.OXZS]]I1%;I9Y>JGL.!3R$]P$%\H'B"<@'.,8
+MSJV@4M0[PDH]C-;=G)MT;J@JO7.Z6IB4%_:0AQ"P<*3W93U&!@@Z--S#2W`C
+M<%IN7AI!LKAYJ3-2\_'<E--A"9/=.J0'0!T\02#TZ:#-N'VUVRVW6,+1753Z
+MWL?I/>!I/\I;2?KJQX1WJ-L\`(3UE^$=J$OPL.(Y"5-.+2%8/GT'-GW:[]CJ
+5AE3_`+P<3K)E3;E\^&Z]*QU1#:\*
+M//\`=Y_()/KIJ?0LKMCVW90UNYMNS:*WCID0IK*FG4*'F",:RI3V=_P%W;]T
+M-VAV5MB2YBJM%?D6CT;6?)+B1TR<!0&/<=:_U4[KVW2;IIGZ>_K8]A!?3A;3
+"R`H`
+('S'N/QU*:PH`
+MU.@A3V<"UAB5726WVB`3R^:<^\>8UQE7<%DI:5S*4ZRIQ">4@J`!)'4=/(Z5
+MUSP`WKLZ6J9PHW;S0DDJ146KBR&Q^UMY!"T#TZ$''F3J`J^[0%4YW5APT59.
+M(&._1(CNH/\`B`&U8^:E'XZLK3(N&@GAT?#^ZER4L;;CPY,5MU*W4,C.'4EI
+M0Z#)_/Y?`'1A*GU&T=NQFI\Q+3$.,AM'.05K2A(3G'KY>?EI4-VO:"N%J9K>
+/'*:E:_\`F>E,M-'/[N4*
+M<^J5I.K7;O9WW%N:<BRXN;J5/8"@OV/7J4AA1_\`5PGG<^9.>@\1'31S2!0V
+M"S:;SM#[O36UR'8>Q8+OXZ:.B9(!_L-']6<>)0Z>@Z>>LZ:NB5-7&K8#*&(T
+J9M+;3:1@)2!@#7Q04U70U3%73P6(4-A`0VRR@)2D#W`:GZC5:6F</__9
+EOF
+    write_data_to_file($data, $path);
+}
+
+sub manifest_skip {
+    return <<'EOF';
+^\.git\/
+maint
+^tags$
+.last_cover_stats
+Makefile$
+^blib
+^pm_to_blib
+^.*.bak
+^.*.old
+^t.*sessions
+^cover_db
+^.*\.log
+^.*\.swp$
+EOF
+}
+
+sub jquery_minified {
+    return <<'EOF';
+/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
+}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
+},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
+EOF
+}
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+dancer - helper script to create new Dancer applications
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 SYNOPSIS
+
+dancer [options] -a <appname>
+
+=head1 DESCRIPTION
+
+Helper script for providing a bootstrapping method to quickly and easily create
+the framework for a new Dancer application.
+
+=head1 OPTIONS
+
+    -h, --help            : print what you are currently reading
+    -a, --application     : the name of your application
+    -p, --path            : the path where to create your application
+                              (current directory if not specified)
+    -x, --no-check        : don't check for the latest version of Dancer
+                              (checking version implies internet connection)
+    -v, --version         : print the version of dancer being used
+
+=head1 EXAMPLE
+
+Here is an application created with dancer:
+
+    $ dancer -a MyWeb::App
+    + MyWeb-App
+	+ MyWeb-App/bin
+	+ MyWeb-App/bin/app.pl
+	+ MyWeb-App/config.yml
+	+ MyWeb-App/environments
+	+ MyWeb-App/environments/development.yml
+	+ MyWeb-App/environments/production.yml
+	+ MyWeb-App/views
+	+ MyWeb-App/views/index.tt
+	+ MyWeb-App/views/layouts
+	+ MyWeb-App/views/layouts/main.tt
+	+ MyWeb-App/MANIFEST.SKIP
+	+ MyWeb-App/lib
+	+ MyWeb-App/lib/MyWeb
+	+ MyWeb-App/lib/MyWeb/App.pm
+	+ MyWeb-App/public
+	+ MyWeb-App/public/css
+	+ MyWeb-App/public/css/style.css
+	+ MyWeb-App/public/css/error.css
+	+ MyWeb-App/public/images
+	+ MyWeb-App/public/500.html
+	+ MyWeb-App/public/404.html
+	+ MyWeb-App/public/dispatch.fcgi
+	+ MyWeb-App/public/dispatch.cgi
+	+ MyWeb-App/public/javascripts
+	+ MyWeb-App/public/javascripts/jquery.min.js
+	+ MyWeb-App/t
+	+ MyWeb-App/t/002_index_route.t
+	+ MyWeb-App/t/001_base.t
+	+ MyWeb-App/Makefile.PL
+
+The application is ready to serve:
+
+    $ cd MyWeb-App
+    $ ./bin/app.pl
+    >> Listening on 127.0.0.1:3000
+    == Entering the development dance floor ...
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -0,0 +1,63 @@
+requires "Carp" => "0";
+requires "Cwd" => "0";
+requires "Data::Dumper" => "0";
+requires "Encode" => "0";
+requires "Exporter" => "0";
+requires "Fcntl" => "0";
+requires "File::Basename" => "0";
+requires "File::Copy" => "0";
+requires "File::Path" => "0";
+requires "File::Spec" => "0";
+requires "File::Spec::Functions" => "0";
+requires "File::Temp" => "0";
+requires "File::stat" => "0";
+requires "FindBin" => "0";
+requires "Getopt::Long" => "0";
+requires "HTTP::Body" => "0";
+requires "HTTP::Date" => "0";
+requires "HTTP::Headers" => "0";
+requires "HTTP::Server::Simple::PSGI" => "0";
+requires "Hash::Merge::Simple" => "0";
+requires "IO::File" => "0";
+requires "LWP::UserAgent" => "0";
+requires "MIME::Types" => "0";
+requires "Module::Runtime" => "0";
+requires "POSIX" => "0";
+requires "Pod::Usage" => "0";
+requires "Scalar::Util" => "0";
+requires "Test::Builder" => "0";
+requires "Test::More" => "0.88";
+requires "Time::HiRes" => "0";
+requires "Try::Tiny" => "0";
+requires "URI" => "0";
+requires "URI::Escape" => "0";
+requires "base" => "0";
+requires "bytes" => "0";
+requires "constant" => "0";
+requires "lib" => "0";
+requires "overload" => "0";
+requires "parent" => "0";
+requires "strict" => "0";
+requires "vars" => "0";
+requires "warnings" => "0";
+
+on 'test' => sub {
+  requires "Devel::Hide" => "0";
+  requires "File::Spec" => "0";
+  requires "HTTP::Cookies" => "0";
+  requires "HTTP::Request" => "0";
+  requires "IO::Handle" => "0";
+  requires "IPC::Open3" => "0";
+  requires "Plack::Builder" => "0";
+  requires "Test::More" => "0.88";
+  requires "perl" => "5.006";
+  requires "utf8" => "0";
+};
+
+on 'configure' => sub {
+  requires "ExtUtils::MakeMaker" => "0";
+};
+
+on 'develop' => sub {
+  requires "version" => "0.9901";
+};
@@ -0,0 +1,1821 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<Project
+  xmlns="http://usefulinc.com/ns/doap#"
+  xmlns:dc="http://purl.org/dc/terms/"
+  xmlns:foaf="http://xmlns.com/foaf/0.1/"
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+  >
+  <name>Dancer</name>
+  <shortdesc>lightweight yet powerful web application framework</shortdesc>
+  <developer>
+    <foaf:Person rdfs:label="Dancer Core Developers" />
+  </developer>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Achim Adam</foaf:name>
+      <foaf:mbox rdf:resource="mailto:achim.adam@(none).com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Adam J. Foxson</foaf:name>
+      <foaf:mbox rdf:resource="mailto:afoxson@pobox.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Adam Kennedy</foaf:name>
+      <foaf:mbox rdf:resource="mailto:adamk@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Akash Ayare</foaf:name>
+      <foaf:mbox rdf:resource="mailto:akash@hairynandgate.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Al Newkirk</foaf:name>
+      <foaf:mbox rdf:resource="mailto:github@alnewkirk.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Al Newkirk</foaf:name>
+      <foaf:mbox rdf:resource="mailto:we@ana.im" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alan Haggai Alavi</foaf:name>
+      <foaf:mbox rdf:resource="mailto:alanhaggai@alanhaggai.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alberto Simoes</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ambs@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alberto Simões</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ambs@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alessandro Ranellucci</foaf:name>
+      <foaf:mbox rdf:resource="mailto:aar@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alex C</foaf:name>
+      <foaf:mbox rdf:resource="mailto:calyx238@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alex Kalderimis</foaf:name>
+      <foaf:mbox rdf:resource="mailto:alex.kalderimis@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alex Kapranoff</foaf:name>
+      <foaf:mbox rdf:resource="mailto:kapranoff@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alex Peters</foaf:name>
+      <foaf:mbox rdf:resource="mailto:lxp@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alexis Sukrieh</foaf:name>
+      <foaf:mbox rdf:resource="mailto:sukria@sukria.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Alfie John</foaf:name>
+      <foaf:mbox rdf:resource="mailto:alfiej@opera.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Anirvan Chatterjee</foaf:name>
+      <foaf:mbox rdf:resource="mailto:anirvan@base.mx.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Anton Gerasimov</foaf:name>
+      <foaf:mbox rdf:resource="mailto:me@zyxmasta.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Ask Bjørn Hansen</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ask@develooper.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Assaf Gordon</foaf:name>
+      <foaf:mbox rdf:resource="mailto:assafgordon@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Bernhard Reutner-Fischer</foaf:name>
+      <foaf:mbox rdf:resource="mailto:rep.dot.nop@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Brian E. Lozier</foaf:name>
+      <foaf:mbox rdf:resource="mailto:brian@massassi.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Brian Hann</foaf:name>
+      <foaf:mbox rdf:resource="mailto:emailc0bra@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Brian Phillips</foaf:name>
+      <foaf:mbox rdf:resource="mailto:brian@thephillips.info" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>CPAN Service</foaf:name>
+      <foaf:mbox rdf:resource="mailto:cpanservice@chorny.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Chris Andrews</foaf:name>
+      <foaf:mbox rdf:resource="mailto:chrisandrews@venda.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Chris Seymour</foaf:name>
+      <foaf:mbox rdf:resource="mailto:chris.j.seymour@hotmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Christian Walde</foaf:name>
+      <foaf:mbox rdf:resource="mailto:walde.christian@googlemail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Colin Keith</foaf:name>
+      <foaf:mbox rdf:resource="mailto:colinmkeith@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Colin Kuskie</foaf:name>
+      <foaf:mbox rdf:resource="mailto:colink@perldreamer.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Craig Treptow</foaf:name>
+      <foaf:mbox rdf:resource="mailto:craig.treptow@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Dagfinn Ilmari Mannsåker</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ilmari@ilmari.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Damien Krotkine</foaf:name>
+      <foaf:mbox rdf:resource="mailto:dams@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Danijel Tasov</foaf:name>
+      <foaf:mbox rdf:resource="mailto:dt@korn.shell.la" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Dave Doyle</foaf:name>
+      <foaf:mbox rdf:resource="mailto:dave.s.doyle@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>David Cantrell</foaf:name>
+      <foaf:mbox rdf:resource="mailto:david@cantrell.org.uk" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>David Golden</foaf:name>
+      <foaf:mbox rdf:resource="mailto:dagolden@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>David Moreno</foaf:name>
+      <foaf:mbox rdf:resource="mailto:david@axiombox.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>David Precious</foaf:name>
+      <foaf:mbox rdf:resource="mailto:davidp@preshweb.co.uk" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>David Steinbrunner</foaf:name>
+      <foaf:mbox rdf:resource="mailto:dsteinbrunner@pobox.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>David Zurborg</foaf:name>
+      <foaf:mbox rdf:resource="mailto:zurborg@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Dennis Lichtenthaeler</foaf:name>
+      <foaf:mbox rdf:resource="mailto:dennis.lichtenthaeler@stiftung-tannenhof.de" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Duncan Hutty</foaf:name>
+      <foaf:mbox rdf:resource="mailto:dhutty@allgoodbits.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Emmanuel Rodriguez</foaf:name>
+      <foaf:mbox rdf:resource="mailto:emmanuel.rodriguez@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Fabrice Gabolde</foaf:name>
+      <foaf:mbox rdf:resource="mailto:fabrice.gabolde@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Fabrice Gabolde</foaf:name>
+      <foaf:mbox rdf:resource="mailto:fabrice.gabolde@uperto.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Fayland Lam</foaf:name>
+      <foaf:mbox rdf:resource="mailto:fayland@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Felix Dorner</foaf:name>
+      <foaf:mbox rdf:resource="mailto:felix_do@web.de" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Flavio Poletti</foaf:name>
+      <foaf:mbox rdf:resource="mailto:flavio@polettix.it" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Florian Larysch</foaf:name>
+      <foaf:mbox rdf:resource="mailto:florolf@devbraindump.de" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Florian Sojer</foaf:name>
+      <foaf:mbox rdf:resource="mailto:sojer@b1-systems.de" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Franck Cuny</foaf:name>
+      <foaf:mbox rdf:resource="mailto:franck.cuny@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>François Charlier</foaf:name>
+      <foaf:mbox rdf:resource="mailto:fcharlier@ploup.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>François Charlier</foaf:name>
+      <foaf:mbox rdf:resource="mailto:naz@pwah.(none)" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Gabor Szabo</foaf:name>
+      <foaf:mbox rdf:resource="mailto:gabor@szabgab.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Gary Mullen</foaf:name>
+      <foaf:mbox rdf:resource="mailto:garymullen@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Grzegorz Rożniecki</foaf:name>
+      <foaf:mbox rdf:resource="mailto:xaerxess@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Hagen Fuchs</foaf:name>
+      <foaf:mbox rdf:resource="mailto:github@hfuchs.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Hans Dieter Pearcey</foaf:name>
+      <foaf:mbox rdf:resource="mailto:hdp@weftsoar.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Ilmari Vacklin</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ilmari@dicole.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Ilya Chesnokov</foaf:name>
+      <foaf:mbox rdf:resource="mailto:chesnokov.ilya@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Ivan Bessarabov</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ivan@bessarabov.ru" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Ivan Paponov</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ivan.paponov@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>JT Smith</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jt@plainblack.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Jacob Rideout</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jacob.rideout@returnpath.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Jakob Voss</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jakob@nichtich.de" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>James Aitken</foaf:name>
+      <foaf:mbox rdf:resource="mailto:loonypandora@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Jesse van Herk</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jesse@imaginaryrobots.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Joel Roth</foaf:name>
+      <foaf:mbox rdf:resource="mailto:joelz@pobox.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>John Barrett</foaf:name>
+      <foaf:mbox rdf:resource="mailto:johna.barrett@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>John Wittkoski</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jwittkoski@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Jonathan &quot;Duke&quot; Leto</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jonathan@leto.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Jonathan Otsuka</foaf:name>
+      <foaf:mbox rdf:resource="mailto:djgoku@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Jonathan Scott Duff</foaf:name>
+      <foaf:mbox rdf:resource="mailto:duff@pobox.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Joshua Barratt</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jbarratt@serialized.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Juan J. Martínez</foaf:name>
+      <foaf:mbox rdf:resource="mailto:reidrac@usebox.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Jury Gorky</foaf:name>
+      <foaf:mbox rdf:resource="mailto:schwein@schwein-laptop.(none)" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Kaitlyn Parkhurst</foaf:name>
+      <foaf:mbox rdf:resource="mailto:symkat@symkat.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Kent Fredric</foaf:name>
+      <foaf:mbox rdf:resource="mailto:kentnl@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Kirk Kimmel</foaf:name>
+      <foaf:mbox rdf:resource="mailto:kimmel.k.programmer@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Lars Thegler</foaf:name>
+      <foaf:mbox rdf:resource="mailto:lars@thegler.dk" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Lee Carmichael</foaf:name>
+      <foaf:mbox rdf:resource="mailto:lecar_red@yahoo.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Lee Johnson</foaf:name>
+      <foaf:mbox rdf:resource="mailto:lee.johnson@netbanx.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>LoonyPandora</foaf:name>
+      <foaf:mbox rdf:resource="mailto:loonypandora@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Manuel Weiss</foaf:name>
+      <foaf:mbox rdf:resource="mailto:manuel@weiss.io" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Marc Chantreux</foaf:name>
+      <foaf:mbox rdf:resource="mailto:marc.chantreux@biblibre.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Mark A. Stratman</foaf:name>
+      <foaf:mbox rdf:resource="mailto:stratman@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Mark Allen</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mrallen1@yahoo.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Mark Stosberg</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mark@stosberg.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Martin Schut</foaf:name>
+      <foaf:mbox rdf:resource="mailto:github@wommm.nl" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Matthew Horsfall</foaf:name>
+      <foaf:nick>alh</foaf:nick>
+      <foaf:mbox rdf:resource="mailto:wolfsage@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Maurice</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mauricemengel@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Max Maischein</foaf:name>
+      <foaf:mbox rdf:resource="mailto:corion@corion.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Michael G. Schwern</foaf:name>
+      <foaf:mbox rdf:resource="mailto:schwern@pobox.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Michael Genereux</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mgenereu@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Michal Wojciechowski</foaf:name>
+      <foaf:mbox rdf:resource="mailto:michal@sidnet.info" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Mikolaj Kucharski</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mikolaj@kucharski.name" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Murray</foaf:name>
+      <foaf:mbox rdf:resource="mailto:murray@minty.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Natal Ngétal</foaf:name>
+      <foaf:mbox rdf:resource="mailto:hobbestigrou@erakis.im" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Nate Jones</foaf:name>
+      <foaf:mbox rdf:resource="mailto:nate@endot.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Naveed</foaf:name>
+      <foaf:mbox rdf:resource="mailto:naveed@ironcamel.(none)" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Naveed Massjouni</foaf:name>
+      <foaf:mbox rdf:resource="mailto:naveedm9@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Naveen</foaf:name>
+      <foaf:mbox rdf:resource="mailto:nmani@nashresearch.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Neil Hooey</foaf:name>
+      <foaf:mbox rdf:resource="mailto:neil@shutterstock.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Nicolas Oudard</foaf:name>
+      <foaf:mbox rdf:resource="mailto:noudard@weborama.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Oliver Gorwits</foaf:name>
+      <foaf:mbox rdf:resource="mailto:oliver@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Olivier Mengué</foaf:name>
+      <foaf:mbox rdf:resource="mailto:dolmen@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Olof Johansson</foaf:name>
+      <foaf:mbox rdf:resource="mailto:olof@ethup.se" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Ovid</foaf:name>
+      <foaf:mbox rdf:resource="mailto:curtis@weborama.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Paul Driver</foaf:name>
+      <foaf:mbox rdf:resource="mailto:frodwith@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Paul Fenwick</foaf:name>
+      <foaf:mbox rdf:resource="mailto:pjf@perltraining.com.au" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Paul Johnson</foaf:name>
+      <foaf:mbox rdf:resource="mailto:paul@pjcj.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Paul Tomlin</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ptomli@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Pedro Melo</foaf:name>
+      <foaf:mbox rdf:resource="mailto:melo@simplicidade.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Perlover</foaf:name>
+      <foaf:mbox rdf:resource="mailto:perlover@perlover.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Philippe Bruhat</foaf:name>
+      <foaf:nick>BooK</foaf:nick>
+      <foaf:mbox rdf:resource="mailto:book@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Richard Simões</foaf:name>
+      <foaf:mbox rdf:resource="mailto:rsimoes@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Rick Myers</foaf:name>
+      <foaf:mbox rdf:resource="mailto:rick@jrmyers.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Rik Brown</foaf:name>
+      <foaf:mbox rdf:resource="mailto:rik@rikbrown.co.uk" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Roberto Patriarca</foaf:name>
+      <foaf:mbox rdf:resource="mailto:rp@staged.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Roman Galeev</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ip@ncom-ufa.ru" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Roman Nuritdinov</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ky6uk.kun@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Rowan Thorpe</foaf:name>
+      <foaf:mbox rdf:resource="mailto:rowanthorpe@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Sam Kington</foaf:name>
+      <foaf:mbox rdf:resource="mailto:github@illuminated.co.uk" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Sapphire Paw</foaf:name>
+      <foaf:mbox rdf:resource="mailto:devel@sapphirepaw.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Sawyer X</foaf:name>
+      <foaf:mbox rdf:resource="mailto:xsawyerx@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Scott Penrose</foaf:name>
+      <foaf:mbox rdf:resource="mailto:scott.penrose@(none)" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Sebastian de Castelberg</foaf:name>
+      <foaf:mbox rdf:resource="mailto:sebu@kpricorn.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Skeeve</foaf:name>
+      <foaf:mbox rdf:resource="mailto:github.mails.skeeve@xoxy.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Squeeks</foaf:name>
+      <foaf:mbox rdf:resource="mailto:squeek@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Stefan Hornburg</foaf:name>
+      <foaf:nick>Racke</foaf:nick>
+      <foaf:mbox rdf:resource="mailto:racke@linuxia.de" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Tatsuhiko Miyagawa</foaf:name>
+      <foaf:mbox rdf:resource="mailto:miyagawa@bulknews.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Tim King</foaf:name>
+      <foaf:mbox rdf:resource="mailto:timk@JTimothyKing.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Tom Heady</foaf:name>
+      <foaf:mbox rdf:resource="mailto:tom@punch.net" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Tom Hukins</foaf:name>
+      <foaf:mbox rdf:resource="mailto:tom@eborcom.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Tom Wyant</foaf:name>
+      <foaf:mbox rdf:resource="mailto:wyant@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Vyacheslav Matyukhin</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mmcleric@yandex-team.ru" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>William Wolf</foaf:name>
+      <foaf:mbox rdf:resource="mailto:throughnothing@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Xaerxess</foaf:name>
+      <foaf:mbox rdf:resource="mailto:xaerxess@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>YOUR_NAME</foaf:name>
+      <foaf:mbox rdf:resource="mailto:YOUR_EMAIL" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Yanick Champoux</foaf:name>
+      <foaf:mbox rdf:resource="mailto:yanick@cpan.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>Zefram</foaf:name>
+      <foaf:mbox rdf:resource="mailto:zefram@fysh.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>a-adam</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ac@univie.ac.at" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>andy</foaf:name>
+      <foaf:mbox rdf:resource="mailto:andy@broadbean.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>asergei</foaf:name>
+      <foaf:mbox rdf:resource="mailto:asergei@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>boris shomodjvarac</foaf:name>
+      <foaf:mbox rdf:resource="mailto:shomodj@oginwm09.(none)" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>brian</foaf:name>
+      <foaf:mbox rdf:resource="mailto:brian@massassi.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>burnersk</foaf:name>
+      <foaf:mbox rdf:resource="mailto:burnersk@(none.com)" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>chromatic</foaf:name>
+      <foaf:mbox rdf:resource="mailto:chromatic@wgz.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>franck cuny</foaf:name>
+      <foaf:mbox rdf:resource="mailto:franck.cuny@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>geistteufel</foaf:name>
+      <foaf:mbox rdf:resource="mailto:geistteufel@yahoo.fr" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>isync</foaf:name>
+      <foaf:mbox rdf:resource="mailto:o.zucker@web.de" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>jamhed</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ip@ncom-ufa.ru" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>jamhed</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jamhed@lenobook.jh" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>jamhed.nb</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ip@ncom-ufa.ru" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>jonasreinsch</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jonas.reinsch@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>jonathan schatz</foaf:name>
+      <foaf:mbox rdf:resource="mailto:jon@divisionbyzero.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>miyagawa</foaf:name>
+      <foaf:mbox rdf:resource="mailto:miyagawa@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>mlbarrow</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mlbarrow@(none)" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>mokko</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mauricemengel@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>niko</foaf:name>
+      <foaf:mbox rdf:resource="mailto:nikomomo@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>pdl</foaf:name>
+      <foaf:mbox rdf:resource="mailto:perrettdl@googlemail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>ppisar</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ppisar@(none)" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>rowanthorpe</foaf:name>
+      <foaf:mbox rdf:resource="mailto:rowanthorpe@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>scoopio</foaf:name>
+      <foaf:mbox rdf:resource="mailto:valiouk@yahoo.co.uk" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>sdeseille</foaf:name>
+      <foaf:mbox rdf:resource="mailto:sebastien.deseille@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>sebastian de castelberg</foaf:name>
+      <foaf:mbox rdf:resource="mailto:sebu@kpricorn.org" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>smashz</foaf:name>
+      <foaf:mbox rdf:resource="mailto:mestre.smash@gmail.com" />
+    </foaf:Person>
+  </helper>
+  <helper>
+    <foaf:Person>
+      <foaf:name>tednolan</foaf:name>
+      <foaf:mbox rdf:resource="mailto:tednolan@(none).com" />
+    </foaf:Person>
+  </helper>
+  <license rdf:resource="http://dev.perl.org/licenses/" />
+  <homepage rdf:resource="http://search.cpan.org/dist/Dancer/" />
+  <bug-database rdf:resource="https://github.com/PerlDancer/Dancer/issues" />
+  <repository>
+    <GitRepository>
+      <browse rdf:resource="https://github.com/PerlDancer/Dancer" />
+      <location rdf:resource="https://github.com/PerlDancer/Dancer.git" />
+    </GitRepository>
+  </repository>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.9003</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-01-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.9004</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-01-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.9005</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-01-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.9906</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-01-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.000</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-01-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.100</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-01-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.110</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-01-11</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.120</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-01-15</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.121</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-01-15</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.122</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-01-16</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.130</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-01-29</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.140</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-02-09</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.150</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-02-17</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.160</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-03-07</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.170</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-03-24</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.171</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-03-24</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.172</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-03-28</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.173</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-04-04</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.173_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-04-04</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.174</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-04-08</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.175</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-04-11</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.175_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-04-19</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.176</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-04-22</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.178_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-05-05</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.178_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-05-11</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1800</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-05-16</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1801</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-05-19</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1802</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-05-19</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1803</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-05-23</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1804</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-06-18</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1805</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-06-22</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1806_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-08-15</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1806_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-08-16</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1807</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-08-23</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1808</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-08-24</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1809</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-08-25</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1810</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-09-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1811</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-09-03</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1812</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-09-21</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1901</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-09-24</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1902</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-11-02</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1903</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-01-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1904</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-01-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1999_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-10-14</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1999_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-10-15</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1999_03</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-11-11</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.1999_04</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-11-14</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.2000</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-01-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.2001</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-11-30</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.2001_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-12-02</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.2002</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-01-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.2002_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-12-07</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.2002_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-12-08</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.2003</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-12-10</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3000_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-12-22</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3000_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-01-03</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3001</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-01-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3002</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-02-02</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3003</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2011</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3010</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2011</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3010_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2011</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3011</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2011</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3012</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-03-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3013</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-03-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3014</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-03-04</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3014_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-03-10</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3019_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-03-13</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3019_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-03-14</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3020</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-03-21</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3029_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-04-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3029_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-04-08</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3029_03</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-04-10</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3030</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-04-13</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3039_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-04-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3040</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-05-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3049_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-05-14</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3050</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-05-20</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3051</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-05-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3059_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-05-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3059_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-05-29</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3059_03</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-06-11</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3059_04</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-06-12</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3060</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-06-15</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3069_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-07-07</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3069_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-07-10</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3070</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-07-14</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3071</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-07-26</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3072</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-08-23</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3079_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-08-17</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3079_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-08-28</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3079_03</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-09-10</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3079_04</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-10-02</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3079_05</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-10-02</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3080</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-10-25</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3089_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-11-26</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3090</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-12-13</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3091</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2011-12-17</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3092</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-01-27</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3093</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-02-29</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3094</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-03-31</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3095</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-04-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3095_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-06-22</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3095_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-07-03</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3096</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-07-06</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3097</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-07-08</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3098</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-07-28</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3099</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-08-11</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3100</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-08-25</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3110</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-10-06</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3111</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-02-24</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3111_01</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-03-30</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3111_02</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-04-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3112</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-04-10</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3113</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-05-08</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3114</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-06-02</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3115</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-06-09</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3116</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-07-03</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3117</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-07-31</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3118</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-09-01</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3119</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-10-26</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3120</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2013-12-24</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3121</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-02-02</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3122</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-04-10</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3123</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-04-12</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3124</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-05-09</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3125</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-07-12</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3126</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-07-14</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3127</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-09-08</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3128</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-09-09</dc:issued>
+    </Version>
+  </release>
+  <release>
+    <Version>
+      <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.3129</revision>
+      <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2014-09-09</dc:issued>
+    </Version>
+  </release>
+  <programming-language>Perl</programming-language>
+</Project>
@@ -1,5 +1,8 @@
 package Dancer::App;
-
+BEGIN {
+  $Dancer::App::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::App::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -236,3 +239,30 @@ sub _set_settings {
 
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::App
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Config::Object;
-
+BEGIN {
+  $Dancer::Config::Object::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Access the config via methods instead of hashrefs
+$Dancer::Config::Object::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -101,6 +105,10 @@ __END__
 
 Dancer::Config::Object - Access the config via methods instead of hashrefs
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 If C<strict_config> is set to a true value in the configuration, the
@@ -170,4 +178,15 @@ itself.
 
 L<Dancer> and L<Dancer::Config>.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,10 +1,15 @@
 package Dancer::Config;
-
+BEGIN {
+  $Dancer::Config::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT:  how to configure Dancer to suit your needs
+$Dancer::Config::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Exporter';
 use vars '@EXPORT_OK';
 
+use Hash::Merge::Simple;
 use Dancer::Config::Object 'hashref_to_object';
 use Dancer::Deprecation;
 use Dancer::Template;
@@ -224,24 +229,17 @@ sub load {
 sub load_settings_from_yaml {
     my ($file) = @_;
 
-    my $config;
+    my $config = eval { YAML::LoadFile($file) }
+        or confess "Unable to parse the configuration file: $file: $@";
 
-    eval { $config = YAML::LoadFile($file) };
-    if (my $err = $@ || (!$config)) {
-        confess "Unable to parse the configuration file: $file: $@";
+    # groom the values of $config
+    while( my ($k,$v) = each %$config ) {
+        $config->{$k} = Dancer::Config->normalize_setting($k,$v);
     }
 
-    for my $key (keys %{$config}) {
-        if ($MERGEABLE{$key}) {
-            my $setting = setting($key);
-            $setting->{$_} = $config->{$key}{$_} for keys %{$config->{$key}};
-        }
-        else {
-            _set_setting($key, $config->{$key});
-        }
-    }
+    $SETTINGS = Hash::Merge::Simple::merge( $SETTINGS, $config );
 
-    return scalar(keys %$config);
+    return scalar keys %$config;
 }
 
 sub load_default_settings {
@@ -249,13 +247,13 @@ sub load_default_settings {
     $SETTINGS->{port}          ||= $ENV{DANCER_PORT}          || '3000';
     $SETTINGS->{content_type}  ||= $ENV{DANCER_CONTENT_TYPE}  || 'text/html';
     $SETTINGS->{charset}       ||= $ENV{DANCER_CHARSET}       || '';
-    $SETTINGS->{startup_info}  ||= $ENV{DANCER_STARTUP_INFO}  || 1;
+    $SETTINGS->{startup_info}  ||= !$ENV{DANCER_NO_STARTUP_INFO};
     $SETTINGS->{daemon}        ||= $ENV{DANCER_DAEMON}        || 0;
     $SETTINGS->{apphandler}    ||= $ENV{DANCER_APPHANDLER}    || 'Standalone';
     $SETTINGS->{warnings}      ||= $ENV{DANCER_WARNINGS}      || 0;
     $SETTINGS->{auto_reload}   ||= $ENV{DANCER_AUTO_RELOAD}   || 0;
     $SETTINGS->{traces}        ||= $ENV{DANCER_TRACES}        || 0;
-    $SETTINGS->{server_tokens} ||= $ENV{DANCER_SERVER_TOKENS} || 1;
+    $SETTINGS->{server_tokens} ||= !$ENV{DANCER_NO_SERVER_TOKENS};
     $SETTINGS->{logger}        ||= $ENV{DANCER_LOGGER}        || 'file';
     $SETTINGS->{environment}   ||=
          $ENV{DANCER_ENVIRONMENT}
@@ -274,10 +272,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Config - how to configure Dancer to suit your needs
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 Dancer::Config handles reading and changing the configuration of your Dancer
@@ -302,6 +306,12 @@ exists in the application directory, it will be loaded, as a setting group.
 The same is done for the environment file located in the B<environments>
 directory.
 
+To fetch the available configuration values use the B<config> keyword that returns
+a reference to a hash:
+
+    my $port   = config->{port};
+    my $appdir = config->{appdir};
+
 =head1 SUPPORTED SETTINGS
 
 =head2 Run mode and listening interface/port
@@ -385,7 +395,6 @@ have a lot of files being served in the B<public> folder that do not
 have an extension, and are text files, set the C<default_mime_type> to
 C<text/plain>.
 
-
 =head2 File / directory locations
 
 =head3 environment (string)
@@ -437,7 +446,6 @@ use Template Toolkit, add the following to C<config.yml>:
 
     template: template_toolkit
 
-
 =head3 layout (string)
 
 The name of the layout to use when rendering view. Dancer will look for
@@ -446,7 +454,6 @@ a matching template in the directory $views/layout.
 Your can override the default layout using the third argument of the
 C<template> keyword. Check C<Dancer> manpage for details.
 
-
 =head2 Logging, debugging and error handling
 
 =head3 strict_config (boolean, default: false)
@@ -457,23 +464,24 @@ L<Dancer::Config::Object> for more information.
 =head3 global_warnings (boolean, default: false)
 
 If true, C<use warnings> will be in effect for all modules and scripts loaded
-by your Dancer application.  Set to a true value to enable this.
+by your Dancer application. Default is false.
 
 =head3 startup_info (boolean)
 
-If set to true, prints a banner at the server start with information such as
+If set to true (the default), prints a banner at server startup with information such as
 versions and the environment (or "dancefloor").
 
-Conforms to the environment variable DANCER_STARTUP_INFO.
+Can also be disabled by setting the environment variable DANCER_NO_STARTUP_INFO to
+a true value.
 
 =head3 warnings (boolean)
 
-If set to true, tells Dancer to consider all warnings as blocking errors.
+If set to true, tells Dancer to consider all warnings as blocking errors. Default is false.
 
 =head3 traces (boolean)
 
 If set to true, Dancer will display full stack traces when a warning or a die
-occurs. (Internally sets Carp::Verbose). Default to false.
+occurs. (Internally sets Carp::Verbose). Default is false.
 
 =head3 require_environment (boolean)
 
@@ -484,10 +492,11 @@ Default to false.
 
 =head3 server_tokens (boolean)
 
-If set to true, Dancer will add an "X-Powered-By" header and also append
-the Dancer version to the "Server" header. Default to true.
+If set to true (the default), Dancer will add an "X-Powered-By" header and also append
+the Dancer version to the "Server" header.
 
-You can also use the environment variable C<DANCER_SERVER_TOKENS>.
+Can also be disabled by setting the environment variable C<DANCER_NO_SERVER_TOKENS> to
+a true value.
 
 =head3 log_path (string)
 
@@ -537,7 +546,6 @@ During development, you'll probably want to use C<debug> to see your own debug
 messages, and C<core> if you need to see what Dancer is doing.  In production,
 you'll likely want C<error> or C<warning> only, for less-chatty logs.
 
-
 =head3 show_errors (boolean)
 
 If set to true, Dancer will render a detailed debug screen whenever an error is
@@ -549,7 +557,6 @@ The error screen attempts to sanitise sensitive looking information (passwords /
 card numbers in the request, etc) but you still should not have show_errors
 enabled whilst in production, as there is still a risk of divulging details.
 
-
 =head3 error_template (template path)
 
 This setting lets you specify a template to be used in case of runtime
@@ -571,7 +578,6 @@ The code throwing that error.
 
 =back
 
-
 =head3 auto_reload (boolean)
 
 Requires L<Module::Refresh> and L<Clone>.
@@ -627,7 +633,6 @@ override the default.  This is useful for setting the session cookie's
 domain to something like C<.domain.com> so that the same cookie will
 be applicable and usable across subdomains of a base domain.
 
-
 =head2 auto_page (boolean)
 
 For simple pages where you're not doing anything dynamic, but still
@@ -657,17 +662,16 @@ so don't use the feature for anything else.
 
 =head3 route_cache (boolean)
 
-Enables route caching (for quicker route resolution on larger apps - not caching
-of responses).  See L<Dancer::Route::Cache> for details.
+If true, enables route caching (for quicker route resolution on larger apps - not caching
+of responses).  See L<Dancer::Route::Cache> for details. Default is false.
 
 =head3 route_cache_size_limit (bytes)
 
-Maximum size of route cache (e.g. 1024, 2M) - see L<Dancer::Route::Cache>
+Maximum size of route cache (e.g. 1024, 2M). Defaults to 10M (10MB) - see L<Dancer::Route::Cache>
 
 =head3 route_cache_path_limit (number)
 
-Maximum number of routes to cache - see L<Dancer::Route::Cache>
-
+Maximum number of routes to cache. Defaults to 600 - see L<Dancer::Route::Cache>
 
 =head2 DANCER_CONFDIR and DANCER_ENVDIR
 
@@ -694,4 +698,15 @@ itself.
 
 L<Dancer>
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,8 @@
 package Dancer::Continuation::Halted;
-
+BEGIN {
+  $Dancer::Continuation::Halted::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Continuation::Halted::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -7,3 +10,30 @@ use Carp;
 use base qw(Dancer::Continuation);
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Continuation::Halted
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Continuation::Route::ErrorSent;
-
+BEGIN {
+  $Dancer::Continuation::Route::ErrorSent::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Continuation::Route::ErrorSent::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -7,3 +10,30 @@ use Carp;
 use base qw(Dancer::Continuation::Route);
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Continuation::Route::ErrorSent
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Continuation::Route::FileSent;
-
+BEGIN {
+  $Dancer::Continuation::Route::FileSent::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Continuation::Route::FileSent::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -7,3 +10,30 @@ use Carp;
 use base qw(Dancer::Continuation::Route);
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Continuation::Route::FileSent
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Continuation::Route::Forwarded;
-
+BEGIN {
+  $Dancer::Continuation::Route::Forwarded::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Continuation::Route::Forwarded::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -7,3 +10,30 @@ use Carp;
 use base qw(Dancer::Continuation::Route);
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Continuation::Route::Forwarded
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Continuation::Route::Passed;
-
+BEGIN {
+  $Dancer::Continuation::Route::Passed::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Continuation::Route::Passed::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -7,3 +10,30 @@ use Carp;
 use base qw(Dancer::Continuation::Route);
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Continuation::Route::Passed
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Continuation::Route::Templated;
-
+BEGIN {
+  $Dancer::Continuation::Route::Templated::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Continuation::Route::Templated::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -7,3 +10,30 @@ use Carp;
 use base qw(Dancer::Continuation::Route);
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Continuation::Route::Templated
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Continuation::Route;
-
+BEGIN {
+  $Dancer::Continuation::Route::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Continuation::Route::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -15,3 +18,30 @@ sub return_value { $#_ ? $_[0]->{return_value} = $_[1] : $_[0]->{return_value} }
 
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Continuation::Route
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Continuation;
-
+BEGIN {
+  $Dancer::Continuation::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Continuation::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -14,3 +17,30 @@ sub throw { die shift }
 sub rethrow { die shift }
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Continuation
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,14 +1,25 @@
+# PODNAME: Dancer::Cookbook
+# ABSTRACT: a quick-start guide to the Dancer web framework
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Cookbook - a quick-start guide to the Dancer web framework
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 A quick-start guide with examples to get you up and running with the Dancer web
 framework.
 
-
-
 =head1 BEGINNER'S DANCE
 
 =head2 Your first Dancer web app
@@ -43,8 +54,6 @@ already loaded by Dancer.  (If you don't want the C<warnings> pragma (which can
 lead to undesired warnings about use of undef values, for example), then set the
 L<import_warnings|Dancer::Config/import_warnings> setting to a false value.
 
-
-
 =head2 Starting a Dancer project
 
 The first simple example is fine for trivial projects, but for anything more
@@ -77,7 +86,7 @@ command:
     + mywebapp/public/dispatch.fcgi
     + mywebapp/public/dispatch.cgi
     + mywebapp/public/javascripts
-    + mywebapp/public/javascripts/jquery.js
+    + mywebapp/public/javascripts/jquery.min.js
     + mywebapp/t
     + mywebapp/t/002_index_route.t
     + mywebapp/t/001_base.t
@@ -89,8 +98,6 @@ will live), an environments directory (where environment-specific settings
 live), a module containing the actual guts of your application, a script to
 start it - or to run your web app via Plack/PSGI - more on that later.
 
-
-
 =head1 DANCE ROUTINES: ROUTES
 
 =head2 Declaring routes
@@ -126,8 +133,6 @@ The following will match GET or POST requests to /myaction:
 For convenience, any route which matches GET requests will also match HEAD
 requests.
 
-
-
 =head2 Retrieving request parameters
 
 The L<params|Dancer/params> keyword returns a hashref of request parameters; 
@@ -135,8 +140,6 @@ these will be parameters supplied on the query string, within the path itself
 (with named placeholders), and, for HTTP POST requests, the content of the 
 POST body.
 
-
-
 =head2 Named parameters in route path declarations
 
 As seen above, you can use C<:somename> in a route's path to capture part of the
@@ -150,8 +153,6 @@ use something like:
         # Look up the company and return appropriate page
     };
 
-
-
 =head2 Wildcard path matching and splat
 
 You can also declare wildcards in a path, and retrieve the values they matched
@@ -169,8 +170,6 @@ with the L<splat|Dancer/splat> keyword:
         }
     };
 
-
-
 =head2 Before hooks - processed before a request
 
 A before L<hook|Dancer/hook> declares code which should be handled before 
@@ -213,7 +212,6 @@ Then you can set up the template as such:
 
     Please try again or contact us at our email at <...>.
 
-
 =head2 Using the auto_page feature for automatic route creation
 
 For simple "static" pages, you can simply enable the C<auto_page> config
@@ -223,8 +221,6 @@ C</foo/bar.tt> and render it with the default layout etc if found.  For full
 details, see the documentation for the 
 L<auto_page setting|Dancer::Config/"auto_page">.
 
-
-
 =head2 Why should I use the Ajax plugin
 
 As an Ajax query is just a HTTP query, it's similar to a GET or POST
@@ -262,12 +258,9 @@ and
          to_xml({...}, RootName => undef);
     }
 
-
 Because it's an ajax query, you know you need to return a xml content,
 so the content type of the response is set for you.
 
-
-
 =head2 Using the prefix feature to split your application
 
 For better maintainability, you may want to separate some of your application
@@ -300,8 +293,6 @@ The following routes will be generated for us:
     - head /
     - head /admin/
 
-
-
 =head1 MUSCLE MEMORY: STORING DATA
 
 =head2 Handling sessions
@@ -312,7 +303,6 @@ session on subsequent requests.
 
 To make use of sessions, you must first enable the session engine - pick the
 session engine you want to use, then declare it in your config file:
-config file, add:
 
     session: Simple
 
@@ -345,8 +335,6 @@ Storing data in the session is as easy as:
 
     session varname => 'value';
 
-
-
 =head3 Retrieving data from the session
 
 Retrieving data from the session is as easy as:
@@ -357,8 +345,6 @@ Or, alternatively,
 
     session->{varname}
 
-
-
 =head3 Controlling where sessions are stored
 
 For disc-based session back ends like L<Dancer::Session::YAML>,
@@ -374,8 +360,6 @@ and easily within your config file, for example:
 If the directory you specify does not exist, Dancer will attempt to create it
 for you.
 
-
-
 =head3 Destroying a session
 
 When you're done with your session, you can destroy it:
@@ -448,16 +432,12 @@ wouldn't store your users passwords in the clear, would you?)) follows:
         }
     };
 
-
-
 =head3 Retrieve complete hash stored in session
 
 Get complete hash stored in session:
 
     my $hash = session;
 
-
-
 =head1 APPEARANCE
 
 =head2 Using templates - views and layouts
@@ -572,8 +552,6 @@ Then in your layout, modify your css inclusion as follows:
 From now on, you can mount your application wherever you want, without
 any further modification of the css inclusion
 
-
-
 =head3 template and unicode
 
 If you use L<Plack> and have some unicode problem with your Dancer application,
@@ -586,8 +564,6 @@ config.yml will look like this:
       template_toolkit:
         ENCODING: utf8
 
-
-
 =head3 TT's WRAPPER directive in Dancer (META variables, SETs)
 
 Dancer already provides a WRAPPER-like ability, which we call a "layout". The
@@ -626,8 +602,6 @@ Change the configuration of the template to Template Toolkit:
 Done! Everything will work fine out of the box, including variables and META
 variables.
 
-
-
 =head1 SETTING THE STAGE: CONFIGURATION AND LOGGING
 
 =head2 Configuration and environments
@@ -656,7 +630,7 @@ That way, the appropriate environment config file will be loaded according to
 the running environment (if none is specified, it will be 'development').
 
 Note that you can change the running environment using the C<--environment>
-commandline switch.
+command line switch.
 
 Typically, you'll want to set the following values in a development config file:
 
@@ -672,8 +646,6 @@ And in a production one:
     startup_info: 0
     show_errors:  0
 
-
-
 =head2 Accessing configuration information from your app
 
 A Dancer application can use the 'config' keyword to easily access the settings
@@ -686,8 +658,6 @@ within its config file, for instance:
 This makes keeping your application's settings all in one place simple and easy
 - you shouldn't need to worry about implementing all that yourself :)
 
-
-
 =head2 Accessing configuration information from a separate script
 
 You may well want to access your webapp's configuration from outside your
@@ -756,8 +726,6 @@ like we do above with config->{environment}='production'. Of course, this value
 does not get written in any file; it only lives in memory and your webapp
 doesn't have access to it, but you can use it inside your script.
 
-
-
 =head2 Logging
 
 =head3 Configuring logging
@@ -857,8 +825,6 @@ For examples on deploying your Dancer applications (including standalone, behind
 proxy/load-balancing software, and using common web servers including Apache to
 run via CGI/FastCGI etc, see L<Dancer::Deployment>.
 
-
-
 =head1 DANCER ON THE STAGE: DEPLOYMENT
 
 =head2 Plack middlewares
@@ -908,3 +874,16 @@ C<plack_middlewares_map>. You'll need L<Plack::App::URLMap> to do that.
 =head1 AUTHORS
 
 Dancer contributors - see AUTHORS file.
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,4 +1,9 @@
 package Dancer::Cookie;
+BEGIN {
+  $Dancer::Cookie::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: class representing cookies
+$Dancer::Cookie::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -121,10 +126,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Cookie - class representing cookies
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     use Dancer::Cookie;
@@ -208,15 +219,13 @@ Creates a proper HTTP cookie header from the content.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,4 +1,9 @@
 package Dancer::Cookies;
+BEGIN {
+  $Dancer::Cookies::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: a singleton storage for all cookies
+$Dancer::Cookies::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -36,11 +41,16 @@ sub parse_cookie_from_env {
         # a cookie string can contains something like:
         # cookie_name="foo=bar"
         # we want `cookie_name' as the value and `foo=bar' as the value
-        my( $name,$value ) = split(/\s*=\s*/, $cookie, 2);
+        my( $name, $value ) = split /\s*=\s*/, $cookie, 2;
+
+        # catch weird entries like 'cookie1=foo;;cookie2=bar'
+        next unless length $name;
+
         my @values;
         if ( defined $value && $value ne '' ) {
             @values = map { uri_unescape($_) } split( /[&;]/, $value );
         }
+
         $cookies->{$name} =
           Dancer::Cookie->new( name => $name, value => \@values );
     }
@@ -71,10 +81,18 @@ sub set_cookie_object {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Cookies - a singleton storage for all cookies
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     use Dancer::Cookies;
@@ -129,15 +147,13 @@ It also returns all the hashref it created.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,7 +1,20 @@
+# PODNAME: Dancer::Deployment
+# ABSTRACT: common ways to put your Dancer app into use
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Deployment - common ways to put your Dancer app into use
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 Dancer has been designed to be flexible, and this flexibility extends to your
@@ -235,7 +248,6 @@ A basic PSGI service description (usually in /etc/ubic/service/application):
 
 Run C<ubic start application> to start the service.
 
-
 =head4 Using daemontools
 
 daemontools is a collection of tools for managing UNIX services. You can use it
@@ -251,7 +263,6 @@ A basic script to start an application: (in /service/application/run)
     exec 2>&1 \
     /usr/local/bin/plackup -s Starman -a /path/to/your/application/app.pl -p 5000
 
-
 =head3 Running stand-alone behind a proxy / load balancer
 
 Another option would be to run your app stand-alone as described above, but then
@@ -332,7 +343,6 @@ provided with perlbal, but you'll probably want something like:
     SET verify_backend  = on
     ENABLE my_webapp
 
-
 =head4 Using balance
 
 C<balance> is a simple load-balancer from Inlab Software, available from
@@ -352,7 +362,6 @@ multiple Dancer apps on multiple other machines:
 
     balance -b 10.0.0.1 80 10.0.0.2:3000 10.0.0.3:3000 10.0.0.4:3000
 
-
 =head4 Using Lighttpd
 
 You can use Lighttp's mod_proxy:
@@ -503,12 +512,10 @@ A psgi chef cookbook supporting Dancer (as well as I<Catalyst>)
 written by Alexey Melezhik is available
 at L<http://community.opscode.com/cookbooks/psgi>.
 
-
 =head2 Running from Apache
 
 You can run your Dancer app from Apache using the following examples:
 
-
 =head3 Running from Apache with Plack
 
 You can run your app from Apache using PSGI (Plack), with a config like the
@@ -527,7 +534,7 @@ following:
 
         <Location />
             SetHandler perl-script
-            PerlHandler Plack::Handler::Apache2
+            PerlResponseHandler Plack::Handler::Apache2
             PerlSetVar psgi_app /websites/myapp.example.com/app.pl
         </Location>
 
@@ -588,7 +595,6 @@ Of course, if your Apache configuration allows that, you can put the
 RewriteRules in a .htaccess file directly within the application's directory,
 which lets you add a new application without changing the Apache configuration.
 
-
 =head2 Running on lighttpd (CGI)
 
 To run as a CGI app on lighttpd, just create a soft link to the dispatch.cgi
@@ -636,3 +642,15 @@ Launch your application:
 
     plackup -s FCGI --listen /tmp/fcgi.sock bin/app.pl
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Deprecation;
-
+BEGIN {
+  $Dancer::Deprecation::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: handle deprecation messages
+$Dancer::Deprecation::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -32,10 +36,20 @@ sub deprecated {
 
 1;
 
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Deprecation - handle deprecation messages
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
   Dancer::Deprecation->deprecated(
@@ -81,4 +95,15 @@ This module has been written by Alexis Sukrieh <sukria@sukria.net>
 
 L<Package::DeprecationManager>
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,7 +1,20 @@
+#PODNAME: Dancer::Development::Integration
+#ABSTRACT: guide for Dancer's core-team members
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Development::Integration - guide for Dancer's core-team members
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This documentation describes the procedure used for integrators to review and
@@ -16,7 +29,7 @@ ways of handling the (increasing number!) of pull requests.
 We will first define the most important terms used in this
 documentation:
 
-=over 
+=over
 
 =item * B<PR> 
 
@@ -69,7 +82,6 @@ when working on a feature, we're going to do that in a topic branch,
 named C<review/$user>. Then, this branch will be merged into C<devel>
 and we will just have to drop it.
 
-
 First, we make sure we are in sync with C<origin/devel>
 
     git checkout devel
@@ -186,4 +198,15 @@ bumping the version number to 1.5000_01
 
 This documentation has been written by Alexis Sukrieh C<< <sukria@sukria.net> >>.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,8 +1,20 @@
+# PODNAME: Dancer::Development
+# ABSTRACT: guide for developers interested in contributing
+
+__END__
+
+=pod
+
+=encoding UTF-8
 
 =head1 NAME
 
 Dancer::Development - guide for developers interested in contributing
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This guide has been written to help anyone interested in contributing to the
@@ -48,7 +60,7 @@ providing assistance to new users is incredibly valuable.
 
 =item *
 
-Mailing list: L<http://lists.perldancer.org/cgi-bin/listinfo/dancer-users> to
+Mailing list: L<http://lists.preshweb.co.uk/mailman/listinfo/dancer-users> to
 subscribe or view archives
 
 =item *
@@ -247,7 +259,7 @@ but with the C<frozen> branch.
 =head2 Mailing Lists
 
 A mailing list is available here:
-L<http://lists.perldancer.org/cgi-bin/listinfo/dancer-users>
+L<http://lists.preshweb.co.uk/mailman/listinfo/dancer-users>
 
 =head2 IRC Channels
 
@@ -339,3 +351,16 @@ L<https://github.com/PerlDancer/Dancer/blob/master/TODO>.
 =head1 AUTHOR
 
 This document has been written by Alexis Sukrieh L<sukria@cpan.org>
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Engine;
-
+BEGIN {
+  $Dancer::Engine::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: base class for Dancer engines
+$Dancer::Engine::VERSION = '1.3130';
 # This is the base-class of every engine abstract class.
 # This allow us to put in that single place the engine creation
 # from a namespace and a name, to its configuration initialization.
@@ -85,10 +89,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Engine - base class for Dancer engines
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     my $engine = Dancer::Engine->build( Serializer => 'JSON', $configuration );
@@ -137,15 +147,13 @@ Builds and returns the engine.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Error;
-
+BEGIN {
+  $Dancer::Error::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: class for representing fatal errors
+$Dancer::Error::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -118,13 +122,16 @@ sub dumper {
 
 
     # Take a copy of the data, so we can mask sensitive-looking stuff:
-    my %data     = Dancer::ModuleLoader->load('Clone') ?
-                   %{ Clone::clone($obj) }             :
-                   %$obj;
-    my $censored = _censor(\%data);
+    my $data     = Dancer::ModuleLoader->load('Clone') ?
+                   Clone::clone($obj)
+                   : eval Data::Dumper->new([$obj])->Purity(1)->Terse(1)->Deepcopy(1)->Dump;
+
+    $data = {%$data} if blessed($data); 
+
+	my $censored = _censor($data);
 
     #use Data::Dumper;
-    my $dd = Data::Dumper->new([\%data]);
+    my $dd = Data::Dumper->new([$data]);
     $dd->Terse(1)->Quotekeys(0)->Indent(1)->Sortkeys(1);
     my $content = $dd->Dump();
     $content =~ s{(\s*)(\S+)(\s*)=>}{$1<span class="key">$2</span>$3 =&gt;}g;
@@ -314,10 +321,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Error - class for representing fatal errors
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     # taken from send_file:
@@ -437,15 +450,13 @@ FIXME : this is not true anymore, output can be any charset. Need fixing.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Exception::Base;
-
+BEGIN {
+  $Dancer::Exception::Base::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: the base class of all Dancer exceptions
+$Dancer::Exception::Base::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -97,10 +101,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Exception::Base - the base class of all Dancer exceptions
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 Dancer::Exception::Base is the base class of all Dancer exception. All core
@@ -212,3 +222,16 @@ is similar to C<$Carp::Verbose>. I recommend you use it like that:
 
 All the L<Carp> global variables can also be used to alter the stacktrace
 generation.
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Exception;
-
+BEGIN {
+  $Dancer::Exception::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: class for throwing and catching exceptions
+$Dancer::Exception::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -129,10 +133,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Exception - class for throwing and catching exceptions
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     use Dancer::Exception qw(:all);
@@ -158,8 +168,6 @@ Dancer::Exception - class for throwing and catching exceptions
       }
     };
 
-
-
 =head1 DESCRIPTION
 
 Dancer::Exception is based on L<Try::Tiny>. You can try and catch exceptions,
@@ -276,3 +284,16 @@ is similar to C<$Carp::Verbose>. I recommend you use it like that:
 
 All the L<Carp> global variables can also be used to alter the stacktrace
 generation.
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Factory::Hook;
-
+BEGIN {
+  $Dancer::Factory::Hook::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Factory::Hook::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -75,3 +78,30 @@ sub get_hooks_for {
 
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Factory::Hook
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::FileUtils;
-
+BEGIN {
+  $Dancer::FileUtils::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: helper providing file utilities
+$Dancer::FileUtils::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -40,22 +44,6 @@ sub path_or_empty {
     return -e $path ? $path : '';
 }
 
-sub path_no_verify {
-    my @nodes = File::Spec->splitpath(d_catdir(@_)); # 0=vol,1=dirs,2=file
-    my $path = '';
-
-    # [0->?] path(must exist),[last] file(maybe exists)
-    if($nodes[1]) {
-        $path = realpath(File::Spec->catpath(@nodes[0 .. 1],'')) . '/';
-    } else {
-        $path = Cwd::cwd . '/';
-    }
-
-    $path .= $nodes[2];
-
-    return $path;
-}
-
 sub dirname { File::Basename::dirname(@_) }
 
 sub set_file_mode {
@@ -163,10 +151,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::FileUtils - helper providing file utilities
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     use Dancer::FileUtils qw/dirname path/;
@@ -188,7 +182,6 @@ Dancer::FileUtils - helper providing file utilities
     my @content = read_file_content($fh);
     my $content = read_file_content($fh);
 
-
 =head1 DESCRIPTION
 
 Dancer::FileUtils includes a few file related utilities related that Dancer
@@ -263,14 +256,13 @@ Nothing by default. You can provide a list of subroutines to import.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
+Dancer Core Developers
 
-=head1 LICENSE AND COPYRIGHT
+=head1 COPYRIGHT AND LICENSE
 
-Copyright 2009-2011 Alexis Sukrieh.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
-See http://dev.perl.org/licenses/ for more information.
+=cut
@@ -1,5 +1,8 @@
 package Dancer::GetOpt;
-
+BEGIN {
+  $Dancer::GetOpt::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::GetOpt::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -87,3 +90,30 @@ EOF
 }
 
 'Dancer::GetOpt';
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::GetOpt
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::HTTP;
-
+BEGIN {
+  $Dancer::HTTP::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: helper for rendering HTTP status codes for Dancer
+$Dancer::HTTP::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Exporter';
@@ -84,14 +88,21 @@ sub codes {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::HTTP - helper for rendering HTTP status codes for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 Helper for rendering HTTP status codes for Dancer
@@ -115,7 +126,6 @@ keys are the numerical statuses and the values their string equivalents.
 
     print Dancer::HTTP->codes->{404}; # prints 'File Not Found'
 
-
 =head1 HTTP CODES 
 
 The following codes/aliases are understood by any status() call made
@@ -123,7 +133,6 @@ from a Dancer script. The aliases can be used as-is (e.g., I<Moved
 Permanently>), or as lower-case string with all non-alphanumerical 
 characters changed to underscores (e.g., I<moved_permanently>).
 
-
     get '/user/:user' => sub {
         my $user = find_user( param('user') );
 
@@ -248,4 +257,15 @@ L<https://github.com/PerlDancer/Dancer>
 This module is free software and is published under the same
 terms as Perl itself.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Handler::Debug;
-
+BEGIN {
+  $Dancer::Handler::Debug::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: a debug handler for easy tracing
+$Dancer::Handler::Debug::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -13,7 +17,7 @@ use Dancer::SharedData;
 sub run {
     my ($self, $req) = @_;
 
-    my ($method, $path, $query) = @ARGV;
+    my ($method, $path, $query, @env ) = @ARGV;
     my $host    = "127.0.0.1";
     my $port    = "3000";
 
@@ -31,6 +35,7 @@ sub run {
         'SERVER_PROTOCOL' => 'HTTP/1.1',
         'SERVER_SOFTWARE' => 'HTTP::Server::Simple/0.41',
         'SERVER_URL'      => "http://$host:$port/",
+        map { /=/ ? split /=/, $_, 2 : () } @env
     };
 
     $req = Dancer::Request->new(env => $env);
@@ -73,18 +78,26 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Handler::Debug - a debug handler for easy tracing
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 When developing a Dancer application, it can be useful to trace precisely what
 happen when a query is processed. This handler is here to provide the developer
 with a way to easily run the dancer application with the Perl debugger.
 
-This handler will process only one query, based on the first argument given on
-the command line ($ARGV[0]).
+This handler will process only one query, based on the arguments given on
+the command line, which must follow the pattern
+
+    <verb> <path> <parameter segment> <env variable> <even variable>
 
 =head1 USAGE
 
@@ -92,8 +105,27 @@ the command line ($ARGV[0]).
     set apphandler => 'Debug';
 
     # then, run the app the following way
+    perl -d bin/app.pl GET '/some/path/to/test' 
+
+    # with arguments
     perl -d bin/app.pl GET '/some/path/to/test' 'with=parameters&other=42'
 
+    # with environment variables
+    perl -d bin/app.pl GET '/some/path/to/test' '' HTTP_X_REQUESTED_WITH=XMLHttpRequest SERVER_NAME=fake
+
 =head1 AUTHORS
 
 Dancer contributors
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Handler::PSGI;
-
+BEGIN {
+  $Dancer::Handler::PSGI::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: a PSGI handler for Dancer applications
+$Dancer::Handler::PSGI::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -87,14 +91,21 @@ sub init_request_headers {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Handler::PSGI - a PSGI handler for Dancer applications
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This handler allows Dancer applications to run as part of PSGI stacks. Dancer
@@ -107,7 +118,7 @@ C<plack_middlewares> key. See L<Dancer::Cookbook> for more information.
 Note that you must have L<Plack> installed for this handler to work.
 
 =head1 USAGE
-    
+
     # in bin/app.pl
     set apphandler => 'Debug';
 
@@ -117,3 +128,16 @@ Note that you must have L<Plack> installed for this handler to work.
 =head1 AUTHORS
 
 Dancer contributors
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Handler::Standalone;
-
+BEGIN {
+  $Dancer::Handler::Standalone::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Handler::Standalone::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -69,3 +72,30 @@ sub after_setup_listener {
 }
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Handler::Standalone
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Handler;
-
+BEGIN {
+  $Dancer::Handler::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Handler::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -154,8 +157,10 @@ sub render_response {
             $response->header( 'Content-Type' => "$ctype; charset=$charset" )
               if $ctype !~ /$charset/;
         }
-        $response->header( 'Content-Length' => length($content) )
-          if !defined $response->header('Content-Length');
+        if (!defined $response->header('Content-Length')) {
+            use bytes; # turn off character semantics
+            $response->header( 'Content-Length' => length($content) );
+        }
         $content = [$content];
     }
     else {
@@ -193,7 +198,7 @@ sub render_response {
 
 sub _is_text {
     my ($content_type) = @_;
-    return $content_type =~ /(x(?:ht)?ml|text|json|javascript)/;
+    return $content_type =~ /(\bx(?:ht)?ml\b|text|json|javascript)/;
 }
 
 # Fancy banner to print on startup
@@ -207,3 +212,30 @@ sub print_banner {
 sub dance { (shift)->start(@_) }
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Handler
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Hook::Properties;
-
+BEGIN {
+  $Dancer::Hook::Properties::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Properties attached to a hook
+$Dancer::Hook::Properties::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -37,16 +41,26 @@ sub should_run_this_app {
 
 1;
 
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Hook::Properties - Properties attached to a hook
 
-=head1 DESCRIPTION
+=head1 VERSION
 
-Properties attached to a hook
+version 1.3130
 
 =head1 SYNOPSIS
 
+=head1 DESCRIPTION
+
+Properties attached to a hook
+
 =head1 METHODS
 
 =head1 AUTHORS
@@ -57,3 +71,16 @@ This module has been written by Alexis Sukrieh and others.
 
 This module is free software and is published under the same
 terms as Perl itself.
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Hook;
-
+BEGIN {
+  $Dancer::Hook::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Class to manipulate hooks with Dancer
+$Dancer::Hook::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -70,13 +74,19 @@ sub new {
 
 1;
 
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Hook - Class to manipulate hooks with Dancer
 
-=head1 DESCRIPTION
+=head1 VERSION
 
-Manipulate hooks with Dancer
+version 1.3130
 
 =head1 SYNOPSIS
 
@@ -84,6 +94,10 @@ Manipulate hooks with Dancer
   use Dancer::Hook;
   Dancer::Hook->register_hooks_name(qw/before_auth after_auth/);
 
+=head1 DESCRIPTION
+
+Manipulate hooks with Dancer
+
 =head1 METHODS
 
 =head2 register_hook ($hook_name, [$properties], $code)
@@ -91,7 +105,7 @@ Manipulate hooks with Dancer
     hook 'before', {apps => ['main']}, sub {...};
 
     hook 'before' => sub {...};
-    
+
 Attaches a hook at some point, with a possible list of properties.
 
 Currently supported properties:
@@ -131,3 +145,16 @@ This module has been written by Alexis Sukrieh and others.
 
 This module is free software and is published under the same
 terms as Perl itself.
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,7 +1,20 @@
+package Dancer::Introduction
+# ABSTRACT: A gentle introduction to Dancer
+$Dancer::Introduction::VERSION = '1.3130';
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Introduction - A gentle introduction to Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 Dancer is a free and open source micro web application framework written in
@@ -62,7 +75,6 @@ method 'get', so only GET requests will be honoured by that route:
         return "Hello ".param('name');
     };
 
-
 =head2 HTTP METHODS
 
 Here are some of the standard HTTP methods which you can use to define your
@@ -70,22 +82,30 @@ route handlers.
 
 =over 8
 
-=item B<GET>        The GET method retrieves information (when defining a route
-                    handler for the GET method, Dancer automatically defines a
-                    route handler for the HEAD method, in order to honour HEAD
-                    requests for each of your GET route handlers).
-                    To define a GET action, use the B<get> keyword.
+=item B<GET>
 
-=item B<POST>       The POST method is used to create a resource on the
-                    server.
-                    To define a POST action, use the B<post> keyword.
+The GET method retrieves information (when defining a route
+handler for the GET method, Dancer automatically defines a
+route handler for the HEAD method, in order to honour HEAD
+requests for each of your GET route handlers).
+To define a GET action, use the B<get> keyword.
 
-=item B<PUT>        The PUT method is used to update an existing resource.
-                    To define a PUT action, use the B<put> keyword.
+=item B<POST>
 
-=item B<DELETE>     The DELETE method requests that the origin server delete
-                    the resource identified by the Request-URI.
-                    To define a DELETE action, use the B<del> keyword.
+The POST method is used to create a resource on the
+server.
+To define a POST action, use the B<post> keyword.
+
+=item B<PUT>
+
+The PUT method is used to update an existing resource.
+To define a PUT action, use the B<put> keyword.
+
+=item B<DELETE>
+
+The DELETE method requests that the origin server delete
+the resource identified by the Request-URI.
+To define a DELETE action, use the B<del> keyword.
 
 =back
 
@@ -103,7 +123,6 @@ Or even, a route handler that would match any HTTP methods:
         # code
     };
 
-
 =head2 ROUTE HANDLERS
 
 The route action is the code reference declared. It can access parameters
@@ -119,7 +138,6 @@ A route pattern can contain one or more tokens (a word prefixed with ':'). Each
 token found in a route pattern is used as a named-pattern match. Any match will
 be set in the params hashref.
 
-
     get '/hello/:name' => sub {
         "Hey ".param('name').", welcome here!";
     };
@@ -130,7 +148,6 @@ Tokens can be optional, for example:
         "Hello there " . (param('name') || "whoever you are!");
     };
 
-
 =head2 WILDCARDS MATCHING
 
 A route can contain a wildcard (represented by a '*'). Each wildcard match will
@@ -206,7 +223,6 @@ This is done with the B<pass> keyword, like in the following example
         "I say a number: ".params->{number};
     };
 
-
 =head2 DEFAULT ERROR PAGES
 
 When an error is rendered (the action responded with a status code different
@@ -248,7 +264,6 @@ variables which will be accessible in the action blocks with the keyword 'var'.
         vars->{note}; # 'Hi there'
     };
 
-
 For another example, this can be used along with session support to easily
 give non-logged-in users a login page:
 
@@ -260,7 +275,6 @@ give non-logged-in users a login page:
         }
     };
 
-
 The request keyword returns the current Dancer::Request object representing the
 incoming request. See the documentation of the L<Dancer::Request> module for
 details.
@@ -278,7 +292,6 @@ The hook is given the response object as its first argument:
         $response->{content} = 'after hook got here!';
     };
 
-
 =head2 Before template hook
 
 C<before_template_render> hooks are called whenever a template is going to be
@@ -320,7 +333,7 @@ That way, the appropriate  environment config file will be loaded according to
 the running environment (if none is specified, it will be 'development').
 
 Note that you can change the running environment using the --environment
-commandline switch.
+command line switch.
 
 Typically, you'll want to set the following values in a development config
 file:
@@ -366,7 +379,6 @@ the config keyword:
         return "This is " . config->{appname};
     };
 
-
 =head1 Importing just the syntax
 
 If you want to use more complex file hierarchies, you can import just the
@@ -628,4 +640,15 @@ This is a possible webapp created with Dancer:
     # run the webserver
     Dancer->dance;
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Logger::Abstract;
-
+BEGIN {
+  $Dancer::Logger::Abstract::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Abstract logging engine for Dancer
+$Dancer::Logger::Abstract::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -89,7 +93,7 @@ sub format_message {
     my $chars_mapping = {
         h => sub {
             defined $r
-              ? $r->env->{'HTTP_X_REAL_IP'} || $r->env->{'REMOTE_ADDR'}
+              ? $r->env->{'HTTP_X_REAL_IP'} || $r->env->{'REMOTE_ADDR'} || '-'
               : '-';
         },
         t => sub { Encode::decode(setting('charset') || 'utf8',
@@ -145,10 +149,18 @@ sub error   { $_[0]->_should('error')   and $_[0]->_log('error',   $_[1]) }
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger::Abstract - Abstract logging engine for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 In your configuration file:
@@ -286,15 +298,13 @@ warning, error).
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,12 +1,53 @@
 package Dancer::Logger::Capture::Trap;
-
+BEGIN {
+  $Dancer::Logger::Capture::Trap::AUTHORITY = 'cpan:SUKRIA';
+}
+# ABSTRACT: a place to store captured Dancer logs
+$Dancer::Logger::Capture::Trap::VERSION = '1.3130';
 use base 'Dancer::Object';
 
 
+__PACKAGE__->attributes( "_storage" );
+
+sub init {
+    my $self = shift;
+    $self->_storage([]) unless $self->_storage;
+}
+
+sub store {
+    my($self, $level, $message) = @_;
+
+    push @{$self->_storage}, { level => $level, message => $message };
+}
+
+
+
+sub read {
+    my $self = shift;
+
+    my $logs = $self->_storage;
+    $self->_storage([]);
+    return $logs;
+}
+
+
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger::Capture::Trap - a place to store captured Dancer logs
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     my $trap = Dancer::Logger::Capture::Trap->new;
@@ -28,22 +69,6 @@ L<Dancer::Logger::Capture>.
 
 Stores a log $message and its $level.
 
-=cut
-
-__PACKAGE__->attributes( "_storage" );
-
-sub init {
-    my $self = shift;
-    $self->_storage([]) unless $self->_storage;
-}
-
-sub store {
-    my($self, $level, $message) = @_;
-
-    push @{$self->_storage}, { level => $level, message => $message };
-}
-
-
 =head3 read
 
     my $logs = $trap->read;
@@ -56,21 +81,19 @@ For example...
      { level => "error",   message => "You fail forever" }
     ];
 
-=cut
+=head1 SEE ALSO
 
-sub read {
-    my $self = shift;
+L<Dancer::Logger::Capture>
 
-    my $logs = $self->_storage;
-    $self->_storage([]);
-    return $logs;
-}
+=head1 AUTHOR
 
+Dancer Core Developers
 
-=head1 SEE ALSO
+=head1 COPYRIGHT AND LICENSE
 
-L<Dancer::Logger::Capture>
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-=cut
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
-1;
+=cut
@@ -1,13 +1,48 @@
 package Dancer::Logger::Capture;
-
+BEGIN {
+  $Dancer::Logger::Capture::AUTHORITY = 'cpan:SUKRIA';
+}
+# ABSTRACT: Capture dancer logs
+$Dancer::Logger::Capture::VERSION = '1.3130';
 use strict;
 use warnings;
 
 
+
+use base "Dancer::Logger::Abstract";
+
+use Dancer::Logger::Capture::Trap;
+my $Trap = Dancer::Logger::Capture::Trap->new;
+
+sub _log {
+    my($self, $level, $message) = @_;
+
+    $Trap->store( $level => $message );
+    return;
+}
+
+sub trap {
+    return $Trap;
+}
+
+
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger::Capture - Capture dancer logs
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     set logger => "capture";
@@ -28,25 +63,6 @@ It's primary purpose is for testing.
 Returns the L<Dancer::Logger::Capture::Trap> object used to capture
 and read logs.
 
-=cut
-
-use base "Dancer::Logger::Abstract";
-
-use Dancer::Logger::Capture::Trap;
-my $Trap = Dancer::Logger::Capture::Trap->new;
-
-sub _log {
-    my($self, $level, $message) = @_;
-
-    $Trap->store( $level => $message );
-    return;
-}
-
-sub trap {
-    return $Trap;
-}
-
-
 =head1 EXAMPLE
 
     use Test::More import => ['!pass'], tests => 2;
@@ -66,11 +82,19 @@ sub trap {
     # each call to read cleans the trap
     is_deeply $trap->read, [];
 
-
 =head1 SEE ALSO
 
 L<Dancer::Logger>, L<Dancer::Logger::Capture::Trap>
 
-=cut
+=head1 AUTHOR
 
-1;
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,4 +1,9 @@
 package Dancer::Logger::Console;
+BEGIN {
+  $Dancer::Logger::Console::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: console-based logging engine for Dancer
+$Dancer::Logger::Console::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Dancer::Logger::Abstract';
@@ -12,10 +17,18 @@ sub _log {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger::Console - console-based logging engine for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 =head1 DESCRIPTION
@@ -30,15 +43,13 @@ Writes the log message to the console/screen.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,4 +1,9 @@
 package Dancer::Logger::Diag;
+BEGIN {
+  $Dancer::Logger::Diag::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Test::More diag() logging engine for Dancer
+$Dancer::Logger::Diag::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Dancer::Logger::Abstract';
@@ -21,10 +26,18 @@ sub _log {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger::Diag - Test::More diag() logging engine for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 =head1 DESCRIPTION
@@ -47,15 +60,13 @@ Use Test::More's diag() to output the log message.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,4 +1,9 @@
 package Dancer::Logger::File;
+BEGIN {
+  $Dancer::Logger::File::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: file-based logging engine for Dancer
+$Dancer::Logger::File::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -86,10 +91,18 @@ sub _log {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger::File - file-based logging engine for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 =head1 DESCRIPTION
@@ -118,15 +131,13 @@ Writes the log message to the file.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,4 +1,9 @@
 package Dancer::Logger::Note;
+BEGIN {
+  $Dancer::Logger::Note::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Test::More note() logging engine for Dancer
+$Dancer::Logger::Note::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Dancer::Logger::Abstract';
@@ -21,10 +26,18 @@ sub _log {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger::Note - Test::More note() logging engine for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 =head1 DESCRIPTION
@@ -50,15 +63,13 @@ Use Test::More's note() to output the log message.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,4 +1,9 @@
 package Dancer::Logger::Null;
+BEGIN {
+  $Dancer::Logger::Null::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: blackhole-like silent logging engine for Dancer
+$Dancer::Logger::Null::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Dancer::Logger::Abstract';
@@ -9,10 +14,18 @@ sub _log {1}
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger::Null - blackhole-like silent logging engine for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 =head1 DESCRIPTION
@@ -28,15 +41,13 @@ Discards the message.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Logger;
-
+BEGIN {
+  $Dancer::Logger::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: common interface for logging in Dancer
+$Dancer::Logger::VERSION = '1.3130';
 # Factory for logger engines
 
 use strict;
@@ -39,14 +43,18 @@ sub error   { defined($logger) and $logger->error(   _serialize(@_) ) }
 
 1;
 
-__END__
-
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Logger - common interface for logging in Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This module is the wrapper that provides support for different 
@@ -106,5 +114,19 @@ See L<Dancer> for details about the complete framework.
 You can also search the CPAN for existing engines in the Dancer::Logger
 namespace : L<http://search.cpan.org/search?query=Dancer%3A%3ALogger>.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
+
+__END__
+
 1;
@@ -1,5 +1,9 @@
 package Dancer::MIME;
-
+BEGIN {
+  $Dancer::MIME::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Singleton object to handle MimeTypes
+$Dancer::MIME::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Dancer::Object::Singleton';
@@ -66,11 +70,20 @@ sub for_name {
 
 42;
 
+__END__
+
+=pod
+
+=encoding UTF-8
 
 =head1 NAME
 
 Dancer::MIME - Singleton object to handle MimeTypes
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     # retrieve object instance
@@ -159,5 +172,15 @@ This module is released under the same terms as Perl itself.
 
 L<Dancer>
 
-=cut
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
 
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::ModuleLoader;
-
+BEGIN {
+  $Dancer::ModuleLoader::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: dynamic module loading helpers for Dancer core components
+$Dancer::ModuleLoader::VERSION = '1.3130';
 # Abstraction layer for dynamic module loading
 
 use strict;
@@ -15,7 +19,6 @@ sub load {
 
 sub require {
     my ($class, $module, $version) = @_;
-    print "version $version\n" if $version;
     eval { defined $version ? use_module( $module, $version ) 
                             : use_module( $module ) } 
         or return wantarray ? (0, $@) : 0;
@@ -65,10 +68,18 @@ sub class_from_setting {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::ModuleLoader - dynamic module loading helpers for Dancer core components
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 Taken directly from Dancer::Template::TemplateToolkit (which is core):
@@ -209,15 +220,13 @@ L<Module::Load>, L<Module::New::Loader>
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Object::Singleton;
-
+BEGIN {
+  $Dancer::Object::Singleton::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Singleton base class for Dancer
+$Dancer::Object::Singleton::VERSION = '1.3130';
 # This class is a root class for singleton objects in Dancer.
 # It provides basic OO singleton tools for Perl5 without being... MooseX::Singleton ;-)
 
@@ -62,10 +66,18 @@ sub _setter_code {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Object::Singleton - Singleton base class for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     package My::Dancer::Extension;
@@ -118,15 +130,13 @@ C<get_attributes>.
 
 =head1 AUTHOR
 
-Damien Krotkine
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2010 Damien Krotkine.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Object;
-
+BEGIN {
+  $Dancer::Object::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Objects base class for Dancer
+$Dancer::Object::VERSION = '1.3130';
 # This class is a root class for each object in Dancer.
 # It provides basic OO tools for Perl5 without being... Moose ;-)
 
@@ -32,7 +36,7 @@ my $_attrs_per_class = {};
 sub get_attributes {
     my ($class, $visited_parents) = @_;
     # $visited_parents keeps track of parent classes we already handled, to
-    # avoid infinite recursion (in case of dependancies loop). It's not stored as class singleton, otherwise
+    # avoid infinite recursion (in case of dependencies loop). It's not stored as class singleton, otherwise
     # get_attributes wouldn't be re-entrant.
     $visited_parents ||= {};
     my @attributes = @{$_attrs_per_class->{$class} || [] };
@@ -100,10 +104,18 @@ sub attributes_defaults {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Object - Objects base class for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     package My::Dancer::Extension;
@@ -182,15 +194,13 @@ default values. Usually called from within an C<init> function.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Plugin::Ajax;
-
+BEGIN {
+  $Dancer::Plugin::Ajax::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: a plugin for adding Ajax route handlers
+$Dancer::Plugin::Ajax::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -7,8 +11,6 @@ use Dancer ':syntax';
 use Dancer::Exception ':all';
 use Dancer::Plugin;
 
-our $VERSION = '1.00';
-
 register 'ajax' => \&ajax;
 
 hook before => sub {
@@ -64,10 +66,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Plugin::Ajax - a plugin for adding Ajax route handlers
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     package MyWebApp;
@@ -104,6 +112,10 @@ The action built matches POST / GET requests.
 
 =back
 
+=head1 NAME
+
+Dancer::Plugin::Ajax - 
+
 =head1 CONFIGURATION
 
 By default the plugin will use a content-type of 'text/xml' but this can be overwritten
@@ -115,9 +127,19 @@ Here is example to use JSON:
     'Ajax':
       content_type: 'application/json'
 
-
 =head1 AUTHOR
 
 This module has been written by Alexis Sukrieh <sukria@sukria.net>
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,4 +1,9 @@
 package Dancer::Plugin;
+BEGIN {
+  $Dancer::Plugin::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: helper for writing Dancer plugins
+$Dancer::Plugin::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -108,17 +113,20 @@ sub set_plugin_symbols {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Plugin - helper for writing Dancer plugins
 
-=head1 DESCRIPTION
+=head1 VERSION
 
-Create plugins for Dancer
+version 1.3130
 
 =head1 SYNOPSIS
 
@@ -148,6 +156,10 @@ And in your application:
 
     block_links_from; # this is exported by the plugin
 
+=head1 DESCRIPTION
+
+Create plugins for Dancer
+
 =head1 PLUGINS
 
 You can extend Dancer by writing your own Plugin.
@@ -217,7 +229,6 @@ for B<Dancer::Plugin::Foo::Bar>, use:
     "Foo::Bar":
       key: value
 
-
 =item B<plugin_args>
 
 To easy migration and interoperability between Dancer 1 and Dancer 2
@@ -243,4 +254,15 @@ This module has been written by Alexis Sukrieh and others.
 This module is free software and is published under the same
 terms as Perl itself.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,7 +1,20 @@
+# PODNAME: Dancer::Plugins
+# ABSTRACT: interesting plugins to add to Dancer's capabilities
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Plugins - interesting plugins to add to Dancer's capabilities
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 Dancer aims to keep the core as small as possible, but there are a growing
@@ -24,7 +37,7 @@ should be.
 
 =item L<Dancer::Plugin::DBIC>
 
-Provides easy acces to DBIx::Class database virtualization.
+Provides easy access to DBIx::Class database virtualization.
 
 =item L<Dancer::Plugin::Auth::RBAC>
 
@@ -40,7 +53,6 @@ keyword.  Email sending settings can be taken from your app's config.
 Send SMS text messages to mobile phones from your Dancer app, using any service
 supported by L<SMS::Send>.
 
-
 =item L<Dancer::Plugin::Ajax>
 
 Provides easy way to add Ajax route handlers.
@@ -120,4 +132,15 @@ More plugins are appearing on CPAN all the time - just search for
 C<Dancer::Plugin> to see what may have been released since this document was
 last updated!
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Renderer;
-
+BEGIN {
+  $Dancer::Renderer::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Renderer::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -316,3 +319,30 @@ Powered by <a href="http://perldancer.org/">Dancer</a> <% version %>
 
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Renderer
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Request::Upload;
-
+BEGIN {
+  $Dancer::Request::Upload::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: class representing file uploads requests
+$Dancer::Request::Upload::VERSION = '1.3130';
 use File::Spec;
 use Carp;
 
@@ -69,12 +73,37 @@ sub type {
 
 # private
 
+
+1;
+
+__END__
+
 =pod
 
-=head1 NAME 
+=encoding UTF-8
+
+=head1 NAME
 
 Dancer::Request::Upload - class representing file uploads requests
 
+=head1 VERSION
+
+version 1.3130
+
+=head1 SYNOPSIS
+
+    # somewhere in your view:
+    <form action="/upload" method="POST" enctype="multipart/form-data">
+      <input type="file" name="filename">
+      <input type="submit">
+    </form>
+   
+    # and then in your application handler:
+    post '/upload' => sub {
+      my $file = request->upload('filename');
+      $file->copy_to($upload_dir);  # or whatever you need
+    };
+
 =head1 DESCRIPTION
 
 This class implements a representation of file uploads for Dancer.
@@ -144,6 +173,15 @@ L<Plack::Request::Upload>. Kudos to Plack authors.
 
 L<Dancer>
 
-=cut
+=head1 AUTHOR
 
-1;
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Request;
-
+BEGIN {
+  $Dancer::Request::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: interface for accessing incoming requests
+$Dancer::Request::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -72,10 +76,14 @@ sub request_base          { $_[0]->env->{REQUEST_BASE} || $_[0]->env->{HTTP_REQU
 sub scheme                {
     my $scheme;
     if (setting('behind_proxy')) {
+        # PSGI specs say that X_FORWARDED_PROTO will
+        # be converted into HTTP_X_FORWARDED_PROTO
+        # but Dancer::Test doesn't use PSGI (for now)
         $scheme = $_[0]->env->{'X_FORWARDED_PROTOCOL'}
                || $_[0]->env->{'HTTP_X_FORWARDED_PROTOCOL'}
                || $_[0]->env->{'HTTP_X_FORWARDED_PROTO'}
                || $_[0]->env->{'HTTP_FORWARDED_PROTO'}
+               || $_[0]->env->{'X_FORWARDED_PROTO'}
                || ""
     }
     return $scheme
@@ -607,10 +615,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Request - interface for accessing incoming requests
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This class implements a common interface for accessing incoming requests in
@@ -665,6 +679,10 @@ parameters to be added to the current request parameters, and the key
 C<options> that points to a hash of options about the redirect (for
 instance, C<method> pointing to a new request method).
 
+=head2 is_forward
+
+Flag that will be set to true if the request has been L<forwarded|forward>.
+
 =head2 to_string()
 
 Return a string representing the request object (eg: C<"GET /some/path">)
@@ -839,6 +857,10 @@ Return the value of the given header, if present. If the header has multiple
 values, returns an the list of values if called in list context, the first one
 in scalar.
 
+=head2 headers()
+
+Returns the L<HTTP::Header> object used to store all the headers.
+
 =head2 body()
 
 Return the raw body of the request, unparsed.
@@ -946,7 +968,6 @@ Dancer::Request object through specific accessors, here are those supported:
 
 =back
 
-
 =head1 AUTHORS
 
 This module has been written by Alexis Sukrieh and was mostly
@@ -962,4 +983,15 @@ This module is released under the same terms as Perl itself.
 
 L<Dancer>
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Response;
-
+BEGIN {
+  $Dancer::Response::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Response object for Dancer
+$Dancer::Response::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -183,11 +187,20 @@ sub build_cookie_headers {
 }
 1;
 
+__END__
+
+=pod
+
+=encoding UTF-8
 
 =head1 NAME
 
 Dancer::Response - Response object for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     # create a new response object
@@ -227,7 +240,6 @@ return the current Dancer::Response object, and reset the object
 
 =head2 exists
 
-
     if ($response->exists) {
         ...
     }
@@ -256,7 +268,7 @@ set or get the content of the current response object
     $response->status(201);
     Dancer::SharedData->response->status(201);
 
-set or get the status of the current response object
+Set or get the status of the current response object.  The default status is 200.
 
 =head2 content_type
 
@@ -268,14 +280,14 @@ set or get the status of the current response object
     $response->content_type('application/json');
     Dancer::SharedData->response->content_type('application/json');
 
-set or get the status of the current response object
+Set or get the status of the current response object.
 
 =head2 pass
 
     $response->pass;
     Dancer::SharedData->response->pass;
 
-set the pass value to one for this response
+Set the pass value to one for this response.
 
 =head2 has_passed
 
@@ -287,13 +299,15 @@ set the pass value to one for this response
         ...
     }
 
-test if the pass value is set to true
+Test if the pass value is set to true.
 
-=head2 halt
+=head2 halt($content)
 
     Dancer::SharedData->response->halt();
     $response->halt;
 
+Stops the processing of the current request.  See L<Dancer/halt>.
+
 =head2 halted
 
     if (Dancer::SharedData->response->halted) {
@@ -304,6 +318,8 @@ test if the pass value is set to true
         ...
     }
 
+This flag will be true if the current response has been halted.
+
 =head2 header
 
     # set the header
@@ -314,20 +330,31 @@ test if the pass value is set to true
     my $header = $response->header('X-Foo');
     my $header = Dancer::SharedData->response->header('X-Foo');
 
-get or set the value of a header
+Get or set the value of a header.
 
 =head2 headers
 
     $response->headers('X-Foo' => 'fff', 'X-Bar' => 'bbb');
     Dancer::SharedData->response->headers('X-Foo' => 'fff', 'X-Bar' => 'bbb');
 
-return the list of headers for the current response
+Return the list of headers for the current response.
 
 =head2 headers_to_array
 
     my $headers_psgi = $response->headers_to_array();
     my $headers_psgi = Dancer::SharedData->response->headers_to_array();
 
-this method is called before returning a L<< PSGI >> response. It transforms the list of headers to an array reference.
+This method is called before returning a L<< PSGI >> response. It transforms the list of headers to an array reference.
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,18 +1,19 @@
 package Dancer::Route::Cache;
-
+BEGIN {
+  $Dancer::Route::Cache::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: route caching mechanism for L<Dancer>
+$Dancer::Route::Cache::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
 
 use base 'Dancer::Object';
 
-use vars '$VERSION';
-
 use Dancer::Config 'setting';
 use Dancer::Error;
 use Dancer::Exception qw(:all);
 
-$VERSION = '0.01';
 Dancer::Route::Cache->attributes('size_limit', 'path_limit');
 
 # static
@@ -146,14 +147,23 @@ sub route_cache_paths {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Route::Cache - route caching mechanism for L<Dancer>
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     my $cache = Dancer::Route::Cache->new(
-        path_limit => 300, # optional
+        path_limit => 300, # optional, defaults to 600 (routes to cache)
+        size_limit => 5M,  # optional, defaults to 10M (10MB)
     );
 
     # storing a path
@@ -245,14 +255,13 @@ Returns the limit (post-set).
 
 =head1 AUTHOR
 
-Sawyer X
+Dancer Core Developers
 
-=head1 LICENSE AND COPYRIGHT
+=head1 COPYRIGHT AND LICENSE
 
-Copyright 2010 Sawyer X.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
-See http://dev.perl.org/licenses/ for more information.
+=cut
@@ -1,4 +1,8 @@
 package Dancer::Route::Registry;
+BEGIN {
+  $Dancer::Route::Registry::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Route::Registry::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -143,3 +147,30 @@ sub find_route {
 }
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Route::Registry
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Route;
-
+BEGIN {
+  $Dancer::Route::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Route::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -40,9 +43,8 @@ sub init {
     my ($self) = @_;
     $self->{'_compiled_regexp'} = undef;
 
-    if (!$self->pattern) {
-        raise core_route => "cannot create Dancer::Route without a pattern";
-    }
+    raise core_route => "cannot create Dancer::Route without a pattern"
+        unless defined $self->pattern;
 
     # If the route is a Regexp, store it directly
     $self->regexp($self->pattern) 
@@ -353,3 +355,30 @@ sub _build_regexp_from_string {
 }
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Route
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Serializer::Abstract;
-
+BEGIN {
+  $Dancer::Serializer::Abstract::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Serializer::Abstract::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -8,7 +11,7 @@ use base 'Dancer::Engine';
 sub serialize   { confess 'must be implemented' }
 sub deserialize { confess 'must be implemented' }
 
-# must be implemented to delcare if the serializer can be used or not
+# must be implemented to declare if the serializer can be used or not
 # most of the time, just use :
 # Dancer::ModuleLoader->load('Your::Serializer::Deps');
 sub loaded {0}
@@ -26,3 +29,30 @@ sub support_content_type {
 }
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Serializer::Abstract
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,8 @@
 package Dancer::Serializer::Dumper;
-
+BEGIN {
+  $Dancer::Serializer::Dumper::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Serializer::Dumper::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -37,3 +40,30 @@ sub deserialize {
 sub content_type {'text/x-data-dumper'}
 
 1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Serializer::Dumper
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Serializer::JSON;
-
+BEGIN {
+  $Dancer::Serializer::JSON::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: serializer for handling JSON data
+$Dancer::Serializer::JSON::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -100,12 +104,21 @@ sub _options_as_hashref {
 sub content_type {'application/json'}
 
 1;
+
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Serializer::JSON - serializer for handling JSON data
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 =head1 DESCRIPTION
@@ -134,7 +147,6 @@ settings to the B<engines> configuration to turn these on. For example:
             canonical:       '1'
             convert_blessed: '1'
 
-
 =head1 METHODS
 
 =head2 serialize
@@ -148,3 +160,16 @@ Deserialize a JSON structure to a data structure
 =head2 content_type
 
 Return 'application/json'
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -0,0 +1,95 @@
+package Dancer::Serializer::JSONP;
+BEGIN {
+  $Dancer::Serializer::JSONP::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::Serializer::JSONP::VERSION = '1.3130';
+# ABSTRACT: serializer for handling JSONP data
+
+use strict;
+use warnings;
+use Dancer::SharedData;
+use parent 'Dancer::Serializer::JSON';
+
+sub serialize {
+    my $self = shift;
+	
+	my $callback = Dancer::SharedData->request->params('query')->{callback};
+	
+	my $json = $self->SUPER::serialize(@_);
+	
+	return $callback . '(' . $json . ');';
+}
+
+sub content_type {'application/javascript'}
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::Serializer::JSONP - serializer for handling JSONP data
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+This class is a subclass of L<Dancer::Serializer::JSON> with support for JSONP.
+
+In order to use this engine, use the template setting:
+
+    serializer: JSONP
+
+This can be done in your config.yml file or directly in your app code with the
+B<set> keyword. This serializer will B<not> be used when the serializer is set
+to B<mutable>.
+
+All configuration options mentioned in L<Dancer::Serializer::JSON> apply here,
+too.
+
+=head1 METHODS
+
+=head2 serialize
+
+Serialize a data structure to a JSON structure with surrounding javascript
+callback method. The name of the callback method is obtained from the request
+parameter I<callback>.
+
+=head2 deserialize
+
+See L<Dancer::Serializer::JSON#deserialize>.
+
+=head2 content_type
+
+Return 'application/javascript'
+
+=head1 SEE ALSO
+
+L<Dancer::Plugin::CORS> is a modern alternative to JSONP, but with limited
+browser support. Today, JSONP can be a serious fallback solution when CORS is
+not supported by a browser.
+
+=head1 AUTHOR
+
+David Zurborg, C<< <zurborg at cpan.org> >>
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Serializer::Mutable;
-
+BEGIN {
+  $Dancer::Serializer::Mutable::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Serialize and deserialize content using the appropriate HTTP header
+$Dancer::Serializer::Mutable::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -22,7 +26,7 @@ my $_content_type;
 sub template_or_serialize {
     my( $template, $data ) = @_;
 
-    my( $content_type ) = @{ _find_content_type(Dancer::SharedData->request) };
+    my( $content_type ) = @{ _response_content_types(Dancer::SharedData->request) };
 
     # TODO the accept value coming from the browser can 
     # be quite complex (e.g., 
@@ -36,7 +40,7 @@ sub template_or_serialize {
     return $data;
 }
 
-sub _find_content_type {
+sub _request_content_types {
     my $request = shift;
 
     my $params;
@@ -45,28 +49,42 @@ sub _find_content_type {
         $params = $request->params;
     }
 
-    # first content type, second accept and final default
     # we push in @content_types by order of desirability
     # I.e.: we want $content_types[0] more than $content_types[1]
     my @content_types;
 
     my $method = $request->method;
 
-    if ($method =~ /^(?:POST|PUT|GET)$/) {
+    if ($method =~ /^(?:POST|PUT|GET|DELETE)$/) {
         push @content_types, $request->{content_type} 
             if $request->{content_type};
 
         push @content_types, $params->{content_type} 
             if $params && $params->{content_type};
     }
-    
-    push @content_types, $request->{accept} 
+    push @content_types, 'application/json';
+
+    # remove duplicates
+    my %seen;
+    return [ grep { not $seen{$_}++ } @content_types ];
+}
+
+sub _response_content_types {
+    my $request = shift;
+    my @content_types;
+
+    push @content_types, $request->{accept}
         if $request->{accept};
-    
-    push @content_types, $request->{accept_type} 
+
+    push @content_types, $request->{accept_type}
         if $request->{'accept_type'};
 
-    push @content_types, 'application/json';
+    # Both above could be '*/*' which means it is our choice.
+
+    # Default to the same format as in the request:
+    for (@{_request_content_types($request)}) {
+        push @content_types, $_;
+    }
 
     # remove duplicates
     my %seen;
@@ -76,14 +94,16 @@ sub _find_content_type {
 sub serialize {
     my ($self, $entity) = @_;
     my $request    = Dancer::SharedData->request;
-    my $serializer = $self->_load_serializer($request);
+    my $content_types = _response_content_types($request);
+    my $serializer = $self->_load_serializer($request, $content_types);
     return $serializer->serialize($entity);
 }
 
 sub deserialize {
     my ($self, $content) = @_;
     my $request    = Dancer::SharedData->request;
-    my $serializer = $self->_load_serializer($request);
+    my $content_types = _request_content_types($request);
+    my $serializer = $self->_load_serializer($request, $content_types);
     return $serializer->deserialize($content);
 }
 
@@ -98,10 +118,12 @@ sub support_content_type {
 }
 
 sub _load_serializer {
-    my ($self, $request) = @_;
+    my ($self, $request, $content_types) = @_;
 
-    my $content_types = _find_content_type($request);
     foreach my $ct (@$content_types) {
+        # 'content_type' => 'text/xml; charset=utf-8'
+        my $oct = $ct;
+        $ct = (split ';', $ct)[0];
         if (exists $serializer->{$ct}) {
             my $module = "Dancer::Serializer::" . $serializer->{$ct};
             if (!exists $loaded_serializer->{$module}) {
@@ -110,19 +132,28 @@ sub _load_serializer {
                     $loaded_serializer->{$module} = $serializer_object;
                 }
             }
-            $_content_type = $ct;
+            $_content_type = $oct;
             return $loaded_serializer->{$module};
         }
     }
 }
 
 1;
+
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Serializer::Mutable - Serialize and deserialize content using the appropriate HTTP header
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     # in config.yml
@@ -221,3 +252,16 @@ be one of YAML, XML, JSON.
 Returns the content-type that was used during the last C<serialize> /
 C<deserialize> call. B<WARNING> : you must call C<serialize> / C<deserialize>
 before calling C<content_type>. Otherwise the return value will be C<undef>.
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Serializer::XML;
-
+BEGIN {
+  $Dancer::Serializer::XML::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: serializer for handling XML data
+$Dancer::Serializer::XML::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -76,12 +80,21 @@ sub deserialize {
 sub content_type {'text/xml'}
 
 1;
+
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Serializer::XML - serializer for handling XML data
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 =head1 DESCRIPTION
@@ -111,3 +124,16 @@ config file:
            AttrIndent: 1
         deserialize:
            ForceArray: 1
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Serializer::YAML;
-
+BEGIN {
+  $Dancer::Serializer::YAML::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: serializer for handling YAML data
+$Dancer::Serializer::YAML::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -44,12 +48,21 @@ sub deserialize {
 sub content_type {'text/x-yaml'}
 
 1;
+
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Serializer::YAML - serializer for handling YAML data
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
 =head1 DESCRIPTION
@@ -67,3 +80,16 @@ Deserialize a YAML structure to a data structure
 =head2 content_type
 
 Return 'text/x-yaml'
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Serializer;
-
+BEGIN {
+  $Dancer::Serializer::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: serializer wrapper for Dancer
+$Dancer::Serializer::VERSION = '1.3130';
 # Factory for serializer engines
 
 use strict;
@@ -123,10 +127,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Serializer - serializer wrapper for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This module is the wrapper that provides support for different
@@ -171,7 +181,6 @@ your C<foo> route can do something like:
      #  ...
   }
 
-
 =head1 AUTHORS
 
 This module has been written by Alexis Sukrieh and Franck Cuny.
@@ -186,4 +195,15 @@ itself.
 
 See L<Dancer> for details about the complete framework.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,4 +1,9 @@
 package Dancer::Session::Abstract;
+BEGIN {
+  $Dancer::Session::Abstract::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: abstract class for session engine
+$Dancer::Session::Abstract::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -60,6 +65,20 @@ sub session_name {
     setting('session_name') || 'dancer.session';
 }
 
+# May be overriden if session key value pairs aren't stored in the
+# session object's hash
+sub get_value {
+    my ( $self, $key ) = @_;
+    return $self->{$key};
+}
+
+# May be overriden if session key value pairs aren't stored in the
+# session object's hash
+sub set_value {
+    my ( $self, $key, $value ) = @_;
+    $self->{$key} = $value;
+}
+
 
 # Methods below this line should not be overloaded.
 
@@ -83,15 +102,17 @@ sub build_id {
 }
 
 sub read_session_id {
-    my $name = session_name();
-    my $c = Dancer::Cookies->cookies->{$name};
+    my ($class) = @_;
+
+    my $name = $class->session_name();
+    my $c    = Dancer::Cookies->cookies->{$name};
     return (defined $c) ? $c->value : undef;
 }
 
 sub write_session_id {
     my ($class, $id) = @_;
 
-    my $name = session_name();
+    my $name = $class->session_name();
     my %cookie = (
         name   => $name,
         value  => $id,
@@ -112,47 +133,20 @@ sub write_session_id {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Session::Abstract - abstract class for session engine
 
-=head1 SPEC
-
-=over 4
-
-=item B<role>
-
-A Dancer::Session object represents a session engine and should provide anything
-needed to manipulate a session, whatever its storing engine is.
-
-=item B<id>
-
-The session id will be written to a cookie, by default named C<dancer.session>, 
-it is assumed that a client must accept cookies to be able to use a 
-session-aware Dancer webapp. (The cookie name can be change using the
-C<session_name> config setting.)
-
-=item B<storage engine>
-
-When the session engine is enabled, a I<before> filter takes care to initialize
-the appropriate session engine (according to the setting C<session>).
-
-Then, the filter looks for a cookie named C<dancer.session> (or whatever you've
-set the C<session_name> setting to, if you've used it) in order to
-I<retrieve> the current session object. If not found, a new session object is
-I<created> and its id written to the cookie.
-
-Whenever a session call is made within a route handler, the singleton
-representing the current session object is modified.
-
-A I<flush> is made to the session object after every modification unless
-the session engine overrides the C<is_lazy> method to return true.
+=head1 VERSION
 
-=back
+version 1.3130
 
 =head1 DESCRIPTION
 
@@ -226,6 +220,14 @@ Returns a string with the name of cookie used for storing the session ID.
 You should probably not override this; the user can control the cookie name
 using the C<session_name> setting.
 
+=item B<get_value($key)>
+
+Retrieves the value associated with the key.
+
+=item B<set_value($key, $value)>
+
+Stores the value associated with the key.
+
 =back
 
 =head2 Inherited Methods
@@ -255,4 +257,49 @@ that a flush is called before the end of the request.
 
 =back
 
+=head1 SPEC
+
+=over 4
+
+=item B<role>
+
+A Dancer::Session object represents a session engine and should provide anything
+needed to manipulate a session, whatever its storing engine is.
+
+=item B<id>
+
+The session id will be written to a cookie, by default named C<dancer.session>,
+it is assumed that a client must accept cookies to be able to use a
+session-aware Dancer webapp. (The cookie name can be change using the
+C<session_name> config setting.)
+
+=item B<storage engine>
+
+When the session engine is enabled, a I<before> filter takes care to initialize
+the appropriate session engine (according to the setting C<session>).
+
+Then, the filter looks for a cookie named C<dancer.session> (or whatever you've
+set the C<session_name> setting to, if you've used it) in order to
+I<retrieve> the current session object. If not found, a new session object is
+I<created> and its id written to the cookie.
+
+Whenever a session call is made within a route handler, the singleton
+representing the current session object is modified.
+
+A I<flush> is made to the session object after every modification unless
+the session engine overrides the C<is_lazy> method to return true.
+
+=back
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Session::Simple;
-
+BEGIN {
+  $Dancer::Session::Simple::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: in-memory session backend for Dancer
+$Dancer::Session::Simple::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Dancer::Session::Abstract';
@@ -36,27 +40,32 @@ sub flush {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Session::Simple - in-memory session backend for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This module implements a very simple session backend, holding all session data
 in memory.  This means that sessions are volatile, and no longer exist when the
 process exits.  This module is likely to be most useful for testing purposes.
 
-
 =head1 CONFIGURATION
 
 The setting B<session> should be set to C<Simple> in order to use this session
 engine in a Dancer application.
 
-
 =head1 AUTHOR
 
 This module has been written by David Precious, see the AUTHORS file for
@@ -75,4 +84,15 @@ This module is copyright (c) 2010 David Precious <davidp@preshweb.co.uk>
 This module is free software and is released under the same terms as Perl
 itself.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Session::YAML;
-
+BEGIN {
+  $Dancer::Session::YAML::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: YAML-file-based session backend for Dancer
+$Dancer::Session::YAML::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -95,14 +99,21 @@ sub flush {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Session::YAML - YAML-file-based session backend for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This module implements a session engine based on YAML files. Session are stored
@@ -163,4 +174,15 @@ This module is copyright (c) 2009 Alexis Sukrieh <sukria@sukria.net>
 This module is free software and is released under the same terms as Perl
 itself.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Session;
-
+BEGIN {
+  $Dancer::Session::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: session engine for the Dancer framework
+$Dancer::Session::VERSION = '1.3130';
 use strict;
 use warnings;
 
@@ -21,6 +25,8 @@ sub init {
 
 # retrieve or create a session for the client
 sub get_current_session {
+    shift;
+    my %p       = @_;
     my $sid     = engine->read_session_id;
     my $session = undef;
     my $class   = ref(engine);
@@ -33,18 +39,19 @@ sub get_current_session {
 
     # Generate a session cookie; we want to do this regardless of whether the
     # session is new or existing, so that the cookie expiry is updated.
-    engine->write_session_id($session->id);
+    engine->write_session_id($session->id)
+        unless $p{no_update};
 
     return $session;
 }
 
-sub get { get_current_session() }
+sub get { get_current_session(@_) }
 
 sub read {
     my ($class, $key) = @_;
     return unless $key;
     my $session = get_current_session();
-    return $session->{$key};
+    return $session->get_value($key);
 }
 
 sub write {
@@ -54,7 +61,7 @@ sub write {
     $key eq 'id' and croak 'Can\'t store to session key with name "id"';
 
     my $session = get_current_session();
-    $session->{$key} = $value;
+    $session->set_value($key, $value);
 
     # TODO : should be moved as an "after" filter
     $session->flush unless $session->is_lazy;
@@ -62,14 +69,21 @@ sub write {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Session - session engine for the Dancer framework
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This module provides support for server-side sessions for the L<Dancer> web
@@ -112,8 +126,8 @@ Retrieving that value later:
     my $foo = session 'foo';
 
 You can either look for an existing item in the session storage or modify one.
-Here is a simple example of two route handlers that implement basic C</login> 
-and C</home> actions using the session engine. 
+Here is a simple example of two route handlers that implement basic C</login>
+and C</home> actions using the session engine.
 
     post '/login' => sub {
         # look for params and authenticate the user
@@ -136,7 +150,6 @@ whether the user is logged in for each route handler; there's an example in the
 L<Dancer::Cookbook> showing how to use a before filter to check whether the user
 is logged in before all requests, and redirect to a login page if not.
 
-
 =head1 SUPPORTED ENGINES
 
 Dancer has a modular session engine that makes implementing new session backends
@@ -155,8 +168,8 @@ but maybe not the best for production needs.
 
 =item L<Dancer::Session::Simple>
 
-A very simple session backend, holding all session data in memory.  This means 
-that sessions are volatile, and no longer exist when the process exits.  This 
+A very simple session backend, holding all session data in memory.  This means
+that sessions are volatile, and no longer exist when the process exits.  This
 module is likely to be most useful for testing purposes, and of little use for
 production.
 
@@ -179,7 +192,7 @@ inside encrypted cookies (this engine doesn't use a server-side storage).
 
 =item L<Dancer::Session::Storable>
 
-This backend stores sessions on disc using Storable, which offers solid 
+This backend stores sessions on disc using Storable, which offers solid
 performance and reliable serialization of various data structures.
 
 =item L<Dancer::Session::MongoDB>
@@ -202,7 +215,6 @@ between a Dancer app and other Plack-based apps.
 Dancer::Session may depend on third-party modules, depending on the session
 engine used. See the session engine module for details.
 
-
 =head1 AUTHORS
 
 This module has been written by Alexis Sukrieh. See the AUTHORS file that comes
@@ -217,4 +229,15 @@ itself.
 
 See L<Dancer> for details about the complete framework.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,8 @@
 package Dancer::SharedData;
-
+BEGIN {
+  $Dancer::SharedData::AUTHORITY = 'cpan:SUKRIA';
+}
+$Dancer::SharedData::VERSION = '1.3130';
 use strict;
 use warnings;
 use Dancer::Timer;
@@ -62,3 +65,30 @@ sub reset_all {
 }
 
 'Dancer::SharedData';
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dancer::SharedData
+
+=head1 VERSION
+
+version 1.3130
+
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,5 +1,9 @@
 package Dancer::Template::Abstract;
-
+BEGIN {
+  $Dancer::Template::Abstract::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: abstract class for Dancer's template engines
+$Dancer::Template::Abstract::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -205,14 +209,21 @@ sub template {
 sub view_exists { return defined $_[1] &&  -f $_[1] }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Template::Abstract - abstract class for Dancer's template engines
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This class is provided as a base class for each template engine. Any template
@@ -347,4 +358,15 @@ Examples :
 
 This module has been written by Alexis Sukrieh, see L<Dancer> for details.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,4 +1,9 @@
 package Dancer::Template::Simple;
+BEGIN {
+  $Dancer::Template::Simple::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: pure Perl 5 template engine for Dancer
+$Dancer::Template::Simple::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -158,10 +163,16 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Template::Simple - pure Perl 5 template engine for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This template engine is provided as a default one for the L<< Dancer >> micro
@@ -204,4 +215,15 @@ This module has been written by Alexis Sukrieh.
 This module is free software and is released under the same terms as Perl
 itself.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Template::TemplateToolkit;
-
+BEGIN {
+  $Dancer::Template::TemplateToolkit::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Template Toolkit wrapper for Dancer
+$Dancer::Template::TemplateToolkit::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
@@ -86,14 +90,21 @@ sub render {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Template::TemplateToolkit - Template Toolkit wrapper for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This class is an interface between Dancer's template engine abstraction layer
@@ -195,4 +206,15 @@ This module has been written by Alexis Sukrieh
 This module is free software and is released under the same terms as Perl
 itself.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Template;
-
+BEGIN {
+  $Dancer::Template::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: template wrapper for Dancer
+$Dancer::Template::VERSION = '1.3130';
 use strict;
 use warnings;
 use Dancer::ModuleLoader;
@@ -18,14 +22,21 @@ sub init {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Template - template wrapper for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 DESCRIPTION
 
 This module is the wrapper that provides support for different 
@@ -71,4 +82,15 @@ See L<Dancer> for details about the complete framework.
 You can also search the CPAN for existing engines in the Dancer::Template
 namespace.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Test;
-
+BEGIN {
+  $Dancer::Test::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: Test helpers to test a Dancer application
+$Dancer::Test::VERSION = '1.3130';
 # test helpers for Dancer apps
 
 use strict;
@@ -253,7 +257,7 @@ sub _sort_headers {
 
 sub response_headers_include {
     my ($req, $expected, $test_name) = @_;
-    $test_name ||= "headers include expected data for @$req";
+    $test_name ||= "headers include expected data for " . _req_label($req);
     my $tb = Test::Builder->new;
 
     my $response = _req_to_response($req);
@@ -262,7 +266,7 @@ sub response_headers_include {
 
 sub response_redirect_location_is {
     my ($req, $expected, $test_name) = @_;
-    $test_name ||= "redirect location looks good for @$req";
+    $test_name ||= "redirect location looks good for " . _req_label($req);
     my $tb = Test::Builder->new;
 
     my $response = _req_to_response($req);
@@ -365,6 +369,15 @@ sub dancer_response {
         $extra_env->{'CONTENT_TYPE'} = $headers->header('Content-Type');
     }
 
+    # handle all the keys of Request::_build_request_env():
+    for my $key (qw( user_agent host accept_language accept_charset
+        accept_encoding keep_alive connection accept accept_type referer
+        x_requested_with )) {
+        my $k = sprintf("HTTP_%s", uc $key);
+        $extra_env->{$k} = $headers->{$key}
+            if exists $headers->{$key};
+    }
+
     # fake the REQUEST_URI
     # TODO deal with the params
     unless( $extra_env->{REQUEST_URI} ) {
@@ -430,14 +443,21 @@ sub read_logs {
 
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Test - Test helpers to test a Dancer application
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     use strict;
@@ -450,7 +470,6 @@ Dancer::Test - Test helpers to test a Dancer application
     response_status_is [GET => '/'], 200, "GET / is found";
     response_content_like [GET => '/'], qr/hello, world/, "content looks good for /";
 
-
 =head1 DESCRIPTION
 
 This module provides test helpers for testing Dancer apps.
@@ -489,7 +508,6 @@ in Dancer's registry.
 
     route_doesnt_exist [GET => '/bogus_path'], "GET /bogus_path is not handled";
 
-
 =head2 response_exists([$method, $path], $test_name)
 
 Deprecated - Use response_status_isnt and check for status 404.
@@ -668,4 +686,15 @@ This module has been written by Alexis Sukrieh <sukria@sukria.net>
 
 L<Test::More>
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,5 +1,9 @@
 package Dancer::Timer;
-
+BEGIN {
+  $Dancer::Timer::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: a timer for Dancer
+$Dancer::Timer::VERSION = '1.3130';
 use strict;
 use warnings;
 use base 'Dancer::Object';
@@ -29,10 +33,18 @@ sub to_string {
 
 __END__
 
+=pod
+
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Timer - a timer for Dancer
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     use Dancer::Timer;
@@ -84,15 +96,13 @@ Same as C<tick>, just more expressive.
 
 =head1 AUTHOR
 
-Alexis Sukrieh
-
-=head1 LICENSE AND COPYRIGHT
+Dancer Core Developers
 
-Copyright 2009-2010 Alexis Sukrieh.
+=head1 COPYRIGHT AND LICENSE
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of either: the GNU General Public License as published
-by the Free Software Foundation; or the Artistic License.
+This software is copyright (c) 2010 by Alexis Sukrieh.
 
-See http://dev.perl.org/licenses/ for more information.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
+=cut
@@ -1,9 +1,20 @@
+# PODNAME: Dancer::Tutorial
+# ABSTRACT: An example to get you dancing
+
+__END__
+
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer::Tutorial - An example to get you dancing
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 What is Dancer?
 
 Dancer is a "micro" web framework which is modeled after a Ruby framework called L<Sinatra|http://www.sinatrarb.com>
@@ -59,12 +70,11 @@ Create the database by running the follow from the shell:
         text string not null
     );
     ^D
-	
+
 The above creates a single table with three columns: I<id>, I<title>, and
 I<text>.  The 'I<id>' field is the primary key and will
 automatically get an ID assigned by the database engine when a row is inserted.
 
-
 We want our application to initialize the database automatically for us when we start it, so open your favorite
 L<text editor|http://www.vim.org> and create a file called 'dancr.pl'.  We're going to put the following subroutines
 in that file:
@@ -81,7 +91,7 @@ in that file:
     my $schema = read_file('./schema.sql');
     $db->do($schema) or die $db->errstr;
   }
-  
+
 Nothing too fancy in here, I hope. Standard DBI except for the C<setting('database')> thing - more on that in a bit. 
 For now, just assume that the expression evaluates to file location for the database file.
 
@@ -89,7 +99,6 @@ For now, just assume that the expression evaluates to file location for the data
 easy way to configure and manage database connections for your Dancer apps, but
 the above will suffice for this tutorial.)
 
-
 =head1 Our first route handler
 
 Let's tackle our first route handler now, the one for the root URL '/'. This is what it looks like:
@@ -303,7 +312,7 @@ handler for the C</login> route.
       'err' => $err,
     };
   };
- 
+
 This is the first handler which accepts two different verb types, a GET for a
 human browsing to the URL and a POST for the browser to submit the user's input
 to the web application.  Since we're handling two different verbs, we check to
@@ -460,7 +469,6 @@ Assuming you have Git installed, you can clone the code:
 
 ... then run C<dancer.pl>.
 
-
 =head1 Advanced route moves
 
 There's a lot more to route matching than shown here. For example, you can
@@ -548,4 +556,15 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 DAMAGE.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,15 +1,14 @@
 package Dancer;
-
+BEGIN {
+  $Dancer::AUTHORITY = 'cpan:SUKRIA';
+}
+#ABSTRACT: lightweight yet powerful web application framework
+$Dancer::VERSION = '1.3130';
 use strict;
 use warnings;
 use Carp;
 use Cwd 'realpath';
 
-our $VERSION   = '1.3120';
-our $AUTHORITY = 'SUKRIA';
-
-$VERSION = eval $VERSION;
-
 use Dancer::App;
 use Dancer::Config;
 use Dancer::Cookies;
@@ -485,14 +484,21 @@ sub _start {
 }
 
 1;
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dancer - lightweight yet powerful web application framework
 
+=head1 VERSION
+
+version 1.3130
+
 =head1 SYNOPSIS
 
     #!/usr/bin/perl
@@ -545,7 +551,6 @@ involving Dancer and Plack, see L<Dancer::Deployment>.
 You can find out more about the many useful plugins available for Dancer in
 L<Dancer::Plugins>.
 
-
 =head1 EXPORTS
 
 By default, C<use Dancer> exports all the functions below plus sets up
@@ -615,7 +620,6 @@ them:
 
 The above would import all keywords as normal, with the exception of C<session>.
 
-
 =head1 FUNCTIONS
 
 =head2 after
@@ -661,7 +665,6 @@ In the case you have stored something else than a Scalar in your cookie:
         return ($values{token}, $values{token_secret});
     };
 
-
 =head2 cookie
 
 Accesses a cookie value (or sets it). Note that this method will
@@ -724,7 +727,7 @@ Returns the version of Dancer. If you need the major version, do something like:
 Logs a message of debug level:
 
     debug "This is a debug message";
-    
+
 See L<Dancer::Logger> for details on how to configure where log messages go.
 
 =head2 dirname
@@ -815,8 +818,6 @@ only used to change the method of your request. Use with caution.
 
     return forward '/home', { auth => 1 }, { method => 'POST' };
 
-
-
 =head2 from_dumper ($structure)
 
 Deserializes a L<< Data::Dumper >> structure.
@@ -847,7 +848,6 @@ Defines a route for HTTP B<GET> requests to the given path:
 
 Note that a route to match B<HEAD> requests is automatically created as well.
 
-
 =head2 halt
 
 Sets a response object with the content given.
@@ -936,7 +936,6 @@ This hook receives as argument the path of the file to render.
     ...
   };
 
-
 =item before_error_init
 
 This hook receives as argument a L<Dancer::Error> object.
@@ -946,7 +945,6 @@ This hook receives as argument a L<Dancer::Error> object.
     ...
   };
 
-
 =item before_error_render
 
 This hook receives as argument a L<Dancer::Error> object.
@@ -1186,8 +1184,11 @@ commonly-used methods are summarized below:
 =head2 params
 
 I<This method should be called from a route handler>.
-It's an alias for the L<Dancer::Request params accessor|Dancer::Request/"params">. It returns
-an hash reference to all defined parameters. Check C<param> below to access quickly to a single
+It's an alias for the L<Dancer::Request params
+accessor|Dancer::Request/"params-source">. In list context it returns a
+list of key/value pair of all defined parameters. In scalar context, 
+it returns a hash reference instead.
+Check C<param> below to access quickly to a single
 parameter value.
 
 =head2 param
@@ -1238,7 +1239,6 @@ you can find at:
 
 L<https://github.com/bestpractical/http-server-simple/pull/1>
 
-
 =head2 path
 
 Concatenates multiple paths together, without worrying about the underlying
@@ -1382,7 +1382,6 @@ example:
     request->remote_address;  # user's IP address
     request->user_agent;      # User-Agent header value
 
-
 =head2 send_error
 
 Returns a HTTP error.  By default the HTTP code returned is 500:
@@ -1506,7 +1505,6 @@ You can also set the number of bytes that will be read at a time (default being
         );
     };
 
-
 The content-type will be set depending on the current MIME types definition
 (see C<mime> if you want to define your own).
 
@@ -1625,6 +1623,14 @@ If you need to fetch the session ID being used for any reason:
 
     my $id = session->id;
 
+In order to be able to use sessions, first  you need to enable session support in
+one of the configuration files.  A quick way to do it is to add
+
+    session: "YAML"
+
+to config.yml.
+
+For more details, see L<Dancer::Session>.
 
 =head2 splat
 
@@ -1845,7 +1851,6 @@ versions:
         "i don't want to $$value_for{action} the $$value_for{object} $$value_for{id} !"
     };
 
-
 =head2 var
 
 Provides an accessor for variables shared between filters and route handlers.
@@ -1896,7 +1901,6 @@ contribute).
 Also, why not L<watch the repo|https://github.com/PerlDancer/Dancer/toggle_watch>
 to keep up to date with the latest upcoming changes?
 
-
 =head1 GETTING HELP / CONTRIBUTING
 
 The Dancer development team can be found on #dancer on irc.perl.org:
@@ -1912,7 +1916,6 @@ L<http://lists.preshweb.co.uk/mailman/listinfo/dancer-users>
 If you'd like to contribute to the Dancer project, please see
 L<http://www.perldancer.org/contribute> for all the ways you can help!
 
-
 =head1 DEPENDENCIES
 
 The following modules are mandatory (Dancer cannot run without them):
@@ -1947,13 +1950,6 @@ The following modules are optional:
 
 =back
 
-
-=head1 LICENSE
-
-This module is free software and is published under the same
-terms as Perl itself.
-
-
 =head1 SEE ALSO
 
 Main Dancer web site: L<http://perldancer.org/>.
@@ -1961,4 +1957,15 @@ Main Dancer web site: L<http://perldancer.org/>.
 The concept behind this module comes from the Sinatra ruby project,
 see L<http://www.sinatrarb.com/> for details.
 
+=head1 AUTHOR
+
+Dancer Core Developers
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Alexis Sukrieh.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
@@ -1,1550 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-use Dancer::Template::Simple;
-use File::Basename 'basename', 'dirname';
-use File::Path 'mkpath';
-use File::Spec::Functions;
-use Getopt::Long;
-use Pod::Usage;
-use Dancer::Renderer;
-use LWP::UserAgent;
-use constant FILE => 1;
-
-# options
-my $help = 0;
-my $do_check_dancer_version = 1;
-my $name = undef;
-my $path = '.';
-
-sub templates($);
-sub app_tree($);
-sub create_node($;$);
-
-GetOptions(
-    "h|help"          => \$help,
-    "a|application=s" => \$name,
-    "p|path=s"        => \$path,
-    "x|no-check"      => sub { $do_check_dancer_version = 0 },
-    "v|version"       => \&version,
-) or pod2usage( -verbose => 1 );
-
-# main
-my $PERL_INTERPRETER = -r '/usr/bin/env' ? '#!/usr/bin/env perl' : "#!$^X";
-
-pod2usage( -verbose => 1 ) if $help;
-pod2usage( -verbose => 1 ) if not defined $name;
-pod2usage( -verbose => 1, -msg => "directory '$path' does not exist" )  unless -d $path;
-pod2usage( -verbose => 1, -msg => "directory '$path' is not writable" ) unless -w $path;
-sub version {require Dancer; print 'Dancer ' . $Dancer::VERSION . "\n"; exit 0;}
-
-validate_app_name($name);
-
-my $DO_OVERWRITE_ALL = 0;
-my $DANCER_APP_DIR   = get_application_path($path, $name);
-my $DANCER_SCRIPT    = get_script_path($name);
-my ($LIB_FILE, $LIB_PATH) = get_lib_path($name);
-
-my $AUTO_RELOAD = eval "require Module::Refresh and require Clone" ? 1 : 0;
-
-require Dancer;
-my $DANCER_VERSION   = $Dancer::VERSION;
-
-version_check() if $do_check_dancer_version;
-safe_mkdir($DANCER_APP_DIR);
-create_node( app_tree($name), $DANCER_APP_DIR );
-
-unless (eval "require YAML") {
-    print <<NOYAML;
-*****
-WARNING: YAML.pm is not installed.  This is not a full dependency, but is highly
-recommended; in particular, the scaffolded Dancer app being created will not be
-able to read settings from the config file without YAML.pm being installed.
-
-To resolve this, simply install YAML from CPAN, for instance using one of the
-following commands:
-
-  cpan YAML
-  perl -MCPAN -e 'install YAML'
-  curl -L http://cpanmin.us | perl - --sudo YAML
-*****
-NOYAML
-}
-
-# subs
-
-sub validate_app_name {
-    my $name = shift;
-
-    return unless $name =~ /[^\w:]/ 
-               or $name =~ /^\d/ 
-               or $name =~ /\b:\b|:{3,}/;
-
-    die <<"END_DIE" 
-Error: Invalid application name '$name'
-Application names must not contain single colons, dots, hyphens or start with a number.
-END_DIE
-
-}
-
-sub get_application_path {
-    my ($path, $app_name) = @_;
-    catdir($path, _dash_name($app_name));
-}
-
-sub get_lib_path {
-    my $name = shift;
-    my @lib_path = split('::', $name);
-    my ($lib_file, $lib_path) = (pop @lib_path) . ".pm";
-    $lib_path = join('/', @lib_path);
-    $lib_path .= '/' if length $lib_path;
-    return ($lib_file, $lib_path);
-}
-
-sub get_script_path {
-    _dash_name(shift);
-}
-
-sub _dash_name {
-    my $name = shift;
-    $name =~ s/\:\:/-/g;
-    $name;
-}
-
-sub create_node($;$) {
-    my ($node, $root) = @_;
-    $root ||= '.';
-
-    my $manifest_name = catfile($root => 'MANIFEST');
-    open my $manifest, ">", $manifest_name or die $!;
-
-    # create a closure, so we do not need to get $root passed as
-    # argument on _create_node
-    my $add_to_manifest = sub {
-        my $file = shift;
-        $file =~ s{^$root/?}{};
-        print $manifest "$file\n";
-    };
-
-    $add_to_manifest->($manifest_name);
-    _create_node($add_to_manifest, $node, $root);
-    close $manifest;
-}
-
-sub _create_node {
-    my ($add_to_manifest, $node, $root) = @_;
-
-    my $templates = templates($name);
-
-    while ( my ($path, $content) = each %$node ) {
-        $path = catfile($root, $path);
-
-        if (ref($content) eq 'HASH') {
-            safe_mkdir($path);
-            _create_node($add_to_manifest, $content, $path);
-        } elsif (ref($content) eq 'CODE') {
-            # The content is a coderef, which, given the path to the file it
-            # should create, will do the appropriate thing:
-            $content->($path);
-            $add_to_manifest->($path);
-       } else {
-            my $file = basename($path);
-            my $dir  = dirname($path);
-            my $ex = ($file =~ s/^\+//); # look for '+' flag (executable)
-            my $template = $templates->{$file};
-
-            $path = catfile($dir, $file); # rebuild the path without the '+' flag
-            write_file($path, $template, {appdir => File::Spec->rel2abs($DANCER_APP_DIR)});
-            chmod 0755, $path if $ex;
-            $add_to_manifest->($path);
-        }
-    }
-}
-
-sub app_tree($) {
-    my ($appname) = @_;
-
-    return {
-        "Makefile.PL"        => FILE,
-        "MANIFEST.SKIP"      => FILE,
-        lib                  => {
-         $LIB_PATH => {
-            $LIB_FILE => FILE,}
-        },
-        "bin" => {
-            "+app.pl" => FILE,
-        },
-        "config.yml"         => FILE,
-        "environments"       => {
-            "development.yml" => FILE,
-            "production.yml"  => FILE,
-        },
-        "views" => {
-            "layouts"  => {"main.tt" => FILE,},
-            "index.tt" => FILE,
-        },
-        "public" => {
-            "+dispatch.cgi"  => FILE,
-            "+dispatch.fcgi" => FILE,
-            "404.html"       => FILE,
-            "500.html"       => FILE,
-            "css"            => {
-                "style.css" => FILE,
-                "error.css" => FILE,
-            },
-            "images"      => {
-                "perldancer-bg.jpg" => \&write_bg,
-                "perldancer.jpg" => \&write_logo,
-            },
-            "javascripts" => {
-                "jquery.js" => FILE,
-            },
-            "favicon.ico" => \&write_favicon,
-        },
-        "t" => {
-            "001_base.t"        => FILE,
-            "002_index_route.t" => FILE,
-        },
-    };
-}
-
-
-sub safe_mkdir {
-    my ($dir) = @_;
-    if (not -d $dir) {
-        print "+ $dir\n";
-        mkpath $dir or die "could not mkpath $dir: $!";
-    }
-    else {
-        print "  $dir\n";
-    }
-}
-
-sub write_file {
-    my ($path, $template, $vars) = @_;
-    die "no template found for $path" unless defined $template;
-
-    $vars->{dancer_version} = $DANCER_VERSION;
-
-    # if file already exists, ask for confirmation
-    if (-f $path && (not $DO_OVERWRITE_ALL)) {
-        print "! $path exists, overwrite? [N/y/a]: ";
-        my $res = <STDIN>; chomp($res);
-        $DO_OVERWRITE_ALL = 1 if $res eq 'a';
-        return 0 unless ($res eq 'y') or ($res eq 'a');
-    }
-
-    my $fh;
-    my $content = process_template($template, $vars);
-    print "+ $path\n";
-    open $fh, '>', $path or die "unable to open file `$path' for writing: $!";
-    print $fh $content;
-    close $fh;
-}
-
-sub process_template {
-    my ($template, $tokens) = @_;
-    my $engine = Dancer::Template::Simple->new;
-    $engine->{start_tag} = '[%';
-    $engine->{stop_tag} = '%]';
-    return $engine->render(\$template, $tokens);
-}
-
-sub write_data_to_file {
-    my ($data, $path) = @_;
-    open(my $fh, '>', $path)
-      or warn "Failed to write file to $path - $!" and return;
-    binmode($fh);
-    print {$fh} unpack 'u*', $data;
-    close $fh;
-}
-
-
-sub send_http_request {
-    my $url = shift;
-    my $ua = LWP::UserAgent->new;
-    $ua->timeout(5);
-    $ua->env_proxy();
-
-    my $response = $ua->get($url);
-
-    if ($response->is_success) {
-        return $response->content;
-    }
-    else {
-        return;
-    }
-}
-
-sub version_check {
-    my $latest_version = 0;
-    require Dancer;
-
-    my $resp = send_http_request('http://search.cpan.org/api/module/Dancer');
-
-    if ($resp) {
-        if ( $resp =~ /"version" (?:\s+)? \: (?:\s+)? "(\d\.\d+)"/x ) {
-            $latest_version = $1;
-        } else {
-            die "Can't understand search.cpan.org's reply.\n";
-        }
-    }
-
-    return if $DANCER_VERSION =~  m/_/;
-
-    if ($latest_version > $DANCER_VERSION) {
-        print qq|
-The latest stable Dancer release is $latest_version, you are currently using $DANCER_VERSION.
-Please check http://search.cpan.org/dist/Dancer/ for updates.
-
-|;
-    }
-}
-
-sub download_file {
-    my ($path, $url) = @_;
-    my $resp = send_http_request($url);
-    if ($resp) {
-        open my $fh, '>', $path or die "cannot open $path for writing: $!";
-        print $fh $resp;
-        close $fh
-    }
-    return 1;
-}
-
-sub templates($) {
-    my $appname    = shift;
-    my $appfile    = $appname;
-    my $cleanfiles = $appname;
-
-    $appfile    =~ s{::}{/}g;
-    $cleanfiles =~ s{::}{-}g;
-
-    return {
-
-'Makefile.PL' =>
-"use strict;
-use warnings;
-use ExtUtils::MakeMaker;
-
-# Normalize version strings like 6.30_02 to 6.3002,
-# so that we can do numerical comparisons on it.
-my \$eumm_version = \$ExtUtils::MakeMaker::VERSION;
-\$eumm_version =~ s/_//;
-
-WriteMakefile(
-    NAME                => '$appname',
-    AUTHOR              => q{YOUR NAME <youremail\@example.com>},
-    VERSION_FROM        => 'lib/$appfile.pm',
-    ABSTRACT            => 'YOUR APPLICATION ABSTRACT',
-    (\$eumm_version >= 6.3001
-      ? ('LICENSE'=> 'perl')
-      : ()),
-    PL_FILES            => {},
-    PREREQ_PM => {
-        'Test::More' => 0,
-        'YAML'       => 0,
-        'Dancer'     => [% dancer_version %],
-    },
-    dist                => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
-    clean               => { FILES => '$cleanfiles-*' },
-);
-",
-'index.tt'  => 
-'  
-<!-- 
-    Credit goes to the Ruby on Rails team for this page 
-    has been heavily based on the default Rails page that is 
-    built with a scaffolded application.
-
-    Thanks a lot to them for their work.
-
-    See Ruby on Rails if you want a kickass framework in Ruby:
-    http://www.rubyonrails.org/
--->
-
-<div id="page">
-      <div id="sidebar">
-        <ul id="sidebar-items">
-          <li>
-            <h3>Join the community</h3>
-            <ul class="links">
-
-              <li><a href="http://perldancer.org/">PerlDancer</a></li>
-              <li><a href="http://twitter.com/PerlDancer/">Official Twitter</a></li>
-              <li><a href="https://github.com/PerlDancer/Dancer/">GitHub Community</a></li>
-            </ul>
-          </li>
-          
-          <li>
-            <h3>Browse the documentation</h3>
-
-            <ul class="links">
-              <li><a
-              href="http://search.cpan.org/dist/Dancer/lib/Dancer/Introduction.pod">Introduction</a></li>
-              <li><a href="http://search.cpan.org/dist/Dancer/lib/Dancer/Cookbook.pod">Cookbook</a></li>
-              <li><a href="http://search.cpan.org/dist/Dancer/lib/Dancer/Deployment.pod">Deployment Guide</a></li>
-              <li><a
-              href="http://search.cpan.org/dist/Dancer/lib/Dancer/Tutorial.pod"
-              title="a tutorial to build a small blog engine with Dancer">Tutorial</a></li>
-            </ul>
-          </li>
-
-          <li>
-            <h3>Your application\'s environment</h3>
-
-            <ul>
-                <li>Location: <code>[% appdir %]</code></li>
-                <li>Template engine: <code><% settings.template %></code></li>
-                <li>Logger: <code><% settings.logger %></code></li>
-                <li>Environment: <code><% settings.environment %></code></li>
-            </ul>
-
-          </li>
-        </ul>
-
-      </div>
-
-      <div id="content">
-        <div id="header">
-          <h1>Perl is dancing</h1>
-          <h2>You&rsquo;ve joined the dance floor!</h2>
-        </div>
-
-        <div id="getting-started">
-          <h1>Getting started</h1>
-          <h2>Here&rsquo;s how to get dancing:</h2>
-                    
-          <h3><a href="#" id="about_env_link">About your application\'s environment</a></h3>
-
-          <div id="about-content" style="display: none;">
-            <table>
-                <tbody>
-                <tr>
-                    <td>Perl version</td>
-                    <td><tt><% perl_version %></tt></td>
-                </tr>
-                <tr>
-                    <td>Dancer version</td>
-                    <td><tt><% dancer_version %></tt></td>
-                </tr>
-                <tr>
-                    <td>Backend</td>
-                    <td><tt><% settings.apphandler %></tt></td>
-                </tr>
-                <tr>
-                    <td>Appdir</td>
-                    <td><tt>[% appdir %]</tt></td>
-                </tr>
-                <tr>
-                    <td>Template engine</td>
-                    <td><tt><% settings.template %></tt></td>
-                </tr>
-                <tr>
-                    <td>Logger engine</td>
-                    <td><tt><% settings.logger %></tt></td>
-                </tr>
-                <tr>
-                    <td>Running environment</td>
-                    <td><tt><% settings.environment %></tt></td>
-                </tr>
-                </tbody>
-            </table>
-          </div>
-
-    <script type="text/javascript">
-    $(\'#about_env_link\').click(function() {
-        $(\'#about-content\').slideToggle(\'fast\', function() {
-            // ok
-        });
-        return( false );
-    });
-    </script>
-
-
-          <ol>          
-            <li>
-              <h2>Tune your application</h2>
-
-              <p>
-              Your application is configured via a global configuration file,
-              <tt>config.yml</tt> and an "environment" configuration file,
-              <tt>environments/development.yml</tt>. Edit those files if you
-              want to change the settings of your application.
-              </p>
-            </li>
-
-            <li>
-              <h2>Add your own routes</h2>
-
-              <p>
-              The default route that displays this page can be removed,
-              it\'s just here to help you get started. The template used to
-              generate this content is located in 
-              <code>views/index.tt</code>.
-              You can add some routes to <tt>lib/'.$LIB_PATH.$LIB_FILE.'</tt>. 
-              </p>
-            </li>
-
-            <li>
-                <h2>Enjoy web development again</h2>
-
-                <p>
-                Once you\'ve made your changes, restart your standalone server
-                (bin/app.pl) and you\'re ready to test your web application.
-                </p>
-            </li>
-
-          </ol>
-        </div>
-      </div>
-    </div>
-',
-
-'main.tt'   =>
-'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-type" content="text/html; charset=<% settings.charset %>" />
-<title>'.$appname.'</title>
-<link rel="stylesheet" href="<% request.uri_base %>/css/style.css" />
-
-<!-- Grab Google CDN\'s jQuery. fall back to local if necessary -->
-<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
-<script type="text/javascript">/* <![CDATA[ */
-    !window.jQuery && document.write(\'<script type="text/javascript" src="<% request.uri_base %>/javascripts/jquery.js"><\/script>\')
-/* ]]> */</script>
-
-</head>
-<body>
-<% content %>
-<div id="footer">
-Powered by <a href="http://perldancer.org/">Dancer</a> <% dancer_version %>
-</div>
-</body>
-</html>
-',
-
-"dispatch.cgi" =>
-"$PERL_INTERPRETER
-use Dancer ':syntax';
-use FindBin '\$RealBin';
-use Plack::Runner;
-
-# For some reason Apache SetEnv directives dont propagate
-# correctly to the dispatchers, so forcing PSGI and env here 
-# is safer.
-set apphandler => 'PSGI';
-set environment => 'production';
-
-my \$psgi = path(\$RealBin, '..', 'bin', 'app.pl');
-die \"Unable to read startup script: \$psgi\" unless -r \$psgi;
-
-Plack::Runner->run(\$psgi);
-",
-
-
-"dispatch.fcgi" =>
-qq{$PERL_INTERPRETER
-use Dancer ':syntax';
-use FindBin '\$RealBin';
-use Plack::Handler::FCGI;
-
-# For some reason Apache SetEnv directives dont propagate
-# correctly to the dispatchers, so forcing PSGI and env here 
-# is safer.
-set apphandler => 'PSGI';
-set environment => 'production';
-
-my \$psgi = path(\$RealBin, '..', 'bin', 'app.pl');
-my \$app = do(\$psgi);
-die "Unable to read startup script: \$@" if \$@;
-my \$server = Plack::Handler::FCGI->new(nproc => 5, detach => 1);
-
-\$server->run(\$app);
-},
-
-"app.pl" =>
-
-"$PERL_INTERPRETER
-use Dancer;
-use $appname;
-dance;
-",
-
-"$LIB_FILE" =>
-
-"package $appname;
-use Dancer ':syntax';
-
-our \$VERSION = '0.1';
-
-get '/' => sub {
-    template 'index';
-};
-
-true;
-",
-
-'style.css' =>
-'
-body {
-margin: 0;
-margin-bottom: 25px;
-padding: 0;
-background-color: #ddd;
-background-image: url("/images/perldancer-bg.jpg");
-background-repeat: no-repeat;
-background-position: top left;
-
-font-family: "Lucida Grande", "Bitstream Vera Sans", "Verdana";
-font-size: 13px;
-color: #333;
-}
-
-h1 {
-font-size: 28px;
-color: #000;
-}
-
-a  {color: #03c}
-a:hover {
-background-color: #03c;
-color: white;
-text-decoration: none;
-}
-
-#page {
-background-color: #ddd;
-width: 750px;
-margin: auto;
-margin-left: auto;
-padding-left: 0px;
-margin-right: auto;
-}
-
-#content {
-background-color: white;
-border: 3px solid #aaa;
-border-top: none;
-padding: 25px;
-width: 500px;
-}
-
-#sidebar {
-float: right;
-width: 175px;
-}
-
-#header, #about, #getting-started {
-padding-left: 75px;
-padding-right: 30px;
-}
-
-
-#header {
-background-image: url("/images/perldancer.jpg");
-background-repeat: no-repeat;
-background-position: top left;
-height: 64px;
-}
-#header h1, #header h2 {margin: 0}
-#header h2 {
-color: #888;
-font-weight: normal;
-font-size: 16px;
-}
-
-#about h3 {
-margin: 0;
-margin-bottom: 10px;
-font-size: 14px;
-}
-
-#about-content {
-background-color: #ffd;
-border: 1px solid #fc0;
-margin-left: -11px;
-}
-#about-content table {
-margin-top: 10px;
-margin-bottom: 10px;
-font-size: 11px;
-border-collapse: collapse;
-}
-#about-content td {
-padding: 10px;
-padding-top: 3px;
-padding-bottom: 3px;
-}
-#about-content td.name  {color: #555}
-#about-content td.value {color: #000}
-
-#about-content.failure {
-background-color: #fcc;
-border: 1px solid #f00;
-}
-#about-content.failure p {
-margin: 0;
-padding: 10px;
-}
-
-#getting-started {
-border-top: 1px solid #ccc;
-margin-top: 25px;
-padding-top: 15px;
-}
-#getting-started h1 {
-margin: 0;
-font-size: 20px;
-}
-#getting-started h2 {
-margin: 0;
-font-size: 14px;
-font-weight: normal;
-color: #333;
-margin-bottom: 25px;
-}
-#getting-started ol {
-margin-left: 0;
-padding-left: 0;
-}
-#getting-started li {
-font-size: 18px;
-color: #888;
-margin-bottom: 25px;
-}
-#getting-started li h2 {
-margin: 0;
-font-weight: normal;
-font-size: 18px;
-color: #333;
-}
-#getting-started li p {
-color: #555;
-font-size: 13px;
-}
-
-#search {
-margin: 0;
-padding-top: 10px;
-padding-bottom: 10px;
-font-size: 11px;
-}
-#search input {
-font-size: 11px;
-margin: 2px;
-}
-#search-text {width: 170px}
-
-#sidebar ul {
-margin-left: 0;
-padding-left: 0;
-}
-#sidebar ul h3 {
-margin-top: 25px;
-font-size: 16px;
-padding-bottom: 10px;
-border-bottom: 1px solid #ccc;
-}
-#sidebar li {
-list-style-type: none;
-}
-#sidebar ul.links li {
-margin-bottom: 5px;
-}
-
-h1, h2, h3, h4, h5 {
-font-family: sans-serif;
-margin: 1.2em 0 0.6em 0;
-}
-
-p {
-line-height: 1.5em;
-margin: 1.6em 0;
-}
-
-code, tt {
-    font-family: \'Andale Mono\', Monaco, \'Liberation Mono\', \'Bitstream Vera Sans Mono\', \'DejaVu Sans Mono\', monospace;
-}
-
-#footer {
-clear: both;
-padding-top: 2em;
-text-align: center;
-padding-right: 160px;
-font-family: sans-serif;
-font-size: 10px;
-}
-',
-
-# error.css
-"error.css" =>
-
-"body {
-    font-family: Lucida,sans-serif;
-}
-
-h1 {
-    color: #AA0000;
-    border-bottom: 1px solid #444;
-}
-
-h2 { color: #444; }
-
-pre {
-    font-family: \"lucida console\",\"monaco\",\"andale mono\",\"bitstream vera sans mono\",\"consolas\",monospace;
-    font-size: 12px;
-    border-left: 2px solid #777;
-    padding-left: 1em;
-}
-
-footer {
-    font-size: 10px;
-}
-
-span.key {
-    color: #449;
-    font-weight: bold;
-    width: 120px;
-    display: inline;
-}
-
-span.value {
-    color: #494;
-}
-
-/* these are for the message boxes */
-
-pre.content {
-    background-color: #eee;
-    color: #000;
-    padding: 1em;
-    margin: 0;
-    border: 1px solid #aaa;
-    border-top: 0;
-    margin-bottom: 1em;
-}
-
-div.title {
-    font-family: \"lucida console\",\"monaco\",\"andale mono\",\"bitstream vera sans mono\",\"consolas\",monospace;
-    font-size: 12px;
-    background-color: #aaa;
-    color: #444;
-    font-weight: bold;
-    padding: 3px;
-    padding-left: 10px;
-}
-
-pre.content span.nu {
-    color: #889;
-    margin-right: 10px;
-}
-
-pre.error {
-    background: #334;
-    color: #ccd;
-    padding: 1em;
-    border-top: 1px solid #000;
-    border-left: 1px solid #000;
-    border-right: 1px solid #eee;
-    border-bottom: 1px solid #eee;
-}
-
-",
-
-"404.html" => <<EOH,
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
-<head>
-<title>Error 404</title>
-<link rel="stylesheet" href="/css/error.css" />
-<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
-</head>
-<body>
-<h1>Error 404</h1>
-<div id="content">
-<h2>Page Not Found</h2><p>Sorry, this is the void.</p>
-</div>
-<div id="footer">
-Powered by <a href="http://perldancer.org/">Dancer</a>.
-</div>
-</body>
-</html>
-EOH
-
-"500.html" => <<EOH,
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
-<head>
-<title>Error 500</title>
-<link rel="stylesheet" href="/css/error.css" />
-<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
-</head>
-<body>
-<h1>Error 500</h1>
-<div id="content">
-<h2>Internal Server Error</h2><p>Wooops, something went wrong</p>
-</div>
-<div id="footer">
-Powered by <a href="http://perldancer.org/">Dancer</a>.
-</div>
-</body>
-</html>
-EOH
-
-'config.yml' =>
-
-"# This is the main configuration file of your Dancer app
-# env-related settings should go to environments/\$env.yml
-# all the settings in this file will be loaded at Dancer's startup.
-
-# Your application's name
-appname: \"$name\"
-
-# The default layout to use for your application (located in
-# views/layouts/main.tt)
-layout: \"main\"
-
-# when the charset is set to UTF-8 Dancer will handle for you
-# all the magic of encoding and decoding. You should not care
-# about unicode within your app when this setting is set (recommended).
-charset: \"UTF-8\"
-
-# template engine
-# simple: default and very basic template engine
-# template_toolkit: TT
-
-template: \"simple\"
-
-# template: \"template_toolkit\"
-# engines:
-#   template_toolkit:
-#     start_tag: '[%'
-#     end_tag:   '%]'
-
-",
-
-'jquery.js' => jquery_minified(),
-
-'MANIFEST.SKIP' => manifest_skip(),
-
-'development.yml' =>
-"# configuration file for development environment
-
-# the logger engine to use
-# console: log messages to STDOUT (your console where you started the
-#          application server)
-# file:    log message to a file in log/
-logger: \"console\"
-
-# the log level for this environment
-# core is the lowest, it shows Dancer's core log messages as well as yours
-# (debug, info, warning and error)
-log: \"core\"
-
-# should Dancer consider warnings as critical errors?
-warnings: 1
-
-# should Dancer show a stacktrace when an error is caught?
-show_errors: 1
-
-# auto_reload is a development and experimental feature
-# you should enable it by yourself if you want it
-# Module::Refresh is needed 
-# 
-# Be aware it's unstable and may cause a memory leak.
-# DO NOT EVER USE THIS FEATURE IN PRODUCTION 
-# OR TINY KITTENS SHALL DIE WITH LOTS OF SUFFERING
-auto_reload: 0
-",
-
-'production.yml' =>
-'# configuration file for production environment
-
-# only log warning and error messsages
-log: "warning"
-
-# log message to a file in logs/
-logger: "file"
-
-# don\'t consider warnings critical
-warnings: 0
-
-# hide errors 
-show_errors: 0
-
-# cache route resolution for maximum performance
-route_cache: 1
-
-',
-
-"001_base.t" =>
-"use Test::More tests => 1;
-use strict;
-use warnings;
-
-use_ok '$appname';
-",
-
-"002_index_route.t" =>
-"use Test::More tests => 2;
-use strict;
-use warnings;
-
-# the order is important
-use $appname;
-use Dancer::Test;
-
-route_exists [GET => '/'], 'a route handler is defined for /';
-response_status_is ['GET' => '/'], 200, 'response status is 200 for /';
-",
-
-    };
-}
-
-sub write_bg {
-    my $path = shift;
-    my $data =<<'EOF';
-M_]C_X``02D9)1@`!`0$`2`!(``#_VP!#``4#!`0$`P4$!`0%!04&!PP(!P<'
-M!P\+"PD,$0\2$A$/$1$3%AP7$Q0:%1$1&"$8&AT='Q\?$Q<B)"(>)!P>'Q[_
-MVP!#`04%!0<&!PX("`X>%!$4'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>
-M'AX>'AX>'AX>'AX>'AX>'AX>'AX>'A[_P``1"`'T`?0#`2(``A$!`Q$!_\0`
-M&0`!``,!`0````````````````(#!`$(_\0`*Q`!``("``4#!`,!`0$!````
-M``$"`Q$$$B$Q,C-!41,B87$C0E(48H%#_\0`%`$!````````````````````
-M`/_$`!01`0````````````````````#_V@`,`P$``A$#$0`_`/2H````````
-M````````````````````````````````````````````````````````````
-M````````````````````````YN#<?(.CG-'S!N/D'1S<?+H`````````````
-M``````````````````````````````````````3T5VRUCWZ@L<W'RSVS3VA7
-M-IGW!JMDK"$YZ^S/N7`73GGV1G->?=`!*<EI]W.>WRY$2[R6^`.:3FGY=BEI
-M]G)I8#GM\NQDM'NYRRY,2"R,U_E*,_RI<!JKFK*=;1/NQ.[GY!N&.N2U5U,\
-M?V!<(UO6W:4@```````````````````````````````````````GHJR98KVZ
-M@LF8B-RKOFB/'JHM>UI[H`G?):WNB1&^R=,5K>V@5I169[0OKBK7REV;TKXQ
-"$@H`
-M:XK3WA9&"/>7>>]NU9@C'>W>TP!R8Z^[O-BCX(Q?,[2C'3X!'ZE/:(<^K'^8
-M6<E/\G+7X!7.2?:I]3_RMY:_!RU^`5?5CWB'?J8_>(3Y*_Y@Y*?Y@$/XI]X<
-MG%2W:4IQ5]NCDXI]K:!"V"8[=5<X[Q[+=9*^\R[]6W:U`9YC3C5_':/:)1M@
-M]XD%$3,=I64S3'24+4M7O"(-E<E;>_5-AB9CLLQYICOU!J$:7BT=)2``````
-M```````````````````````````1M:*QN4<F2*_MFO>;3N03R99MTCI"MQ.E
-M)MV!&(WV64PS;K/1;6E,<;GNC-[7G5.@)17'2/:9<G):W2L3#M<6^MNZR(B(
-MU`*HQVGRE.N.L=H3`````````````')B)[N@*[8JSVZ2A,9*>^X7@*8R1;I:
-M-%L5;>,PLM2MNZJ:7IUK/0%5Z36>R#57)%OMM'5#)A]Z@IK,UG<-&++$])9Y
-MB8GJX#>,N++->D]FFMHM&X!T```````````````````````````!3ERZZ1W<
-MS9==(4`3,S/4(B9G4-&/'6D<U@1Q8M];)VR17[:1U1M:UYU6.BS'CBL?,@A7
-M'-IW>5L1$1J'0`<M.HVY6T2"3EIU#J-XW`(UO.^KO-//HIJ8_+G_`.H.Q:>;
-<16TS:8E'^^W:=Y`M>=ZAV;?;N'*QN\NVCEIH"@``
-MVM,]DT*3$]$Y!7SSS?A.;=-H6B*__7;>,`5M,SJ2]IB=1W1CR=MZD`E2VXZH
-MS>=_ARGN>T@LK.XVZCC\(2`$(O&])@A?'%OPK^_'^E[DQON"N8IEA1DI-)ZK
-MKXYB>:KM;Q;[;QJ094\=YK*67%->L=E0-M+Q:.B3%2TUG<-6.\7C\@F`````
-M```````````````````ISY-1J'<V3EC4=V:9W.P)ZNUK-IU#E8F9U#32L8Z;
-MGN!2M<==SW1^[+;X@K%LEMSV71$1&H`K6*QJ(=```'+1N-(TIRI@#EITZY:-
-MP"$]+;@CU/\`X[6D[ZR[R_?L$)Z[,?NG%>KE:ZF9!&LZO,NVGFIMVU-SN)=F
-MOVZ@'*1":%:VB>Z4]@0\K?IW)VASDM$[B4];KJ05QY.V]2':TF)W,NWKOK'<
-M$<?NY;4Q,IUKJ$9I.^_0$L?A"3D1J-.@A%/NVF```"O)CB>L=)6`*:7U/+='
-M+BU]U>RW)2+1^4,=IK/)?L#.ECM-9VGGQZ^ZO92#;2T6C<),>*\UG\-=9BT;
-M@'0```````````````````$<EHK7<NS.HVRYK\UOP"-K3:=RY$;EQ?@IK[K`
-MECI%*\TN1O+?\%IG)?4=H75B*QJ`(B(C4.N6G4;9YSWW[`TC-]>_X/KW_`-(
-MSQGGW3KFK/<%HY$Q,='0`49,UJWF([`O&;Z]_P`'U[_@&D9OKW_!]>_X!I&;
-MZ]_POQS-J[D$@0RVFM=P"8S?7O\`@^O?\`TC-]>_X=C//N#0*JYJSW61,3V!
-MT``%.7+:DZ@%PS?7O^':Y[S,1T!H``0R4YH_*8"G';^EE>;'RSN.R[+3<;CO
-M#F.T7KRV[@RKL%^6=3V0R5FMM(`WP*<%]QJ5P`````````````````(WGEK,
-M@KXB^HU#,E>>:VW(C<Z!/#3FM^%N6W:E78UBQ_DPU[VD$L=>6OY3`$;^,L<]
-/VR_C+'/<'`68L?/OKK0*
-MQ;;%KM.U<QKN">/)-9::6BT;AB6\/;5N7Y!JADS^K+6R9_5D%8)XZ\]M;T"`
-MO^A'^SZ,?[!3'=KP^G"KZ,?[78XU70)*\_@L5Y_`&0``74Q1;'S3.G+8ICM.
-MP5IX\DUG\(.`W5M%HW#K/PUNNF@!EXCRAJ9>(\H!4E3RC]HI4\H_8-H```"G
-*+6:SSU7.3&XT"@``
-M[1&7'N.[-,:G2^/X\FO:7.(I_:.P*J6Y;1+72W-6)8EW#WU.I!I`````````
-M```````9^(O[0OO/+698[SNTR"*_AZ?VGLIK&YB&F\_3QQ$`C/\`)DU[+HC4
-M:0PUY:_M8``"-_&6.>[9?QECGN#C1PO]F=HX3W!;RQ[,_$5U?;4S\2"A*DZM
-2M$!NIUK$LN?U9:<7A5FS^K(*
-MUO#^HJ6\/Z@-,UC?9SEK\)2`CRU^$HZ``KS^"Q7G\`9``:\$1.*-I<NNR/#^
-MDL!DS5Y;*U_%^4*`3Q3JT-C%3RC]MH#+Q'E#4R\1Y0"I*GE'[12IY1^P;0``
-M```0RUYJ_E''//6:RM47^S)$QV!3>O+:8<B=3M?Q%=Q%H9P;,5N:NTV;A[:M
-MJ6D``````````````%/$VU&F99FMS60B-SH%W#UZ[EWSRZ]DH^S#^3!'V[]P
-M6@```C?QECGNV7\98Y[@XT<)[LZ[AK5KOFG0-+/Q,]=)VS5B.C/>TVG<@B[6
-M-SIQ9AKN\?`-6/I6(9<_JRUPR9_5D%:WA_4A4E6TUG<`VC)]6Q]6P-8CBG=(
-MF4@%>?P6*\_@#(`#7P_I+%&+)%<>G,F:>T`CGMS65.SUEP$\4;M#8S\-7WEH
-M`9>(\H:F7B/*`5)4\H_:*5/*/V#:``````AEKS4GY3`58YYJ32?9GO'+:87>
-M&7]N<374\WR"FLZF);:SN&%IX>VZZ!<````````````CEGEIM)3Q,_;H&>>L
-MI88W>$&CAHUN9!W-.[16%M8U&E-/NS6E>````"-_&6.>[9?QECGN#@.Q$SV@
-M'!.*6GV3KA]YD%5:S:=0U8J16"E8CM&DX!V&3/ZLM<,F?U9!6"6.O/;4`B+O
-MH3_J#Z$_Z@%V'TH31QQRTB$@%>?P6*\_@#(``+*XIM7FVA:-3H'%F*G-/Z5K
-M>'G5M`T4C4)``R\1Y0U,O$>4`J2IY1^T4J>4?L&T```````%6>.D6^"?OQ;3
-$O&ZS"@``
-M\/::@SK,$ZNADC5M.5G4[!N'*^,.@``````````,W$SN[3/9CRSNP(-5?MPS
-M/X9JQN6G)TQQ`&".G-\K4,4:I"8````(W\98Y[ME_&6.>X.-'"]K:[L[1PGN
-5"S5O?3O+'ND```0R9_5EKADS^K(*
-MUO#^HJ6\/Z@-$TC9R52D!R(U&G0`5Y_!8KS^`,@`->"-XH4\1&KKN'])#B8]
-MP9TL<ZO"+L=)!MB=QMU#%.Z1*8#+Q'E#4R\1Y0"I*GE'[12IY1^P;0``````
-M`%,?;FG\KE.;I:)^9!#B8^_:IHXF/LB68&O#.ZK%/"S]LPN``````````!R>
-MD2Q6[RV9)U5CGN"6*-WA=G\JPJP1_)"S)URU_8+HC4.@````"-_&6.>[9?QE
-MCGN#C1PGNSM'">X+P```(9,_JRUPR9_5D%:WA_45)X[\EN;6P;)%'_1_Y/\`
-MH_\`(+Q1_P!'_E;2W-78)*\_@L5Y_`&0`&OA_2=S1O',.</Z2<QN-`Q2XE?I
-M:40:>'G==+F;AIU:6D!EXCRAJ9>(\H!4E3RC]HNUZ6@&X5?6J?5J"T5?5JG2
-MT6[`D````JSQN(6H9?$$,GW8F=IKUPLT]P6\-/732R8)_DAK``````````!#
-M-X,DM6?P99!;P\?<E/7*CPW=./5_^@N`````!&_C+'/=MM&XTSS@MOO`*6CA
-M/=#Z%OF%N"DTWL%H```$,F?U9:U&3%:UYF)@&<6_0M\P?0M\P"H6_0M\P?0M
-M\P"N.[7A\(4_0M\POQQRUU()*\_@L0RUFU=0#&+?H6^8/H6^8!=P_I+$,59K
-M34I@RYXU94U9Z3>8TJ^A;Y@$<<ZM#8SUP6BT3.D\]^6NH[@M9>(\H3P7F9U+
-MN;'-YW&@9A;]"WS!]"WS`*A;]"WS!]"WS`*FGANTJ_H6^878:36)V"P```!'
-()X2DY?PG]`H`
-M\/HRS3WEIP>G+-/>02P^I#8QX?4AL``````````!7G\&66O-X,D@MX;R2CU9
-M1X?R2_\`U_\`H+P`````)1Y(^92GM,L\\1;?:`7<D?,NUC2C_HM\0[&?Y!>(
-MUO6W:4@`1O/+69!)&:Q,[W*G_HGX@C/:9UJ`7<D?,G)'S+L3N-N@CR1\R<D?
-M,H9,LTG40C7/,VB)B`6\D?,NQ&H=1R6Y:[B`2<F-PH_Z+?"[';FC8.<L1[R[
-MR1\RJS[BT3M96T13>P2Z5@BT3/26;+DFT].R-+3%NX-=HVYRQ'7;DY*Q6.O5
-M1DRS;I`+;Y:UC4=U6K9;;=QXIM.[++WKCC4=P2QTBD:]W;5B94?7M\)X\LWM
-MJ8!9R1\R<D?,HYLDXYC4;5_]%OB`7<D?,G)'S*F.(GWA93+%NX)<D?,NUC3H
-M`````Y?PG].HY/"00P>G+-/>6G#Z4LT]Y!+%ZD-D,>'U(;```````````0R>
-M+)/=MMUK+%/>06<//\D)Y.F6%6&=9(79_.L@N'(ZPZ````#D^,_IBGO+;/:?
-MTQ3WD!Q9AB)M&T\U(UN(T"JEIK,=6ND\U=L33P\_;H%RO//\<PL4\1/30,SL
-M=W`&W%.Z0DKX>?XU@,O$>4*XG4[6<1Y0J!MQSND2CG\'.'G==.Y_`&7W:L/@
-MR^[5A\`0XF)Z*HO.M-62(FDL<@X`#LS,]U^#'TYK*\->:T?#3?ICF(]@59<N
-MOMJHF9F>I/5;@K69ZQL%*WA_.%O+3_#M(KOI70(<7WAG:.+]E$=P".C12E9Q
-M]E%Z\LZ!?@ON-2N9,,ZR0U@````(9?%-7GG40#E.F%FGNT7Z86<$\'J0ULW#
-MQ]VVD``````````">S%DC5FUEXB-7!"DZMM?EZTB69JC[L.OP">.=TB4E6"?
-MLTM````!R?&?TQ3WEMGQG],4]Y!9P_G"_+&Z2HX?SAHR>G8&)?PW=0NX6?OT
-H#2S\5/6(:&7B)W8%8ECC=G,GG(+^&G[=+F?AI^[30#+Q'E"I;Q'E"@``
-M@7<-.K+<_@S4G5H:<T[Q[!E]VK#X,ONU8?`$LDZI+&U9YU5D`=<2QQNVI!IP
-MUY:I9/3L[$:B(<R>G8&)?PWDH7\-Y`T``HXOV41W7\7[*([@UX?3A3Q/3(NP
-7^G"CB)W<$,?E#97M#'C\X;([`Z````H`
-M<_6U8_*Y3Y9ICX`XF=4B&9=Q,_=I4"_A8Z3*]7@C55@``````````"CB8Z;7
-MH9HW28!C:.&G<3"B>Z>&VKP"W']N6T2N49HY;Q:/==$[@'0```<GQG],4]Y;
-M9\9_3%/>06</YPT9/3LS\/YPT9/3L#$NX7U%*[A?4!I8\L[M+7:=0Q6\I!9P
-M\;LYG]24^%C<RYQ$?=L'.'G5VICQSJS9'8&7B/*%<1N=+.(\H0Q>I`$QRV73
-,.\$2KSQJ\NUG^/0*
-M_=JP^#+[M6'P!'B>D0S-/$]H9@%F#SA6LP>I`-:.3T[)(Y/3L#$GCR32=Q"`
-1"_\`Z+?$+XG<1+%#;7PC]`H`
-M>+]E$+^+]F<%]<O+CTIM.YVXZ"S!7=M_#4ACK$5C7NF````#EIU6958>\V2S
-M6U77RYX80499W?:,1N24\$;N#52-5AT`````````````8\D:M*,3J=K^)K[P
-MS@U3]^*)=P6W37NAP]M[K)'V9=>P+P```<GQG],4]Y;9\9_3%/>06</YPT9/
-M3LS\/YPT9/3L#$NX7U%*_A8^[8+<LZI+)/=JXB?XV0&GAM1$]=(\1J>TJ0".
-M\-M9W$,4=VO%.Z@HXCRA#'ZE?VGQ'E"&/U*_L%W%1VE1$M>:-U9`/=JP^#+#
-M5A\`=RUB:3/PR->68BDQ\L8"WA_45.UF8G<`W(Y/3L8[<U8,GIV!B6X:Q:>J
-MI?PWD"7)7_*V.QIT%'%^RB.Z_B_91'<%MJQ]*)B.JKW:8C>%FGN#7AG=$U/#
-M3NLK@```1R3RUF056^_+'X.)M[0[AC43>?=3DGFO,@@T<-7IM1'66S'7EKH$
-M@`````````````1R1S5F&.T:F8;F;B*ZG?R"NDS%H7YHYJ1:&9HX>VXY9!9B
-KMS5341_'DU[+P``<GQG],4]Y;9\9_3%/>06</YPOS3JDPS8[<L[=RY9N"@``
-MVCAHZ[4-6"-4_((\3/33.NXJ?OTJKY`E&&\QO1;%:L;EHBNZQU+UU6>NP9&G
-GAIWC9I7\-/30(<1Y0AC]2O[3XCR0Q^I7]@V6ZQ+'>-6TVLO$1JX*
-MX:\,?8RTCFMIIR6Y,>O<%7$7W.H]E+LSN=D1N0<$YQVBNYA`%_#WU/+\KLGI
-MV8ZSJVVN-7QZ^08U_#>2&3':OZ<QY)I.X@&P9_\`HM\0ECRS>VI@'.+]E$=U
-M_%^RB.X->.-XF2T:F6O#Z3-EC5@6<-/730R8)UDAK```4Y9YKQ6.RS);EKM7
-MBC43>P&:>2D59D\MN:THQUG0+.'KNW7LU*\->6BP``````````````!')7FK
-M*0##:-3IVDS6VX7<13^T,X-5HC)CW'=W#;<:GO"K!?4ZGLGDCEMSU[`N$:6B
-MT;2!R?&?TQ3WEN5<M/\``,KNI^&GEI_@B(]JZ!5CQS,[GHTQTAR(^4@9,\[N
-MCC\X:+13?6NRL4WTIJ061V+>,ND]@8;1J5O#3]VEDUI[T=I%8MTKJ05<3YJ\
-<?J5_;3>*S/6NW*Q3<:IH%JGB8^W:Y&\1,=8V"@``
-M>&KO[D<]MV:*1$5^V-,E_*0178N2O6=*0&R;TF-3++DB(MT1=@'$JWM7M*RN
-M/GKN.BNU9K/6`:,=XR1J5.:O+?4)<-&[2MO%9GK78,BW!YPMY:?X=I%=]*Z!
-4#B^\*([M>2*SKFKM'EI_@$L/IPH`
-M.)C5VFNHCHC>*S/6NP9:3JT-E>M85\M/\+([`Z"K-?\`K7N",_R9->QGMRUY
-M82C6*FY[L]IYIV"*W!3FMOX5UC<Z:\=>6OY!,`````````````````'+1N-,
-MF2O+;38AEIS5!D:,-XO7ELSS&IT5F:SN`7QO'?\`$KHG<;A7$QEI^4:6FEN6
-MW8%X```````````````"NV.EIVL1FL2"$8:._1QI<GY.2/F00MAIK[>[/>DU
-MG4M<5UV0XB-TW[@[AC5.CF>-TVEBC5#-X2"KA9ZS#0S<-Y2T@```````C>T5
-MC8.9+16OY0Q5_O9RE9O;FMV<SY/ZP"&:_-;IV5BS#3FMOV!9P]/>5[D1J-.@
-<````````````````````ISX]QS0SMS/FQZZP"@``
-MJ6FL[AHG66OY9DJ7FL@NQWFD\MERK[<M>G=&EII/+;L"\<B8F-PZ````````
-M`#FX^0=``')F([R;CY!T<W'R;CY!URVM=3<.]P<CL6C<:EUR>P(TI6L]$W*Q
-MIT`````$;WBL?D"]HK&Y55B<EMSV*UG)/-;L9<D5CEJ!FR16.6J@F=]RL3:=
-M0#M*S:=0UTK%8TYBI%8_*8``````````````````````#DQN'0&;-BF)W"IN
-MGJSYL7O`*J6FL[AHB:Y:]>[,1,Q.X!?]V.?F%M+1:.BK'EBWVV=M2:SS4D%P
-MJIEB>ENZT`````57F>;IV65WH'4(US)JX\I!*;1$Z=CJKZ1;JLB-1T!#)&[0
-M[-8BG1S)OFZ.]8IU!'^KENT._P!7+>,`[,[TMA3VG2Z`!R_CT0QS.P6````#
-MEK16.LJ9O:\ZH">3)KI'64:TF?NO+L5KCC=NZK+EFW2.P)9<O3EJIGJXE6LV
-MG4`Y6)F=0U8L<5C?N8L<4C\K`````````````````````````````4Y<6^M>
-M[/,3$ZEN0R8XM`,BS'EFO2>R-\=JSVZ(`U:IDCITE'[\<_A1$S':5U,WM:`6
-D5RUM^UBJ:TOXSI'^2G:-P"\55RQ_;HLK:)[2#N@`%<>4K#0*
-MK3N=2LKVZFH^'05W\X3M&ZN@*=^SMHUJ%FH^#4`KO'WK8`!S3H`(VO6.\JYR
-M6GQC8+9F(C<JK9=]*$8[6ZVF8=FV.D=-;!RN.;?=>2V2M(U7NKR99MVZ*P=O
-M>;3N478C:W'AF>MN@(8Z3:>W1II2*QT2K$1&H=``````````````````````
-M``````````!R8B>ZG)A]X7@,-JS'>'&VU*V[PIOA]X!3%ICM*ZF;VF-JIK,=
-MX1!JB<=N^HER<<]ZV9TJY+1[@MWDK[3*499]ZZ0KGUWZI1>EN\`G&2D^[O-7
-MYA#DQ3\.?3C^LP"W<?+JGZ=_:Q]/)_L%PIY<W^CDRSWL"YSFCY5?3R?[/IS[
-MV!9ST_U",Y:^W5SZ=/>8-8J]H!R<MI[4<Y<EO>8=G-6.D0A;-:>W0$XQUKY3
-MLMDI7QB%%K3/>4067RVM^$)ZB5,=K?@$$Z8[6GLOIAB._59$1$=`0ICBL=>J
-MP```````````````````````````````````````1M6+=X5WP1/BN`9+8K50
-MU/PW(VI$^P,3K1;!7V0MAGV!4[%ICW2G%:/9&:3'L#L9+1[N_5O\H3$P`L^M
-M?Y<G-?Y0`3^K?Y<F]I]T2*R!,S(E&.T^R48;_`*G5U<'RLKAK`,T5F9[+*X;
-M3U:(B(]G05UQ5CVZK(Z`````````````````````````````````````````
-M`````````YJ/AT!SEK\0<M?B'0$>2OP12OQ"0#G+7X@Y8^(=`<U#H```````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-<``````````````````````````````````__V0``
-EOF
-    write_data_to_file($data, $path);
-}
-
-sub write_favicon {
-    my $path = shift;
-    my $data =<<'EOF';
-M```!``$`$!````$`"`!H!0``%@```"@````0````(`````$`"```````````
-M```````````````````````("`D`%103`!D7%0`;&A@`'1L9`!X<&@`E)"(`
-M)B0B`"<E(@`G)2,`*"8C`"DG)0`J)R4`*2@E`"TJ)P`P,"P`,S$O`#0Q+P`T
-M,BX`-#(O`#4R+P`V,S``-34R`#DU,0`W-C,`.38S`#DW,P`[.#0`/SPW`#X\
-M.``_/#D`/STY`#\].@!#/SL`14(]`$9#/P!'1#\`2$0_`$=$0`!)1D(`3$A$
-M`$U*10!-2D8`34M&`%!-20!23DH`4T]*`%-/2P!:5U$`75E3`%];5@!E85L`
-M9F%<`&9C7P!I9%X`9V1@`&EE7P!H96``:&5B`&IG8@!N:6,`<&MD`'!L9`!S
-M;F<`=W)J`'=R:P!X<VL`=W-L`'ET;`!W='$`=W5O`'MW;P!\=W``?7=Q`(!Z
-M<P"!?'8`?WQY`(1^=@"$?G<`A']X`(:!>0"%@GX`B8-Z`(>$@0")AH(`CXF!
-M`(^,AP"3C80`DXV%`)"-B`"5CX8`D8Z+`)B3B0"<EXX`HIN3`*6=DP"FGY<`
-MIZ*8`*BBF`"JI)P`JZ:<`*ZFFP"OJ)\`L*F@`+"JH`"SK*,`MJ^E`+>PI@"W
-ML*<`N;&G`+6RK0"[LZ@`N[2J`+BTK0"\M:L`OK:M`+FVL0#!N:T`P;FN`,*Z
-ML0##N[``PKNQ`,2\L`#$O+$`P[RR`,*^N`#&O[0`R,"V`,K!MP#)P;@`R\*V
-M`,K#N0#/QKH`T<B[`-#)O0#4RKP`ULN^`,W*Q0#4S,$`U<V_`-7-P@#7SL(`
-MU\_"`-C/PP#7S\0`U\_%`-G1Q0#9U<X`W]?,`-S9TP#CVLX`W=G4`.?=T`#@
-MW-<`Y=W2`.#<V`#GWM$`Y]_2`.C?T@#BWM@`X]_9`.G@U`#JX=0`X^#;`.OB
-MU0#KX]4`[./5`.OCU@#LX]8`[>37`.;CW@#HX]\`[N77`.WEV`#NY=D`[^;8
-M`/#GV`#PY]D`\>?9`/#GV@#PY]P`\>C;`/+IVP#T[-\`\.OF`/#LY@#X[N``
-M^>_B`/SRY0#X].\`^O?R`/[[]@#__/<`_?W]`/[]_0#]_?X`_?[^`/__^@#^
-M_OX`_?[_`/[__P#___\`````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````QLG&P<F)13LY3)G)P<;)R<G&R)47,7N$A6\I);C$QLG&R'$:B["'
-&=5J(KX(*
-ID\3&P9\;LJ2FNK%Z7XZLF`R^PLD<CS-!30-5#@DF1$IV,LF7+;9#1PH`
-M+PT]7"`P6*04P%%JHDA!"TX2/E)&0D&E3VXUC*%=9E"`9&4V)%=_GFA6-8VG
-M'ZAK`6($26T`0*AG651IJ2=X<#B["!.\&+6G2W2C*K<H*S\&G049DA:NK1'%
-MR2*1(RD\'8,"%88/LW(TR<&K$GY\FF%_9WRT>90(O\+&QGT0BI9><W=@G($'
-MH,/&R<;'JB$L;)&08QXNO</&R<;)QL')FU,W.ENYR<3&R<D`````````````
-M````````````````````````````````````````````````````````````
-)````````````
-EOF
-    write_data_to_file($data, $path);
-}
-
-sub write_logo {
-    my $path = shift;
-    my $data =<<'EOF';
-M_]C_X``02D9)1@`!`0$`2`!(``#__@`30W)E871E9"!W:71H($=)35#_VP!#
-M``4#!`0$`P4$!`0%!04&!PP(!P<'!P\+"PD,$0\2$A$/$1$3%AP7$Q0:%1$1
-M&"$8&AT='Q\?$Q<B)"(>)!P>'Q[_VP!#`04%!0<&!PX("`X>%!$4'AX>'AX>
-M'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'A[_
-MP``1"`!``$`#`2(``A$!`Q$!_\0`&P```@,!`0$`````````````!@<$!0@#
-M`0+_Q``W$``!!`$"`P4%!P0#`0`````!`@,$!1$`!@<2(0@3(C%!%5%A<8$4
-M%B0R0E*1(S-RH4-B8X+_Q``7`0`#`0```````````````````@,!_\0`'!$`
-M`P$``P$!``````````````$"$1(A(C%!_]H`#`,!``(1`Q$`/P#9>JS<M]4;
-?<J'[:[L(\"$PDJ<>>6$I2/F=>[GNZ[;E!-N[60B/"@``
-=&RIUYQ9P$I`R=9&DRY/&2^5O7B!:-46QHKP360H`
-M4X&V>OY7',]%N*QD)/0#J?<62T5U@:7?:'W-NF8J#PFV@N7&*BA-O9A3;3GQ
-M::`[QSZ#/_7UU!54]HVZ`?F;Z]E*/7NXE?'#>/AWCG./DI`.F-MR9M%G;TF7
-MMBZJ/9<2,O[2\P\E00`G/,MP'*0`">OS]-#.W;J+;6J(%;Q!J+.2\4%J+'L>
-M=SPH\>`#D^6<?,ZHI2)<FP?$#M'T*>_B;R;N>7JI$VN9*,>[^@LN'Z-G5IMG
-,M&6E%.;K.+.UG*4*
-M6&Q:PB7HG-[EC\S9\NAZCU"=3YMY!L;6165G$.G:FK>4A$860*TJRL<F,^>2
-MGI\,>FB;>+.U)SS-)NJ?7"19\K,%AY24/+)PGE1GJO*CY8QUQ@ZURF"IH:%-
-M:5]Q7,V%9+9EQ7DA;;K2PI*@?(@CH=3-9#BOWO9UW@B1'<>F[!GN_BXO4B&2
-M?[S0]`"?$CT].F,:RJI\6SKH\^$\AZ.^V'&UI.0I)&01J53A6:TSIVM+63N?
-M=^VN%$!:C'EK^WVR4'JMI"@&VO\`[7@?/E]^J#M?U4:E[.J*R*A"6V)\8'E&
-M`5>+)_G4^B/MOM=[NFO^(UHC14`^7(&7'?\`3G='Z:^^VNR\_P`$'6V&7'5>
-IT8YY4))./%[M42\LFWZ0E8(V^=[;X5PS).VON#-]IED+#'?_`&560`H`
-B]>;EQGUYL:8/8R:X7V5=6^SZUL[YJXRWYD@M+24H4YR9"@``
-MSRDX6D>7KIH;KV]44O`3=,>DIXL$O[9EE;<9D(YUF*KT'KG2S[(F^MK1Z^CV
-M.G;=U%W&XTXA^<J"A$=:0HKP7.?F\@/T^>A+&8WJ$3<G9JJWB''L6E.;M<O@
-M*0,H473_`%5<^".F/AYYQC3KXFMV;?$SL]-W94JT0Y!3-*CDE\.,=YGX\V=*
-MZSVM,F;-XC7\6`\BSI]TM2HSH9/><A6XD\IQU&2D_0:9''K=<1[?G"#>ICRG
-MXD%QB?/:C-%QUCQ,O%M2?1?*1X3@]1I?P9_31^]:&+N7;4NHE,(>#K9Y$J'Z
-ML$8^O4?70)V.MP2XD:]X:6CRG']NO@P5+/5<-P<S?\=1\BG1?PXWK4[\V^J\
-MI6+!B,E]3!3-8[ESF2`2>7)Z>(=<Z6VV1[$[9266`$(LJI]#P'J0X'4?PAQ"
-M?II[6H6'CPY4`]B]KK>,)\\IL1&DHS^PL.-Y^K@:3\U:)^T7:W55L".NAM7:
-MJ9*MH<02FD!2D)=<Y2<'H?/RU3=K&KD[5WSMGBM"0H165"NM5(']M"E`M.G_
-M`!6`?GRZ\[0MJU9<(JR[ALO2647,"2XB,@N*`0Z%+``\\8/^M9+\A2](7.[N
-M*6_F.!0+-TXK<L+<TNL>GL-(0J0Q%:4ZM13CE'@(S@?I^>K#B'Q8O*[=E]#@
-5VBXS$W9L>QJPA*0(\DI0X5)./,H*
-MAC0E6;7WAN-FI@5D7V8[<3[VY2)\<J2W'?;1'PM/HI2"O'T.JB3MJWWALV1+
-M173$V%=15`0%M*23RN+9<3U'7P$9&LUFX@LLMS[_`+OM$2-H5>\)T:JAQ7)$
-$A+1""@``
-M6RP'7$`X/BSX4J\TYR,:X5EMN]CA!2[GK=_MUZMR[BC15QHT=&*H*5(2OF4I
-M2E.%00A1*SS'&23YZ$JO?,.OXZS]]I1%;I9Y>JGL.!3R$]P$%\H'B"<@'.,8
-MSJV@4M0[PDH]C-;=G)MT;J@JO7.Z6IB4%_:0AQ"P<*3W93U&!@@Z--S#2W`C
-M<%IN7AI!LKAYJ3-2\_'<E--A"9/=.J0'0!T\02#TZ:#-N'VUVRVW6,+1753Z
-MWL?I/>!I/\I;2?KJQX1WJ-L\`(3UE^$=J$OPL.(Y"5-.+2%8/GT'-GW:[]CJ
-5AE3_`+P<3K)E3;E\^&Z]*QU1#:\*
-M//\`=Y_()/KIJ?0LKMCVW90UNYMNS:*WCID0IK*FG4*'F",:RI3V=_P%W;]T
-M-VAV5MB2YBJM%?D6CT;6?)+B1TR<!0&/<=:_U4[KVW2;IIGZ>_K8]A!?3A;3
-"R`H`
-('S'N/QU*:PH`
-MU.@A3V<"UAB5726WVB`3R^:<^\>8UQE7<%DI:5S*4ZRIQ">4@J`!)'4=/(Z5
-MUSP`WKLZ6J9PHW;S0DDJ146KBR&Q^UMY!"T#TZ$''F3J`J^[0%4YW5APT59.
-M(&._1(CNH/\`B`&U8^:E'XZLK3(N&@GAT?#^ZER4L;;CPY,5MU*W4,C.'4EI
-M0Z#)_/Y?`'1A*GU&T=NQFI\Q+3$.,AM'.05K2A(3G'KY>?EI4-VO:"N%J9K>
-/'*:E:_\`F>E,M-'/[N4*
-M<^J5I.K7;O9WW%N:<BRXN;J5/8"@OV/7J4AA1_\`5PGG<^9.>@\1'31S2!0V
-M"S:;SM#[O36UR'8>Q8+OXZ:.B9(!_L-']6<>)0Z>@Z>>LZ:NB5-7&K8#*&(T
-J9M+;3:1@)2!@#7Q04U70U3%73P6(4-A`0VRR@)2D#W`:GZC5:6F</__9
-EOF
-    write_data_to_file($data, $path);
-}
-
-sub manifest_skip {
-    return <<'EOF';
-^\.git\/
-maint
-^tags$
-.last_cover_stats
-Makefile$
-^blib
-^pm_to_blib
-^.*.bak
-^.*.old
-^t.*sessions
-^cover_db
-^.*\.log
-^.*\.swp$
-EOF
-}
-
-sub jquery_minified {
-    return <<'EOF';
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
-EOF
-}
-
-__END__
-=pod
-
-=head1 NAME
-
-dancer - helper script to create new Dancer applications
-
-=head1 SYNOPSIS
-
-dancer [options] -a <appname>
-
-=head1 OPTIONS
-
-    -h, --help            : print what you are currently reading
-    -a, --application     : the name of your application
-    -p, --path            : the path where to create your application
-                              (current directory if not specified)
-    -x, --no-check        : don't check for the latest version of Dancer
-                              (checking version implies internet connection)
-    -v, --version         : print the version of dancer being used
-
-=head1 DESCRIPTION
-
-Helper script for providing a bootstrapping method to quickly and easily create
-the framework for a new Dancer application.
-
-=head1 EXAMPLE
-
-Here is an application created with dancer:
-
-    $ dancer -a MyWeb::App
-    + MyWeb-App
-	+ MyWeb-App/bin
-	+ MyWeb-App/bin/app.pl
-	+ MyWeb-App/config.yml
-	+ MyWeb-App/environments
-	+ MyWeb-App/environments/development.yml
-	+ MyWeb-App/environments/production.yml
-	+ MyWeb-App/views
-	+ MyWeb-App/views/index.tt
-	+ MyWeb-App/views/layouts
-	+ MyWeb-App/views/layouts/main.tt
-	+ MyWeb-App/MANIFEST.SKIP
-	+ MyWeb-App/lib
-	+ MyWeb-App/lib/MyWeb
-	+ MyWeb-App/lib/MyWeb/App.pm
-	+ MyWeb-App/public
-	+ MyWeb-App/public/css
-	+ MyWeb-App/public/css/style.css
-	+ MyWeb-App/public/css/error.css
-	+ MyWeb-App/public/images
-	+ MyWeb-App/public/500.html
-	+ MyWeb-App/public/404.html
-	+ MyWeb-App/public/dispatch.fcgi
-	+ MyWeb-App/public/dispatch.cgi
-	+ MyWeb-App/public/javascripts
-	+ MyWeb-App/public/javascripts/jquery.js
-	+ MyWeb-App/t
-	+ MyWeb-App/t/002_index_route.t
-	+ MyWeb-App/t/001_base.t
-	+ MyWeb-App/Makefile.PL
-
-
-The application is ready to serve:
-
-    $ cd MyWeb-App
-    $ ./bin/app.pl
-    >> Listening on 127.0.0.1:3000
-    == Entering the development dance floor ...
-
-=head1 AUTHOR
-
-This script has been written by Sebastien Deseille
-<sebastien.deseille@gmail.com> and Alexis Sukrieh
-<sukria@cpan.org>.
-
-=head1 SOURCE CODE
-
-See L<Dancer> for more information.
-
-=head1 LICENSE
-
-This module is free software and is published under the same
-terms as Perl itself.
-
-=cut
@@ -0,0 +1,146 @@
+use 5.006;
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.043
+
+use Test::More  tests => 71 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
+
+
+
+my @module_files = (
+    'Dancer.pm',
+    'Dancer/App.pm',
+    'Dancer/Config.pm',
+    'Dancer/Config/Object.pm',
+    'Dancer/Continuation.pm',
+    'Dancer/Continuation/Halted.pm',
+    'Dancer/Continuation/Route.pm',
+    'Dancer/Continuation/Route/ErrorSent.pm',
+    'Dancer/Continuation/Route/FileSent.pm',
+    'Dancer/Continuation/Route/Forwarded.pm',
+    'Dancer/Continuation/Route/Passed.pm',
+    'Dancer/Continuation/Route/Templated.pm',
+    'Dancer/Cookie.pm',
+    'Dancer/Cookies.pm',
+    'Dancer/Deprecation.pm',
+    'Dancer/Engine.pm',
+    'Dancer/Error.pm',
+    'Dancer/Exception.pm',
+    'Dancer/Exception/Base.pm',
+    'Dancer/Factory/Hook.pm',
+    'Dancer/FileUtils.pm',
+    'Dancer/GetOpt.pm',
+    'Dancer/HTTP.pm',
+    'Dancer/Handler.pm',
+    'Dancer/Handler/Debug.pm',
+    'Dancer/Handler/PSGI.pm',
+    'Dancer/Handler/Standalone.pm',
+    'Dancer/Hook.pm',
+    'Dancer/Hook/Properties.pm',
+    'Dancer/Logger.pm',
+    'Dancer/Logger/Abstract.pm',
+    'Dancer/Logger/Capture.pm',
+    'Dancer/Logger/Capture/Trap.pm',
+    'Dancer/Logger/Console.pm',
+    'Dancer/Logger/Diag.pm',
+    'Dancer/Logger/File.pm',
+    'Dancer/Logger/Note.pm',
+    'Dancer/Logger/Null.pm',
+    'Dancer/MIME.pm',
+    'Dancer/ModuleLoader.pm',
+    'Dancer/Object.pm',
+    'Dancer/Object/Singleton.pm',
+    'Dancer/Plugin.pm',
+    'Dancer/Plugin/Ajax.pm',
+    'Dancer/Renderer.pm',
+    'Dancer/Request.pm',
+    'Dancer/Request/Upload.pm',
+    'Dancer/Response.pm',
+    'Dancer/Route.pm',
+    'Dancer/Route/Cache.pm',
+    'Dancer/Route/Registry.pm',
+    'Dancer/Serializer.pm',
+    'Dancer/Serializer/Abstract.pm',
+    'Dancer/Serializer/Dumper.pm',
+    'Dancer/Serializer/JSON.pm',
+    'Dancer/Serializer/JSONP.pm',
+    'Dancer/Serializer/Mutable.pm',
+    'Dancer/Serializer/XML.pm',
+    'Dancer/Serializer/YAML.pm',
+    'Dancer/Session.pm',
+    'Dancer/Session/Abstract.pm',
+    'Dancer/Session/Simple.pm',
+    'Dancer/Session/YAML.pm',
+    'Dancer/SharedData.pm',
+    'Dancer/Template.pm',
+    'Dancer/Template/Abstract.pm',
+    'Dancer/Template/Simple.pm',
+    'Dancer/Template/TemplateToolkit.pm',
+    'Dancer/Test.pm',
+    'Dancer/Timer.pm'
+);
+
+my @scripts = (
+    'bin/dancer'
+);
+
+# no fake home requested
+
+my $inc_switch = -d 'blib' ? '-Mblib' : '-Ilib';
+
+use File::Spec;
+use IPC::Open3;
+use IO::Handle;
+
+open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
+
+my @warnings;
+for my $lib (@module_files)
+{
+    # see L<perlfaq8/How can I capture STDERR from an external command?>
+    my $stderr = IO::Handle->new;
+
+    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, '-e', "require q[$lib]");
+    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+    my @_warnings = <$stderr>;
+    waitpid($pid, 0);
+    is($?, 0, "$lib loaded ok");
+
+    if (@_warnings)
+    {
+        warn @_warnings;
+        push @warnings, @_warnings;
+    }
+}
+
+foreach my $file (@scripts)
+{ SKIP: {
+    open my $fh, '<', $file or warn("Unable to open $file: $!"), next;
+    my $line = <$fh>;
+
+    close $fh and skip("$file isn't perl", 1) unless $line =~ /^#!\s*(?:\S*perl\S*)((?:\s+-\w*)*)(?:\s*#.*)?$/;
+    my @flags = $1 ? split(' ', $1) : ();
+
+    my $stderr = IO::Handle->new;
+
+    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, @flags, '-c', $file);
+    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+    my @_warnings = <$stderr>;
+    waitpid($pid, 0);
+    is($?, 0, "$file compiled ok");
+
+   # in older perls, -c output is simply the file portion of the path being tested
+    if (@_warnings = grep { !/\bsyntax OK$/ }
+        grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
+    {
+        warn @_warnings;
+        push @warnings, @_warnings;
+    }
+} }
+
+
+
+is(scalar(@warnings), 0, 'no warnings found') if $ENV{AUTHOR_TESTING};
+
+
@@ -0,0 +1,119 @@
+use strict;
+use warnings;
+use Test::More 0.88;
+# This is a relatively nice way to avoid Test::NoWarnings breaking our
+# expectations by adding extra tests, without using no_plan.  It also helps
+# avoid any other test module that feels introducing random tests, or even
+# test plans, is a nice idea.
+our $success = 0;
+END { $success && done_testing; }
+
+# List our own version used to generate this
+my $v = "\nGenerated by Dist::Zilla::Plugin::ReportVersions::Tiny v1.10\n";
+
+eval {                     # no excuses!
+    # report our Perl details
+    my $want = '5.006';
+    $v .= "perl: $] (wanted $want) on $^O from $^X\n\n";
+};
+defined($@) and diag("$@");
+
+# Now, our module version dependencies:
+sub pmver {
+    my ($module, $wanted) = @_;
+    $wanted = " (want $wanted)";
+    my $pmver;
+    eval "require $module;";
+    if ($@) {
+        if ($@ =~ m/Can't locate .* in \@INC/) {
+            $pmver = 'module not found.';
+        } else {
+            diag("${module}: $@");
+            $pmver = 'died during require.';
+        }
+    } else {
+        my $version;
+        eval { $version = $module->VERSION; };
+        if ($@) {
+            diag("${module}: $@");
+            $pmver = 'died during VERSION check.';
+        } elsif (defined $version) {
+            $pmver = "$version";
+        } else {
+            $pmver = '<undef>';
+        }
+    }
+
+    # So, we should be good, right?
+    return sprintf('%-45s => %-10s%-15s%s', $module, $pmver, $wanted, "\n");
+}
+
+eval { $v .= pmver('Carp','any version') };
+eval { $v .= pmver('Cwd','any version') };
+eval { $v .= pmver('Data::Dumper','any version') };
+eval { $v .= pmver('Devel::Hide','any version') };
+eval { $v .= pmver('Encode','any version') };
+eval { $v .= pmver('Exporter','any version') };
+eval { $v .= pmver('ExtUtils::MakeMaker','any version') };
+eval { $v .= pmver('Fcntl','any version') };
+eval { $v .= pmver('File::Basename','any version') };
+eval { $v .= pmver('File::Copy','any version') };
+eval { $v .= pmver('File::Path','any version') };
+eval { $v .= pmver('File::Spec','any version') };
+eval { $v .= pmver('File::Spec::Functions','any version') };
+eval { $v .= pmver('File::Temp','any version') };
+eval { $v .= pmver('File::stat','any version') };
+eval { $v .= pmver('FindBin','any version') };
+eval { $v .= pmver('Getopt::Long','any version') };
+eval { $v .= pmver('HTTP::Body','any version') };
+eval { $v .= pmver('HTTP::Cookies','any version') };
+eval { $v .= pmver('HTTP::Date','any version') };
+eval { $v .= pmver('HTTP::Headers','any version') };
+eval { $v .= pmver('HTTP::Request','any version') };
+eval { $v .= pmver('HTTP::Server::Simple::PSGI','any version') };
+eval { $v .= pmver('Hash::Merge::Simple','any version') };
+eval { $v .= pmver('IO::File','any version') };
+eval { $v .= pmver('IO::Handle','any version') };
+eval { $v .= pmver('IPC::Open3','any version') };
+eval { $v .= pmver('LWP::UserAgent','any version') };
+eval { $v .= pmver('MIME::Types','any version') };
+eval { $v .= pmver('Module::Runtime','any version') };
+eval { $v .= pmver('POSIX','any version') };
+eval { $v .= pmver('Plack::Builder','any version') };
+eval { $v .= pmver('Pod::Usage','any version') };
+eval { $v .= pmver('Scalar::Util','any version') };
+eval { $v .= pmver('Test::Builder','any version') };
+eval { $v .= pmver('Test::More','0.88') };
+eval { $v .= pmver('Time::HiRes','any version') };
+eval { $v .= pmver('Try::Tiny','any version') };
+eval { $v .= pmver('URI','any version') };
+eval { $v .= pmver('URI::Escape','any version') };
+eval { $v .= pmver('base','any version') };
+eval { $v .= pmver('bytes','any version') };
+eval { $v .= pmver('constant','any version') };
+eval { $v .= pmver('lib','any version') };
+eval { $v .= pmver('overload','any version') };
+eval { $v .= pmver('parent','any version') };
+eval { $v .= pmver('strict','any version') };
+eval { $v .= pmver('utf8','any version') };
+eval { $v .= pmver('vars','any version') };
+eval { $v .= pmver('warnings','any version') };
+
+
+# All done.
+$v .= <<'EOT';
+
+Thanks for using my code.  I hope it works for you.
+If not, please try and include this output in the bug report.
+That will help me reproduce the issue and solve your problem.
+
+EOT
+
+diag($v);
+ok(1, "we really didn't test anything, just reporting data");
+$success = 1;
+
+# Work around another nasty module on CPAN. :/
+no warnings 'once';
+$Template::Test::NO_FLUSH = 1;
+exit 0;
@@ -44,7 +44,7 @@ use Test::More tests => 10, import => ['!pass'];
 
     # check that we can enable it
     {
-        setting import_warnings => 1;
+        setting global_warnings => 1;
 
         my $warn;
         local $SIG{__WARN__} = sub { $warn = $_[0] };
@@ -1,244 +0,0 @@
-use strict;
-use warnings;
-
-use Test::More import => ['!pass'];
-
-unless ( $ENV{RELEASE_TESTING} ) {
-    plan( skip_all => "Author tests not required for installation" );
-}
-
-#### Change these values if the Changelog syntax changes :
-
-# changelog file name
-my $changelog_filename = 'CHANGES';
-
-# don't check for versions older or equal to this
-my $stop_checking_version = '1.3079_03';
-
-# ordered list of possible sections
-my @possible_sections = ('SECURITY', 'API CHANGES', 'BUG FIXES', 'ENHANCEMENTS', 'DOCUMENTATION', );
-
-#################
-
-
-# beware : below are some crazy paranoid testing
-
-my $possible_sections = join('|', @possible_sections);
-
-open(my $fh, '<', $changelog_filename);
-my @lines = map { chomp; $_ } <$fh>;
-
-my $tests_count = 0;
-while (1) { $lines[$tests_count++] !~ /^\Q$stop_checking_version\E(?:\s|$)/ or last }
-
-# test count = number of lines + 1
-plan tests => $tests_count;
-
-my @struct;
-
-{ # start scoping
-
-my $line_nb = 0;
-my $line;
-sub _consume_line { $line = shift @lines;
-                    defined $line or goto END_CHANGES;
-                    $line =~ /^\Q$stop_checking_version\E(?:\s|$)/ and goto END_CHANGES;
-                    $line_nb++;
-                  }
-sub _peek_line { $line = $lines[0];
-                 defined $line or goto END_CHANGES;
-                 $line =~ /^\Q$stop_checking_version\E(?:\s|$)/ and goto END_CHANGES;
-               }
-sub _fail { fail("changelog error (line $line_nb): " . shift() . " line was : '$line'"); }
-sub _fail_bail_out { _fail(@_); BAIL_OUT("changelog is not safe enough to continue checking"); }
-sub _pass { Test::More::pass("check line $line_nb"); }
-
-my $current_version;
-my $current_version_is_dev;
-my $current_section;
-my $current_item_start;
-my $current_item;
-
-WHERE_NEXT:
-_peek_line();
-if (defined $current_item || defined $current_item_start) {
-    # we can have an item line, a new item start, or a separator
-    $line =~ /^\s+\*/  and goto ITEM_START;
-    $line =~ /^\s+\S+/ and goto ITEM;
-    $line =~ /^\s*$/   and goto SEPARATOR;
-    _fail_bail_out("next line doesn't look like an item line, a new item start, or a separator");
-}
-if (defined $current_section) {
-    # we can have an item line, a new item start
-    $line =~ /^\s+\*/  and goto ITEM_START;
-    $line =~ /^\s+\S+/ and goto ITEM;
-    _fail_bail_out("next line doesn't look like an item line, a new item start");
-}
-if (defined $current_version) {
-    # we can have a new section or a new version
-    $line =~ /^\s/   and goto SECTION;
-    $line =~ /^\S/   and goto VERSION;
-    _fail_bail_out("next line doesn't look like a new section or new version");
-}
-goto VERSION;
-
-
-SEPARATOR:
-# separator
-_consume_line();
-$line eq '' ? _pass() : _fail_bail_out("should be a separator (empty line)");
-$current_section = undef;
-$current_item_start = undef;
-$current_item = undef;
-goto WHERE_NEXT;
-
-VERSION:
-# version number
-_consume_line();
-if ( (my ($pre, $version, $post)) = ($line =~ /^(\s*)(\S.*\S)(\s*)$/)) {
-    defined $pre or $pre = '';
-    defined $post or $post = '';
-    my $lpre = length $pre;
-    my $lpost = length $post;
-    $lpre and _fail("line starts with $lpre blank caracters, but it should not");
-    $lpost and _fail("line ends with $lpre blank caracters, but it should not");
-    like($version, qr/^\{\{\$NEXT\}\}$|^\d\.\d{4}(_\d{2}   |      )\d{2}.\d{2}.\d{4}$/, "changelog line $line_nb: check version failed");
-    $version =~ qr/^(\{\{\$NEXT\}\})$|^\d\.\d{4}(_\d{2}   |      )\d{2}.\d{2}.\d{4}$/;
-#    print STDERR " ------->  [$1] [$2]\n";
-    $current_version_is_dev = defined $1 || $2 =~ /^_\d{2}/;
-
-    $current_version = [];
-    $current_section = undef;
-    $current_item_start = undef;
-    $current_item = undef;
-    push @struct, { $version => $current_version };
-} else {
-    _fail("line should contain a version number, but it contains '$line'.");
-}
-$current_version_is_dev
-  and goto SEPARATOR;
-goto CODENAME;
-
-CODENAME:
-# the codename is not mandatory, but strongly encouraged. So warn if it's not
-# there, but don't die
-_peek_line();
-if ($line =~ /^\s*$/) {
-    warn "It's recommended to add a CodeName to stable releases (non-dev versions).\n"
-         . "There is no CodeName at line $line_nb. Codename format is : "
-         . "    ** Codename: <The Name> // <The person it's dedicated to> ** \n"
-         . "The // ... part is optional.";
-    goto SEPARATOR;
-}
-_consume_line();
-like($line, qr|^    \*\* Codename: [^/]+( // [^/]+)? \*\*$|);
-goto SEPARATOR;
-
-SECTION:
-_consume_line();
-if ( (my ($pre, $section, $post)) = ($line =~ /^(\s*)(\S.*\S)(\s*)$/) ) {
-    defined $pre or $pre = '';
-    defined $post or $post = '';
-    my $lpre = length $pre;
-    my $lpost = length $post;
-    $pre ne '    ' and _fail("line starts with $lpre blank caracters, but it should start with exactly 4 spaces");
-    $lpost and _fail("line ends with $lpre blank caracters, but it should not");
-    like($section, qr/^\[ ($possible_sections) \]$/, "line $line_nb: check section");
-    $current_section = [];
-    $current_item_start = undef;
-    $current_item = undef;
-    push @$current_version, { $section => $current_section };
-} else {
-    _fail_bail_out("line should contain a section string, but it contains '$line'.");
-}
-goto WHERE_NEXT;
-
-ITEM_START:
-_consume_line();
-if ( (my ($pre, $item_start)) = ($line =~ /^(\s*)(.+)$/) ) {
-    defined $pre or $pre = '';
-    my $lpre = length $pre;
-    $pre ne '    ' and _fail("line starts with $lpre blank caracters, but it should start with exactly 4 spaces");
-    like($item_start, qr/^\* /, "line $line_nb: item line starts with *");
-    $current_item_start = [ $item_start ];
-    $current_item = undef;
-    push @$current_section, $current_item_start;
-} else {
-    _fail_bail_out("line should contain an item start, but it contains '$line'.");
-}
-goto WHERE_NEXT;
-
-ITEM:
-_consume_line();
-if ( (my ($pre, $item)) = ($line =~ /^(\s*)(.+)$/) ) {
-    defined $pre or $pre = '';
-    my $lpre = length $pre;
-    $pre ne '      ' and _fail("line starts with $lpre blank caracters, but it should start with exactly 6 spaces");
-    _pass();
-    $current_item = $item;
-    push @$current_item_start, $item;
-} else {
-    _fail_bail_out("line should contain an item, but it contains '$line'.");
-}
-goto WHERE_NEXT;
-
-END_CHANGES:
-
-} # end scoping
-
-
-# we are doing advanced testing in a subtest because we couldn't compute the
-# number of test upfront. But now we can
-
-subtest 'Advanced testing of changelog' => sub {
-
-    my $sections_count = 0;
-
-    my $versions_next_count = 0;
-    my $versions_count = scalar(@struct);
-    foreach my $version_struct (@struct) {
-        my $version_number = (keys(%$version_struct))[0];
-        $version_number eq '{{$NEXT}}'
-          and $versions_next_count++;
-        $sections_count += scalar(@{$version_struct->{$version_number}});
-    }
-
-    my $section_comparison_count = ( ($versions_count-1) + ( ($versions_count-1) - $versions_next_count ) * 2);
-    $section_comparison_count >= 0
-      or $section_comparison_count = 0;
-
-    plan tests => $section_comparison_count + $sections_count;
-
-    my $previous_version_struct;
-    foreach my $version_struct (reverse @struct) {
-        my $version_number = (keys(%$version_struct))[0];
-        my $previous_version_number = (keys(%$previous_version_struct))[0];
-        if (defined $previous_version_number) {
-            isnt ($previous_version_number, '{{$NEXT}}', "version $version_number has {{\$NEXT}} as previous version, that's wrong");
-            if ($version_number ne '{{$NEXT}}') {
-                my ($v1,  $v2,  $v3,  $d1,  $d2,   $d3) = ( $version_number          =~ /^(\d)\.(\d{4})(?:_(\d{2}))?\s+(\d{2})\.(\d{2})\.(\d{4})$/ );
-                my ($pv1, $pv2, $pv3, $pd1, $pd2, $pd3) = ( $previous_version_number =~ /^(\d)\.(\d{4})(?:_(\d{2}))?\s+(\d{2})\.(\d{2})\.(\d{4})$/ );
-                ok($v1 >= $pv1 || $v2 >= $pv2 || ($v3||0) >= ($pv3||0), "version '$version_number' is not greater than '$previous_version_number', that's wrong");
-                ok($d3 >= $pd3 || $d2 >= $pd2 ||      $d1 >= $pd1,      "version '$version_number' is not newer (date) than '$previous_version_number', that's wrong");
-            }
-        }
-        my $previous_section_name;
-        foreach my $section_struct (@{$version_struct->{$version_number}}) {
-            my $section_name = (keys(%$section_struct))[0];
-            if (defined $previous_section_name) {
-                my @temp = @possible_sections;
-                while (1) {
-                    my $s = shift @temp;
-                    $previous_section_name eq "[ $s ]"
-                      and last;
-                }
-                my $allowed_section_names = join('|', @temp);
-                like($section_name, qr/^\[ ($allowed_section_names) \]$/, "failure : section '$section_name' cannot come after '$previous_section_name'.");
-            } else {
-                Test::More::pass('first section ok');
-            }
-            $previous_section_name = $section_name;
-        }
-        $previous_version_struct = $version_struct;
-    }
-};
@@ -2,7 +2,7 @@ use Test::More;
 use Dancer ':tests', ':syntax';
 use Dancer::Test;
 
-plan tests => 16;
+plan tests => 17;
 
 # basic redirect
 {
@@ -81,6 +81,10 @@ plan tests => 16;
     response_headers_include [GET => '/bounce'] => [Location => 'http://nice.host.name/'],
       "Test X_FORWARDED_HOST";
 
+    local $ENV{X_FORWARDED_PROTO} = "proto";
+    response_headers_include [GET => '/bounce'] => [Location => 'proto://nice.host.name/'],
+      "Test X_FORWARDED_PROTO";
+
     $ENV{HTTP_FORWARDED_PROTO} = "https";
     response_headers_include [GET => '/bounce'] => [Location => 'https://nice.host.name/'],
       "Test HTTP_FORWARDED_PROTO";
@@ -0,0 +1,18 @@
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+use Dancer ':tests';
+use Dancer::Test;
+
+my @custom_header = ( 'X-Fruity' => 'tropical' );
+
+get '/' => sub {
+    headers @custom_header;
+
+    halt( 'ABORT!' );
+};
+
+response_headers_include [ GET => '/' ] => \@custom_header, "headers kept";
+response_content_is( '/', 'ABORT!' );
@@ -0,0 +1,51 @@
+use strict;
+use warnings;
+
+use Test::More tests => 10;
+
+use Dancer ':tests';
+use Dancer::Test;
+
+prefix '/a' => sub {
+    prefix '/1' => sub {
+        get '/A' => sub { '/a/1/A' };
+    };
+};
+prefix '/b' => sub {
+    prefix '/1' => sub {
+        get '/A' => sub { '/b/1/A' };
+    };
+    prefix '/2' => sub {
+        get '/A' => sub { '/b/2/A' };
+        get '/B' => sub { '/b/2/B' };
+    };
+};
+prefix '/c' => sub {
+    prefix '/1' => sub {
+        get '/A' => sub { '/c/1/A' };
+    };
+    prefix '/2' => sub {
+        get '/A' => sub { '/c/2/A' };
+        get '/B' => sub { '/c/2/B' };
+    };
+    prefix '/3' => sub {
+        get '/A' => sub { '/c/3/A' };
+        get '/B' => sub { '/c/3/B' };
+        get '/C' => sub { '/c/3/C' };
+    };
+};
+
+response_content_is $_ => $_, $_
+    for qw#
+        /a/1/A
+        /b/1/A
+        /b/2/A
+        /b/2/B
+        /c/1/A
+        /c/2/A
+        /c/2/B
+        /c/3/A
+        /c/3/B
+        /c/3/C
+    #;
+
@@ -0,0 +1,27 @@
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+use Dancer ':tests';
+use Dancer::Test;
+
+# failsafe
+my $level = 1;
+
+set session => 'Simple';
+
+get "/index" => sub {
+    session player => "Groo";
+    $level++;
+    forward "/main";
+};
+
+get "/main" => sub {
+    die "urrrgh" if $level > 10;
+    forward("/index") unless session("player");
+    "Hello world, " . session("player") . "!";
+};
+
+response_content_is '/index' => 'Hello world, Groo!', 
+    'session is maintained by the forward';
@@ -0,0 +1,23 @@
+use strict;
+use warnings;
+
+use Test::More tests => 3;
+
+use Dancer ':tests';
+
+prefix '/foo';
+
+get '0' => sub { '0' };
+
+# useful when we have prefixes and want to 
+# use the prefix url too. E.g., here /foo
+get ''  => sub { '' };
+
+get ' ' => sub { ' ' };
+
+use Dancer::Test;
+
+response_content_is "/foo$_" => $_ for '', 0, ' ';
+
+
+
@@ -6,13 +6,14 @@ use Dancer::ModuleLoader;
 plan skip_all => "Test::Output is needed for this test"
     unless Dancer::ModuleLoader->load("Test::Output");
 
-plan tests => 3;
+plan tests => 4;
 
 use Dancer;
 
 set startup_info => false, apphandler   => 'Debug';
 
 get '/' => sub { 42 };
+get '/env' => sub { request->env->{HTTP_X_REQUESTED_WITH} };
 
 my $handler = Dancer::Handler->get_handler;
 isa_ok $handler, 'Dancer::Handler::Debug';
@@ -27,3 +28,17 @@ Test::Output::stdout_like
   );
 
 is $psgi->[0], 200, "psgi response is ok";
+
+subtest "env variables" => sub {
+    plan tests => 2;
+
+    @ARGV = (GET => '/env', 'foo=42', 'HTTP_X_REQUESTED_WITH=XMLHttpRequest');
+    Test::Output::stdout_like
+    (
+    sub { $psgi = Dancer->start },
+    qr{X-Powered-By: Perl Dancer.*XMLHttpRequest}sm, 
+    "output looks good"
+    );
+
+    is $psgi->[0], 200, "psgi response is ok";
+};
@@ -0,0 +1,17 @@
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+
+use Dancer::Handler;
+
+for ( 'text/xml', 'text/html', 'text/javascript', 'text/json' ) {
+    ok Dancer::Handler::_is_text($_), $_;
+}
+
+# see issue #994
+for ( 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) {
+    ok !Dancer::Handler::_is_text($_), $_;
+}
+
+
@@ -3,12 +3,24 @@ use warnings;
 use Test::More import => ['!pass'];
 
 use Dancer::Session;
+use Dancer::Cookies;
 
-plan tests => 3;
+plan tests => 6;
 
 my $session = Dancer::Session->init('Simple', {});
 ok $session;
 
 is_deeply($session, Dancer::Session->engine);
 
-ok my $session_desc = Dancer::Session->get_current_session;
+my $desc = Dancer::Session->get_current_session;
+ok $desc;
+ok( Dancer::Cookies->cookies->{'dancer.session'} );
+
+# remove this
+delete Dancer::Cookies->cookies->{'dancer.session'};
+
+# after this no cookie should get set
+ok( Dancer::Session->get_current_session( no_update => 1 ) );
+
+# no session cookie for you!
+ok !exists Dancer::Cookies->cookies->{'dancer.session'};
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 7;
+use Test::More tests => 8;
 use Dancer ':syntax', ':tests';
 
 set session => "simple";
@@ -25,3 +25,28 @@ note "changing session name"; {
     isnt session("up"), "down",                   "other session's values not seen";
     is session("foo"), "bar",                     "original value restored";
 }
+
+
+{
+    package Dancer::Session::TestOverrideName;
+
+    use base 'Dancer::Session::Abstract';
+
+    sub session_name { "dr_seuss"; }
+}
+
+subtest 'session name overridable' => sub {
+    plan tests => 2;
+    
+    # make sure that session code overrides session_name via object
+    # instead of configuration, see GH#1004
+    #
+
+    my $session = Dancer::Session::TestOverrideName->new;
+
+    is $session->session_name, "dr_seuss", "session_name in driver";
+
+    $session->write_session_id(613);
+
+    ok( Dancer::Cookies->cookies->{'dr_seuss'}, 'session name is used' );
+}
@@ -20,7 +20,7 @@ plan skip_all => "HTTP::Request::Common is needed for this test"
 
 use LWP::UserAgent;
 
-plan tests => 6;
+plan tests => 10;
 
 Test::TCP::test_tcp(
     client => sub {
@@ -54,3 +54,71 @@ Test::TCP::test_tcp(
         Dancer->dance();
     },
 );
+
+Test::TCP::test_tcp(
+    client => sub {
+        my $port = shift;
+        my $ua = LWP::UserAgent->new;
+
+        my $req = HTTP::Request::Common::GET(
+            "http://127.0.0.1:$port/unicode-content-length");
+        my $res = $ua->request($req);
+
+        is $res->content_type, 'text/html';
+        # UTF-8 seems to be Dancer's default encoding
+        my $v = "\x{100}0123456789";
+        utf8::encode($v);
+        is $res->content, $v;
+    },
+    server => sub {
+        my $port = shift;
+
+        use lib "t/lib";
+        use TestAppUnicode;
+        Dancer::Config->load;
+
+        set(
+            # no charset
+            environment  => 'production',
+            port         => $port,
+            startup_info => 0,
+        );
+        Dancer->dance;
+    },
+);
+
+SKIP: {
+    skip "JSON module required for test", 2 
+        unless Dancer::ModuleLoader->load('JSON');
+
+    Test::TCP::test_tcp(
+        client => sub {
+            my $port = shift;
+            my $ua = LWP::UserAgent->new;
+
+            my $req = HTTP::Request::Common::GET(
+                "http://127.0.0.1:$port/unicode-content-length-json");
+            my $res = $ua->request($req);
+
+            is $res->content_type, 'application/json';
+            is_deeply(from_json($res->content), { test => "\x{100}" });
+        },
+        server => sub {
+            my $port = shift;
+
+            use lib "t/lib";
+            use TestAppUnicode;
+            Dancer::Config->load;
+
+            set(
+                # no charset
+                environment  => 'production',
+                port         => $port,
+                startup_info => 0,
+                serializer   => 'JSON',
+            );
+            Dancer->dance;
+        },
+    );
+
+}
@@ -5,14 +5,14 @@ use Test::More;
 use Dancer::Error;
 use Dancer::ModuleLoader;
 
-plan skip_all => 'Clone is required for this test'
-    unless Dancer::ModuleLoader->load('Clone');
-
-plan tests => 4;
+plan tests => 5;
 
 my $error_obj = Dancer::Error->new(
     code => '404',
     pass => 'secret',
+    deep => {
+        pass => 'secret'
+    },
 );
 
 isa_ok( $error_obj, 'Dancer::Error' );
@@ -21,7 +21,7 @@ my $censored = $error_obj->dumper;
 
 like(
     $censored,
-    qr/\QNote: Values of 1 sensitive-looking key hidden\E/,
+    qr/\QNote: Values of 2 sensitive-looking keys hidden\E/,
     'Data was censored in the output',
 );
 
@@ -31,6 +31,12 @@ is(
     'Original data was not overwritten',
 );
 
+is(
+    $error_obj->{'deep'}{'pass'},
+    'secret',
+    'Censoring of complex data structures works fine',
+);
+
 my %recursive;
 $recursive{foo}{bar}{baz}  = 1;
 $recursive{foo}{bar}{oops} = $recursive{foo};
@@ -0,0 +1,34 @@
+use strict;
+use warnings;
+
+BEGIN {
+    use Test::More;
+
+    plan skip_all => 'Devel::Hide required' unless eval 'use Devel::Hide; 1';
+}
+
+use Devel::Hide 'Clone';
+
+plan tests => 3;
+
+{ 
+    package MyApp;
+
+    use Dancer;
+
+    my $data = { deep => { secret => 'akadabra' } };
+
+    get '/dump' => sub { Dancer::Error::dumper( $data ) };
+    get '/straight' => sub { $data->{deep}{secret} };
+}
+
+use Dancer::Test;
+
+
+response_content_is '/straight' => 'akadabra', 'secret visible';
+
+response_content_like '/dump' => qr/secret.*Hidden/, 'masked by dumper()';
+
+response_content_is '/straight' => 'akadabra', '...but not modified';
+
+
@@ -11,12 +11,13 @@ BEGIN {
       unless Dancer::ModuleLoader->load('JSON');
 }
 
-plan tests => 6;
+plan tests => 10;
 
-set serializer => 'mutable';
+setting serializer => 'mutable';
 
 get  '/' => sub { { foo => 1 } };
 post '/' => sub { request->params };
+post '/echo' => sub { params };
 
 for my $ct (qw/Accept Accept-Type/) {
     my $res = dancer_response(
@@ -35,10 +36,52 @@ my $res = dancer_response(
         params  => { foo => 42 },
         headers => [
             'Content-Type' => 'text/x-yaml',
-            'Accept-Type'  => 'application/json'
+            'Accept-Type'  => 'text/x-yaml'
         ]
     }
 );
 
 is_deeply(from_yaml($res->content), {foo => 42});
 is $res->header('Content-Type'), 'text/x-yaml';
+
+# Make sure to grok correct (de)serializer for body params
+# when the Content-Type is as supported media type with additional
+# parameters.
+my $data = { bar => 4711 };
+$res = dancer_response(
+    POST => '/echo',
+    {
+        body => to_yaml($data), # make sure to stringify
+        # Specifying this content_type is redundant but dancer_response
+        # has a bug in that it does not take the Content-Type of the
+        # headers before falling back to
+        # application/x-www-form-urlencoded :(
+        content_type => 'text/x-yaml; charset=utf-8',
+        headers => [
+            'Content-Type' => 'text/x-yaml; charset=utf-8',
+        ]
+    }
+);
+is_deeply( from_yaml( $res->content ), $data );
+is $res->header('Content-Type'), 'text/x-yaml; charset=utf-8';
+
+# We were incorrectly using 'Content-Type' also for responses although
+# the user told us in 'Accept' to use a different format.
+$res = dancer_response(
+    POST => '/echo',
+    {
+        body => to_json($data), # make sure to stringify
+        # Specifying this content_type is redundant but dancer_response
+        # has a bug in that it does not take the Content-Type of the
+        # headers before falling back to
+        # application/x-www-form-urlencoded :(
+        content_type => 'application/json; charset=utf-8',
+        headers => [
+            'Content-Type' => 'application/json; charset=utf-8',
+            'Accept'       => 'text/x-yaml; charset=utf-8',
+        ]
+    }
+);
+is_deeply( from_yaml( $res->content ), $data );
+is $res->header('Content-Type'), 'text/x-yaml; charset=utf-8';
+
@@ -7,7 +7,7 @@ use Dancer::Request;
 use Dancer::Serializer;
 use Dancer::Serializer::Abstract;
 
-plan tests => 16;
+plan tests => 18;
 
 SKIP: {
     skip 'JSON is needed to run this test', 3
@@ -49,10 +49,8 @@ SKIP: {
 }
 
 SKIP: {
-    skip 'JSON is needed to run this test', 3
-      unless Dancer::ModuleLoader->load('JSON');
-    skip 'YAML is needed to run this test', 3
-      unless Dancer::ModuleLoader->load('YAML');
+    Dancer::ModuleLoader->load($_) or skip "$_ is needed to run this test", 5
+        for qw/ JSON YAML /;
 
     set serializer => 'Mutable';
     my $s = Dancer::Serializer->engine;
@@ -71,7 +69,9 @@ SKIP: {
 
     my $req = Dancer::Request->new( env => \%ENV );
     Dancer::SharedData->request($req);
-    my $ct = Dancer::Serializer::Mutable::_find_content_type($req);
+    my $ct = Dancer::Serializer::Mutable::_request_content_types($req);
+    is_deeply $ct, [ 'application/json' ];
+    $ct = Dancer::Serializer::Mutable::_response_content_types($req);
     is_deeply $ct, [ 'text/xml', 'text/x-yaml', 'application/json' ];
 
     %ENV = (
@@ -80,7 +80,9 @@ SKIP: {
     );
     $req = Dancer::Request->new( env => \%ENV );
     Dancer::SharedData->request($req);
-    $ct = Dancer::Serializer::Mutable::_find_content_type($req);
+    $ct = Dancer::Serializer::Mutable::_request_content_types($req);
+    is_deeply $ct, ['application/json'];
+    $ct = Dancer::Serializer::Mutable::_response_content_types($req);
     is_deeply $ct, ['application/json'];
 
     %ENV = (
@@ -91,8 +93,8 @@ SKIP: {
     );
     $req = Dancer::Request->new( env => \%ENV );
     Dancer::SharedData->request($req);
-    $ct = Dancer::Serializer::Mutable::_find_content_type($req);
-    is_deeply $ct, [ 'application/json', 'text/xml' ];
+    $ct = Dancer::Serializer::Mutable::_response_content_types($req);
+    is_deeply $ct, [ 'text/xml', 'application/json' ];
 }
 
 # handler helper
@@ -0,0 +1,21 @@
+use Test::More import => ['!pass'];
+use strict;
+use warnings;
+use Dancer ':tests';
+use Dancer::Test;
+
+BEGIN {
+    plan skip_all => "need JSON"
+      unless Dancer::ModuleLoader->load('JSON');
+
+    plan tests => 2;
+}
+
+set 'serializer' => 'JSONP', 'show_errors' => 1;
+
+get  '/'          => sub { { foo => 'bar' } };
+
+my $res = dancer_response( GET => '/' , { params => { callback => 'func' } } );
+is $res->header('Content-Type'), 'application/javascript';
+like $res->content, qr/func\( \s* \{ \s* "foo" \s* : \s* "bar" \s* \} \s* \); /mix;
+
@@ -0,0 +1,36 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+plan skip_all => "need JSON"
+    unless Dancer::ModuleLoader->load('JSON');
+
+plan tests => 2;
+
+use Dancer ':tests';
+use Dancer::Test;
+
+use Dancer::Serializer::Mutable qw/ template_or_serialize /;
+
+set serializer => 'Mutable';
+
+no warnings 'redefine';
+sub Dancer::template {
+    return $_[0];
+}
+
+get '/' => sub {
+    template_or_serialize 'index', { a => 1 };    
+};
+
+my $resp = dancer_response GET => '/';
+
+like $resp->content => qr/"a"\s*:\s*1/, "serialized to JSON";
+
+$resp = dancer_response GET => '/', { params => {  
+    content_type => 'text/html'
+} };
+
+is $resp->content => 'index', 'use the template';
+
@@ -0,0 +1,50 @@
+use strict;
+use warnings;
+use Test::More import => ['!pass'];
+plan tests => 3;
+
+{
+    use Dancer ':syntax';
+
+    # This plugin already inherits from Data::Dumper
+    use File::Spec;
+    use lib File::Spec->catdir( 't', 'lib' );
+
+    eval { require TestPluginMRO;
+           TestPluginMRO->import };
+
+    if (my $error = $@) {
+
+        diag($error);
+
+        if ($error =~ /Can't locate mro\.pm/) {
+
+            # normal error, skip 3
+            skip 'mro is not available on this machine', 3;
+
+        } else {
+
+            fail('plugins can be used under the C3 MRO');
+            skip 'no point in running the rest', 2;
+
+        }
+
+    } else {
+
+        # this can't be pass because Dancer exports pass() :/
+        ok(1, 'plugins can be used under the C3 MRO');
+
+        # and the plugin otherwise behaves.  these tests are cribbed
+        # from the existing 05_plugins_and_OO.t
+    
+        # Make sure the keyword is well registerd
+        is(some_other_plugin_keyword(), 42, 'plugin keyword is exported');
+
+        # Make sure the plugin is still a Data::Dumper child
+        my $d = TestPluginMRO->new( [ 1, 2 ], [ qw(foo bar) ] );
+        is($d->Dump(), "\$foo = 1;\n\$bar = 2;\n");
+
+
+    }
+
+}
@@ -30,7 +30,7 @@ END {
 my $libdir = File::Spec->catdir($cwd,'blib','lib');
 $libdir = '"'.$libdir.'"' if $libdir =~ / /; # this is for windows, but works in UNIX systems as well...
 
-my $dancer = File::Spec->catfile( $cwd, 'script', 'dancer' );
+my $dancer = File::Spec->catfile( $cwd, 'bin', 'dancer' );
 $dancer = '"'.$dancer.'"' if $dancer =~ / /; #same here.
 
 # the same can happen with perl itself, but while nobody complain, keep it quiet.
@@ -26,7 +26,7 @@ chdir $dir;
 my $libdir = File::Spec->catdir($cwd, 'blib', 'lib');
 $libdir = '"'.$libdir.'"' if $libdir =~ / /;
 
-my $dancer = File::Spec->catdir($cwd, 'script', 'dancer');
+my $dancer = File::Spec->catdir($cwd, 'bin', 'dancer');
 $dancer = '"'.$dancer.'"' if $dancer =~ / /;
 
 my $cmd = "$^X -I $libdir $dancer";
@@ -0,0 +1,18 @@
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+
+use Dancer ':tests';
+use Dancer::Test;
+
+get '/uri_base' => sub { request->uri_base };
+get '/uri' => sub { request->uri };
+get '/path' => sub { request->path };
+
+response_content_is '/uri_base' => 'http://localhost';
+response_content_is '/uri' => '/uri';
+response_content_is '/uri?with=params' => '/uri?with=params';
+response_content_is '/path' => '/path';
+response_content_is '/path?with=params' => '/path';
+
@@ -31,5 +31,13 @@ get '/form' => sub {
     })."\x{E9} - string1: ".params->{'string1'}
 };
 
+get '/unicode-content-length' => sub {
+    "\x{100}0123456789";
+};
+
+get '/unicode-content-length-json' => sub {
+    { test => "\x{100}" };
+};
+
 
 1;
@@ -0,0 +1,18 @@
+package TestPluginMRO;
+
+use strict;
+use warnings;
+
+use mro 'c3';
+
+use Dancer ':syntax';
+use Dancer::Plugin;
+
+use base qw(Data::Dumper);
+
+register some_other_plugin_keyword => sub {
+    42;
+};
+
+register_plugin;
+1;